When remove gendisk, set the size of inode of block_device to zero. This is mainly let the vfs know disk removed. Signed-off-by: Jianpeng Ma <majianpeng@xxxxxxxxx> --- block/genhd.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/block/genhd.c b/block/genhd.c index dadf42b..9a4c245 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -1369,6 +1369,12 @@ int invalidate_partition(struct gendisk *disk, int partno) if (bdev) { fsync_bdev(bdev); res = __invalidate_device(bdev, true); + /* + * When used buffer-mode on raw blockdevice,the disk removed. + * But the vfs don't know.So tell the vfs size of disk + * became zero, the buffer write can return + */ + i_size_write(bdev->bd_inode, 0); bdput(bdev); } return res; -- 1.8.4-rc0 ÿôèº{.nÇ+?·?®??+%?Ëÿ±éݶ¥?wÿº{.nÇ+?·¥?{±ýûz÷¥þ)í?æèw*jg¬±¨¶????Ý¢jÿ¾«þG«?éÿ¢¸¢·¦j:+v?¨?wèjØm¶?ÿþø¯ù®w¥þ?àþf£¢·h??â?úÿ?Ù¥