Message ID | 20210805213154.GZ3601443@magnolia (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | iomap: pass writeback errors to the mapping | expand |
On Thu, Aug 05, 2021 at 02:31:54PM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@kernel.org> > > Modern-day mapping_set_error has the ability to squash the usual > negative error code into something appropriate for long-term storage in > a struct address_space -- ENOSPC becomes AS_ENOSPC, and everything else > becomes EIO. iomap squashes /everything/ to EIO, just as XFS did before > that, but this doesn't make sense. > > Fix this by making it so that we can pass ENOSPC to userspace when > writeback fails due to space problems. > > Signed-off-by: Darrick J. Wong <djwong@kernel.org> I could have sworn I sent this patch in earlier. Anyway, Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
On Thu, Aug 05, 2021 at 11:12:39PM +0100, Matthew Wilcox wrote: > On Thu, Aug 05, 2021 at 02:31:54PM -0700, Darrick J. Wong wrote: > > From: Darrick J. Wong <djwong@kernel.org> > > > > Modern-day mapping_set_error has the ability to squash the usual > > negative error code into something appropriate for long-term storage in > > a struct address_space -- ENOSPC becomes AS_ENOSPC, and everything else > > becomes EIO. iomap squashes /everything/ to EIO, just as XFS did before > > that, but this doesn't make sense. > > > > Fix this by making it so that we can pass ENOSPC to userspace when > > writeback fails due to space problems. > > > > Signed-off-by: Darrick J. Wong <djwong@kernel.org> > > I could have sworn I sent this patch in earlier. Anyway, > > Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> It was an RFC that I then forgot about for a while. I'll stuff this in the iomap for-next branch the next time I do an update, which ... let's see where the iomap iter series goes, review-wise. --D
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index 87ccb3438bec..b06138c6190b 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -1016,7 +1016,7 @@ iomap_finish_page_writeback(struct inode *inode, struct page *page, if (error) { SetPageError(page); - mapping_set_error(inode->i_mapping, -EIO); + mapping_set_error(inode->i_mapping, error); } WARN_ON_ONCE(i_blocks_per_page(inode, page) > 1 && !iop);