On 11/24/20 9:27 PM, Christoph Hellwig wrote: > Now that the hd_struct always has a block device attached to it, there is > no need for having two size field that just get out of sync. > > Additional the field in hd_struct did not use proper serializiation, > possibly allowing for torn writes. By only using the block_device field > this problem also gets fixed. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > Reviewed-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> For the bcache part, Acked-by: Coly Li <colyli@xxxxxxx> Thanks. Coly Li > --- > block/bio.c | 4 +- > block/blk-core.c | 2 +- > block/blk.h | 53 ---------------------- > block/genhd.c | 55 +++++++++++----------- > block/partitions/core.c | 17 ++++--- > drivers/block/loop.c | 1 - > drivers/block/nbd.c | 2 +- > drivers/block/xen-blkback/common.h | 4 +- > drivers/md/bcache/super.c | 2 +- > drivers/s390/block/dasd_ioctl.c | 4 +- > drivers/target/target_core_pscsi.c | 7 +-- > fs/block_dev.c | 73 +----------------------------- > fs/f2fs/super.c | 2 +- > fs/pstore/blk.c | 2 +- > include/linux/genhd.h | 29 +++--------- > kernel/trace/blktrace.c | 2 +- > 16 files changed, 60 insertions(+), 199 deletions(-) > [snipped] > diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c > index c55d3c58a7ef55..04fa40868fbe10 100644 > --- a/drivers/md/bcache/super.c > +++ b/drivers/md/bcache/super.c > @@ -1408,7 +1408,7 @@ static int cached_dev_init(struct cached_dev *dc, unsigned int block_size) > q->limits.raid_partial_stripes_expensive; > > ret = bcache_device_init(&dc->disk, block_size, > - dc->bdev->bd_part->nr_sects - dc->sb.data_offset, > + bdev_nr_sectors(dc->bdev) - dc->sb.data_offset, > dc->bdev, &bcache_cached_ops); > if (ret) > return ret; [snipped]