Message ID | 20180521183503.6029-1-jlayton@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 5/21/18 12:35 PM, Jeff Layton wrote: > From: Jeff Layton <jlayton@redhat.com> > > When a loop block device encounters a writeback error, that error will > get propagated to the bd_inode's wb_err field. If we then detach the > backing file from it, attach another and fsync it, we'll get back the > writeback error that we had from the previous backing file. > > This is a bit of a grey area as POSIX doesn't cover loop devices, but it > is somewhat counterintuitive. > > If we detach a backing file from the loopdev while there are still > unreported errors, take it as a sign that we're no longer interested in > the previous file, and clear out the wb_err in the loop blockdev. Applied, thanks Jeff.
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 5d4e31655d96..55cf554bc914 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -1068,6 +1068,7 @@ static int loop_clr_fd(struct loop_device *lo) if (bdev) { bdput(bdev); invalidate_bdev(bdev); + bdev->bd_inode->i_mapping->wb_err = 0; } set_capacity(lo->lo_disk, 0); loop_sysfs_exit(lo);