• Jan Kara's avatar
    block: Try to handle busy underlying device on discard · 56887cff
    Jan Kara authored
    Commit 384d87ef ("block: Do not discard buffers under a mounted
    filesystem") made paths issuing discard or zeroout requests to the
    underlying device try to grab block device in exclusive mode. If that
    failed we returned EBUSY to userspace. This however caused unexpected
    fallout in userspace where e.g. FUSE filesystems issue discard requests
    from userspace daemons although the device is open exclusively by the
    kernel. Also shrinking of logical volume by LVM issues discard requests
    to a device which may be claimed exclusively because there's another LV
    on the same PV. So to avoid these userspace regressions, fall back to
    invalidate_inode_pages2_range() instead of returning EBUSY to userspace
    and return EBUSY only of that call fails as well (meaning that there's
    indeed someone using the particular device range we are trying to
    discard).
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=211167
    Fixes: 384d87ef ("block: Do not discard buffers under a mounted filesystem")
    CC: stable@vger.kernel.org
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    56887cff
block_dev.c 48.3 KB