On Thu, Feb 09, 2017 at 04:54:17PM +0100, Jan Kara wrote: > From aaf612333753b948a96aebe4a2f8066ed45ef164 Mon Sep 17 00:00:00 2001 > From: Jan Kara <jack@xxxxxxx> > Date: Thu, 9 Feb 2017 12:16:30 +0100 > Subject: [PATCH 03/10] block: Revalidate i_bdev reference in bd_aquire() > > When a device gets removed, block device inode unhashed so that it is not > used anymore (bdget() will not find it anymore). Later when a new device > gets created with the same device number, we create new block device > inode. However there may be file system device inodes whose i_bdev still > points to the original block device inode and thus we get two active > block device inodes for the same device. They will share the same > gendisk so the only visible differences will be that page caches will > not be coherent and BDIs will be different (the old block device inode > still points to unregistered BDI). > > Fix the problem by checking in bd_acquire() whether i_bdev still points > to active block device inode and re-lookup the block device if not. That > way any open of a block device happening after the old device has been > removed will get correct block device inode. > > Signed-off-by: Jan Kara <jack@xxxxxxx> Acked-by: Tejun Heo <tj@xxxxxxxxxx> Thanks. -- tejun