rescan_partitions() and invalidate_partitions() in block/partition-generic.c set bdev->bd_invalidated = 0 after calling check_disk_size_change(). But revalidate_disk() in fs/block_dev.c does not clear it. If bdev->bd_invalidated = 1 then rescan_partitions() is called when __blkdev_get() is called. So if revalidate_disk() is once called, all buffer cache pages will be cleared whenever the device is opened. This patch fixes the bug. I add bdev->bd_invalidated = 0; after calling check_disk_size_change(). Signed-off-by: MITSUNARI Shigeo <herumi@xxxxxxxxx> --- fs/block_dev.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/block_dev.c b/fs/block_dev.c index 38e721b..2577cf4 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -1047,6 +1047,7 @@ int revalidate_disk(struct gendisk *disk) mutex_lock(&bdev->bd_mutex); check_disk_size_change(disk, bdev); + bdev->bd_invalidated = 0; mutex_unlock(&bdev->bd_mutex); bdput(bdev); return ret; -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html