From 214dd0cb2dded4657593a8b6ecc4a39e4e4e83d9 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Thu, 20 Mar 2014 13:46:04 -0700 Subject: [PATCH] Add support for setting cache tier field --- bcache.h | 3 +++ make-bcache.c | 28 +++++++++++++++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/bcache.h b/bcache.h index 61e42524..b9e148ba 100644 --- a/bcache.h +++ b/bcache.h @@ -104,6 +104,9 @@ BITMASK(CACHE_REPLACEMENT, struct cache_sb, flags, 2, 3); #define CACHE_REPLACEMENT_FIFO 1U #define CACHE_REPLACEMENT_RANDOM 2U +BITMASK(CACHE_TIER, struct cache_sb, flags, 2, 5); +#define CACHE_TIERS 4U + BITMASK(BDEV_CACHE_MODE, struct cache_sb, flags, 0, 4); #define CACHE_MODE_WRITETHROUGH 0U #define CACHE_MODE_WRITEBACK 1U diff --git a/make-bcache.c b/make-bcache.c index 9e55fac1..6f3ad41b 100644 --- a/make-bcache.c +++ b/make-bcache.c @@ -169,9 +169,8 @@ const char * const cache_replacement_policies[] = { static void write_sb(char *dev, unsigned block_size, unsigned bucket_size, bool writeback, bool discard, bool wipe_bcache, - unsigned cache_replacement_policy, - uint64_t data_offset, - uuid_t set_uuid, bool bdev, + unsigned cache_replacement_policy, uint64_t data_offset, + uuid_t set_uuid, unsigned tier, bool bdev, uint16_t nr_in_set, uint16_t nr_this_dev) { int fd; @@ -256,6 +255,7 @@ static void write_sb(char *dev, unsigned block_size, unsigned bucket_size, SET_CACHE_DISCARD(&sb, discard); SET_CACHE_REPLACEMENT(&sb, cache_replacement_policy); + SET_CACHE_TIER(&sb, tier); printf("UUID: %s\n" "Set UUID: %s\n" @@ -341,6 +341,8 @@ int main(int argc, char **argv) { int c, bdev = -1; unsigned i, ncache_devices = 0, nbacking_devices = 0; + unsigned long tier = 0; + unsigned cache_device_tier[argc]; char *cache_devices[argc]; char *backing_devices[argc]; @@ -363,6 +365,7 @@ int main(int argc, char **argv) { "cache_replacement_policy", 1, NULL, 'p' }, { "data_offset", 1, NULL, 'o' }, { "cset-uuid", 1, NULL, 'u' }, + { "tier", 1, NULL, 't' }, { "help", 0, NULL, 'h' }, { NULL, 0, NULL, 0 }, }; @@ -409,6 +412,13 @@ int main(int argc, char **argv) exit(EXIT_FAILURE); } break; + case 't': + tier = strtoul(optarg, NULL, 10); + if (tier >= CACHE_TIERS) { + fprintf(stderr, "Invalid tier %lu\n", tier); + exit(EXIT_FAILURE); + } + break; case 'h': usage(); break; @@ -418,10 +428,13 @@ int main(int argc, char **argv) exit(EXIT_FAILURE); } - if (bdev) + if (bdev) { backing_devices[nbacking_devices++] = optarg; - else + } else { + cache_device_tier[ncache_devices] = tier; cache_devices[ncache_devices++] = optarg; + } + break; } @@ -449,13 +462,14 @@ int main(int argc, char **argv) write_sb(cache_devices[i], block_size, bucket_size, writeback, discard, wipe_bcache, cache_replacement_policy, data_offset, - set_uuid, false, ncache_devices, i); + set_uuid, cache_device_tier[i], false, + ncache_devices, i); for (i = 0; i < nbacking_devices; i++) write_sb(backing_devices[i], block_size, bucket_size, writeback, discard, wipe_bcache, cache_replacement_policy, data_offset, - set_uuid, true, nbacking_devices, i); + set_uuid, 0, true, nbacking_devices, i); return 0; }