diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2016-01-21 10:04:44 -0900 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2016-10-07 12:35:21 -0800 |
commit | b654418b2eb907ad97578d9d21fa6f9db2724597 (patch) | |
tree | 73aa2af63f663d22308fd81ed094301a815bbf20 | |
parent | 38ba3c88c89c4faba95454d8faa5ce681290b147 (diff) |
bcache: simplify/fix bch_inode_blockdev
-rw-r--r-- | drivers/md/bcache/bkey.h | 9 | ||||
-rw-r--r-- | drivers/md/bcache/blockdev.c | 25 | ||||
-rw-r--r-- | drivers/md/bcache/inode.c | 5 | ||||
-rw-r--r-- | drivers/md/bcache/sysfs.c | 6 | ||||
-rw-r--r-- | drivers/md/bcache/writeback.c | 2 | ||||
-rw-r--r-- | include/uapi/linux/bcache.h | 11 |
6 files changed, 29 insertions, 29 deletions
diff --git a/drivers/md/bcache/bkey.h b/drivers/md/bcache/bkey.h index 3f9796287cbb..afe3fa930a20 100644 --- a/drivers/md/bcache/bkey.h +++ b/drivers/md/bcache/bkey.h @@ -497,14 +497,7 @@ static inline void __bch_extent_assert(u8 type, u8 nr) __BKEY_VAL_ACCESSORS(extent, BCH_EXTENT, __bch_extent_assert); BKEY_VAL_ACCESSORS(inode, BCH_INODE_FS); - -static inline void __bch_inode_blockdev_assert(u8 type, u8 nr) -{ - EBUG_ON(type != BCH_INODE_BLOCKDEV && type != BCH_INODE_CACHED_DEV); -} - -__BKEY_VAL_ACCESSORS(inode_blockdev, BCH_INODE_BLOCKDEV, - __bch_inode_blockdev_assert); +BKEY_VAL_ACCESSORS(inode_blockdev, BCH_INODE_BLOCKDEV); BKEY_VAL_ACCESSORS(dirent, BCH_DIRENT); diff --git a/drivers/md/bcache/blockdev.c b/drivers/md/bcache/blockdev.c index 3cf6b15ce1fc..3bb7e642509d 100644 --- a/drivers/md/bcache/blockdev.c +++ b/drivers/md/bcache/blockdev.c @@ -361,8 +361,7 @@ void bch_cached_dev_detach(struct cached_dev *dc) int bch_cached_dev_attach(struct cached_dev *dc, struct cache_set *c) { - struct timespec ts = CURRENT_TIME; - __le64 rtime = cpu_to_le64(timespec_to_ns(&ts)); + __le64 rtime = cpu_to_le64(ktime_get_seconds()); char buf[BDEVNAME_SIZE]; bool found; int ret; @@ -420,12 +419,13 @@ int bch_cached_dev_attach(struct cached_dev *dc, struct cache_set *c) closure_init_stack(&cl); bkey_inode_blockdev_init(&dc->disk.inode.k_i); - dc->disk.inode.k.type = BCH_INODE_CACHED_DEV; + dc->disk.inode.k.type = BCH_INODE_BLOCKDEV; + SET_CACHED_DEV(&dc->disk.inode.v, true); dc->disk.inode.v.i_uuid = dc->disk_sb.sb->disk_uuid; memcpy(dc->disk.inode.v.i_label, dc->disk_sb.sb->label, SB_LABEL_SIZE); - dc->disk.inode.v.i_inode.i_ctime = rtime; - dc->disk.inode.v.i_inode.i_mtime = rtime; + dc->disk.inode.v.i_ctime = rtime; + dc->disk.inode.v.i_mtime = rtime; ret = bch_inode_create(c, &dc->disk.inode.k_i, 0, BLOCKDEV_INODE_MAX, @@ -443,7 +443,7 @@ int bch_cached_dev_attach(struct cached_dev *dc, struct cache_set *c) bch_write_bdev_super(dc, &cl); closure_sync(&cl); } else { - dc->disk.inode.v.i_inode.i_mtime = rtime; + dc->disk.inode.v.i_mtime = rtime; bch_inode_update(c, &dc->disk.inode.k_i, NULL); } @@ -706,7 +706,7 @@ static int blockdev_volume_run(struct cache_set *c, kobject_init(&d->kobj, &bch_blockdev_volume_ktype); ret = bcache_device_init(d, block_bytes(c), - le64_to_cpu(inode.v->i_inode.i_size) >> 9); + le64_to_cpu(inode.v->i_size) >> 9); if (ret) goto err; @@ -758,16 +758,15 @@ int bch_blockdev_volumes_start(struct cache_set *c) int bch_blockdev_volume_create(struct cache_set *c, u64 size) { - struct timespec ts = CURRENT_TIME; - __le64 rtime = cpu_to_le64(timespec_to_ns(&ts)); + __le64 rtime = cpu_to_le64(ktime_get_seconds()); struct bkey_i_inode_blockdev inode; int ret; bkey_inode_blockdev_init(&inode.k_i); get_random_bytes(&inode.v.i_uuid, sizeof(inode.v.i_uuid)); - inode.v.i_inode.i_ctime = rtime; - inode.v.i_inode.i_mtime = rtime; - inode.v.i_inode.i_size = cpu_to_le64(size); + inode.v.i_ctime = rtime; + inode.v.i_mtime = rtime; + inode.v.i_size = cpu_to_le64(size); ret = bch_inode_create(c, &inode.k_i, 0, BLOCKDEV_INODE_MAX, &c->unused_inode_hint); @@ -792,7 +791,7 @@ void bch_blockdevs_stop(struct cache_set *c) radix_tree_for_each_slot(slot, &c->devices, &iter, 0) { d = radix_tree_deref_slot(slot); - if (d->inode.k.type == BCH_INODE_CACHED_DEV && + if (CACHED_DEV(&d->inode.v) && test_bit(CACHE_SET_UNREGISTERING, &c->flags)) { dc = container_of(d, struct cached_dev, disk); bch_cached_dev_detach(dc); diff --git a/drivers/md/bcache/inode.c b/drivers/md/bcache/inode.c index aa5bfa76e423..88ed75560560 100644 --- a/drivers/md/bcache/inode.c +++ b/drivers/md/bcache/inode.c @@ -244,7 +244,7 @@ int bch_cached_dev_inode_find_by_uuid(struct cache_set *c, uuid_le *uuid, if (k.k->p.inode >= BLOCKDEV_INODE_MAX) break; - if (k.k->type == BCH_INODE_CACHED_DEV) { + if (k.k->type == BCH_INODE_BLOCKDEV) { struct bkey_s_c_inode_blockdev inode = bkey_s_c_to_inode_blockdev(k); @@ -252,7 +252,8 @@ int bch_cached_dev_inode_find_by_uuid(struct cache_set *c, uuid_le *uuid, inode.k->p.inode, inode.v->i_uuid.b, inode.k->u64s); - if (!memcmp(uuid, &inode.v->i_uuid, 16)) { + if (CACHED_DEV(inode.v) && + !memcmp(uuid, &inode.v->i_uuid, 16)) { bkey_reassemble(&ret->k_i, k); bch_btree_iter_unlock(&iter); return 0; diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c index b7a44c522ac1..b7b075eeca28 100644 --- a/drivers/md/bcache/sysfs.c +++ b/drivers/md/bcache/sysfs.c @@ -390,7 +390,7 @@ SHOW(bch_blockdev_volume) struct bcache_device *d = container_of(kobj, struct bcache_device, kobj); - sysfs_hprint(size, le64_to_cpu(d->inode.v.i_inode.i_size)); + sysfs_hprint(size, le64_to_cpu(d->inode.v.i_size)); if (attr == &sysfs_label) { memcpy(buf, d->inode.v.i_label, SB_LABEL_SIZE); @@ -414,7 +414,7 @@ STORE(__bch_blockdev_volume) mutex_lock(&d->inode_lock); - if (v < le64_to_cpu(d->inode.v.i_inode.i_size) ){ + if (v < le64_to_cpu(d->inode.v.i_size) ){ ret = bch_inode_truncate(d->c, d->inode.k.p.inode, v >> 9, NULL); if (ret) { @@ -422,7 +422,7 @@ STORE(__bch_blockdev_volume) return ret; } } - d->inode.v.i_inode.i_size = cpu_to_le64(v); + d->inode.v.i_size = cpu_to_le64(v); ret = bch_inode_update(d->c, &d->inode.k_i, &journal_seq); mutex_unlock(&d->inode_lock); diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c index 784c665060fc..e066c6df89e3 100644 --- a/drivers/md/bcache/writeback.c +++ b/drivers/md/bcache/writeback.c @@ -514,7 +514,7 @@ void bch_writeback_recalc_oldest_gens(struct cache_set *c) d = radix_tree_deref_slot(slot); - if (d->inode.k.type != BCH_INODE_CACHED_DEV) + if (!CACHED_DEV(&d->inode.v)) continue; dc = container_of(d, struct cached_dev, disk); diff --git a/include/uapi/linux/bcache.h b/include/uapi/linux/bcache.h index f75edb1edf38..0cf12fcb38de 100644 --- a/include/uapi/linux/bcache.h +++ b/include/uapi/linux/bcache.h @@ -461,7 +461,6 @@ BKEY_VAL_TYPE(extent, BCH_EXTENT); enum bch_inode_types { BCH_INODE_FS = 128, BCH_INODE_BLOCKDEV = 129, - BCH_INODE_CACHED_DEV = 130, }; enum { @@ -513,13 +512,21 @@ BKEY_VAL_TYPE(inode, BCH_INODE_FS); struct bch_inode_blockdev { struct bch_val v; - struct bch_inode i_inode; + + __le64 i_size; + __le64 i_flags; + + /* Seconds: */ + __le64 i_ctime; + __le64 i_mtime; uuid_le i_uuid; __u8 i_label[32]; } __attribute__((packed, aligned(8))); BKEY_VAL_TYPE(inode_blockdev, BCH_INODE_BLOCKDEV); +/* Thin provisioned volume, or cache for another block device? */ +LE64_BITMASK(CACHED_DEV, struct bch_inode_blockdev, i_flags, 0, 1) /* Dirents */ /* |