block: Invalidate the cache for a parent block-device if blkdev_issue_flush() was called for a partition
PATCH 1/1 block: Invalidate the cache for a parent block-device if blkdev_issue_flush() was called for a partition
Executing a BLKFLSBUF-ioctl on a partition flushes the caches for that partition but reading data through the parent device will still return the old cached data.
The cache for the block-device is not synced if the block-device is kept open (due to a mounted partition, for example). Only when all users for the disk have exited, the cache for the disk is made consistent again.
Calling invalidate_bdev() on the parent block-device in case blkdev_issue_flush() was called for a partition fixes this.
The problem can be worked around by forcing the caches to be flushed with either
# blockdev --flushbufs ${dev_disk}
or
# echo 3 > /proc/sys/vm/drop_caches--- block/blk-flush.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
block/blk-flush.c +3 -0
@@ -448,6 +448,9 @@ int blkdev_issue_flush(struct block_device *bdev, gfp_t gfp_mask,if (!bio_flagged (bio,BIO_UPTODATE )) ret = -EIO ; +else if (bdev != bdev->bd_contains) +/* invalidate parent block_device */ +invalidate_bdev (bdev->bd_contains);bio_put (bio);return ret;
Signature · 1 line
1.7.6.5
Quoted 11 lines · Niels de Vos
Executing a BLKFLSBUF-ioctl on a partition flushes the caches for that partition but reading data through the parent device will still return the old cached data.
The cache for the block-device is not synced if the block-device is kept open (due to a mounted partition, for example). Only when all users for the disk have exited, the cache for the disk is made consistent again.
Calling
invalidate_bdev()on the parent block-device in caseblkdev_issue_flush()was called for a partition fixes this.
Quoted 8 lines
The problem can be worked around by forcing the caches to be flushed with either
# blockdev --flushbufs ${dev_disk} or # echo 3 > /proc/sys/vm/drop_cachesCC Bryn M. Reeves <[email protected]>Signed-off-by Niels de Vos <[email protected]>
Cheers,
Bryn.