From: Vivek Goyal <[email protected]> If a block device is hot removed and later last reference to device is put, we try to writeback the dirty inode. But device is gone and that writeback fails.
Currently we do a WARN_ON() which does not seem to be the right thing. Convert it to a ratelimited kernel warning. Reported-by: Andi Kleen <[email protected]> Signed-off-by: Vivek Goyal <[email protected]> Acked-by: Tejun Heo <[email protected]> [[email protected]: get rid of unnecessary name initialization, 80 cols] Signed-off-by: Jeff Moyer <[email protected]> --- Jens, we're still getting reports of this problem in Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=1196089 Here's the last posting and discussion of this patch for reference: https://lkml.org/lkml/2015/6/22/487 diff --git a/fs/block_dev.c b/fs/block_dev.c index 073bb57..d9d3039 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -50,12 +50,21 @@ struct block_device *I_BDEV(struct inode *inode) } EXPORT_SYMBOL(I_BDEV); -static void bdev_write_inode(struct inode *inode) +static void bdev_write_inode(struct block_device *bdev) { + struct inode *inode = bdev->bd_inode; + int ret; + spin_lock(&inode->i_lock); while (inode->i_state & I_DIRTY) { spin_unlock(&inode->i_lock); - WARN_ON_ONCE(write_inode_now(inode, true)); + ret = write_inode_now(inode, true); + if (ret) { + char name[BDEVNAME_SIZE]; + pr_warn_ratelimited("VFS: Dirty inode writeback failed " + "for block device %s (err=%d).\n", + bdevname(bdev, name), ret); + } spin_lock(&inode->i_lock); } spin_unlock(&inode->i_lock); @@ -1504,7 +1513,7 @@ static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part) * ->release can cause the queue to disappear, so flush all * dirty data before. */ - bdev_write_inode(bdev->bd_inode); + bdev_write_inode(bdev); } if (bdev->bd_contains == bdev) { if (disk->fops->release) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

