[dm-devel] WARNING: at fs/block_dev.c:5 when removing LV on removed device

Vivek Goyal vgoyal at redhat.com
Thu Jun 18 19:08:15 UTC 2015


On Thu, Jun 18, 2015 at 02:16:19PM -0400, Mike Snitzer wrote:
> On Thu, Jun 18 2015 at  2:08pm -0400,
> Andi Kleen <andi at firstfloor.org> wrote:
> 
> > > Hmm, so you have a filesystem active on it too?
> > 
> > I unmounted it before.
> > 
> > >  
> > > > Also the VG removal did not work of course.
> > > 
> > > Once you resolve the filesystem piece, from vgremove man page:
> > > 
> > > "vgremove allows you to remove one or more volume groups.  If one or
> > > more physical volumes in the volume group are lost, consider vgreduce
> > > --removemissing to make the volume group metadata consistent again."
> > 
> > Well in any case there should not be WARN()s.
> 
> Yes well I don't even know what WARN_ON you're hitting.  You're running
> a 4.0.4 fedora kernel.  Which WARN_ON() is triggering?  The
> WARN_ON_ONCE() in bdev_write_inode()? -- likely since the only caller of
> bdev_write_inode is __blkdev_put...
> 
> /**
>  * write_inode_now      -       write an inode to disk
>  * @inode: inode to write to disk
>  * @sync: whether the write should be synchronous or not
>  *
>  * This function commits an inode to disk immediately if it is dirty. This is
>  * primarily needed by knfsd.
>  *
>  * The caller must either have a ref on the inode or must have set I_WILL_FREE.
>  */
> 
> So I have no idea why bdev_write_inode() is using WARN_ON_ONCE.. makes
> since that write_inode_now() will fail if the disk no longer exists.  SO
> the WARN_ON_ONCE seems misplaced.
> 
> Git blame shows its all hch's fault:
> 
> 564f00f6c (Christoph Hellwig  2015-01-14 10:42:33 +0100   57) WARN_ON_ONCE(write_inode_now(inode, true));
> 
> 564f00f6c block_dev: only write bdev inode on close

I can reproduce it too in a Fedora 22 virtual machine. I just have to do
"umount <mnt>" after hot unplugging the virtIO disk.

But it does not happen without lvm. If I create ext4 fs directly on
/dev/vda1, then when disk goes way, fs automatically gets unmounted.

But same does not happen when /dev/vda1 is added to a volume group and
I carve out a logical volume and create and mount fs.

In that case if I do umount after device has gone away, I can see above
WARN(). And it does seem to be coming from.

WARN_ON_ONCE(write_inode_now(inode, true))

If we failed to write back inode, then warning about it sounds right?
What's wrong with that? Should it be just a kernel log of level KERN_WARN
instead?

Thanks
Vivek




More information about the dm-devel mailing list