block: Move bdev_unhash_inode() after invalidate_partition()
authorJan Kara <jack@suse.cz>
Tue, 21 Feb 2017 17:09:46 +0000 (18:09 +0100)
committerJens Axboe <axboe@fb.com>
Tue, 21 Feb 2017 19:51:54 +0000 (12:51 -0700)
Move bdev_unhash_inode() after invalidate_partition() as
invalidate_partition() looks up bdev and it cannot find the right bdev
inode after bdev_unhash_inode() is called. Thus invalidate_partition()
would not invalidate page cache of the previously used bdev. Also use
part_devt() when calling bdev_unhash_inode() instead of manually
creating the device number.

Tested-by: Lekshmi Pillai <lekshmicpillai@in.ibm.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/genhd.c

index 3631cd4..15b3c18 100644 (file)
@@ -669,9 +669,8 @@ void del_gendisk(struct gendisk *disk)
        disk_part_iter_init(&piter, disk,
                             DISK_PITER_INCL_EMPTY | DISK_PITER_REVERSE);
        while ((part = disk_part_iter_next(&piter))) {
-               bdev_unhash_inode(MKDEV(disk->major,
-                                       disk->first_minor + part->partno));
                invalidate_partition(disk, part->partno);
+               bdev_unhash_inode(part_devt(part));
                delete_partition(disk, part->partno);
        }
        disk_part_iter_exit(&piter);