Message ID | 20170616193427.13955-22-jlayton@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Jun 16, 2017 at 03:34:26PM -0400, Jeff Layton wrote: > Just check and advance the data errseq_t in struct file before > before returning from fsync on normal files. Internal filemap_* > callers are left as-is. > Looks good. Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com> > Signed-off-by: Jeff Layton <jlayton@redhat.com> > --- > fs/xfs/xfs_file.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index 5fb5a0958a14..bc3b1575e8db 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -134,7 +134,7 @@ xfs_file_fsync( > struct inode *inode = file->f_mapping->host; > struct xfs_inode *ip = XFS_I(inode); > struct xfs_mount *mp = ip->i_mount; > - int error = 0; > + int error = 0, err2; > int log_flushed = 0; > xfs_lsn_t lsn = 0; > > @@ -142,10 +142,12 @@ xfs_file_fsync( > > error = filemap_write_and_wait_range(inode->i_mapping, start, end); > if (error) > - return error; > + goto out; > > - if (XFS_FORCED_SHUTDOWN(mp)) > - return -EIO; > + if (XFS_FORCED_SHUTDOWN(mp)) { > + error = -EIO; > + goto out; > + } > > xfs_iflags_clear(ip, XFS_ITRUNCATED); > > @@ -197,6 +199,11 @@ xfs_file_fsync( > mp->m_logdev_targp == mp->m_ddev_targp) > xfs_blkdev_issue_flush(mp->m_ddev_targp); > > +out: > + err2 = filemap_report_wb_err(file); > + if (!error) > + error = err2; > + > return error; > } > > -- > 2.13.0 >
On Fri, Jun 16, 2017 at 03:34:26PM -0400, Jeff Layton wrote: > Just check and advance the data errseq_t in struct file before > before returning from fsync on normal files. Internal filemap_* > callers are left as-is. > > Signed-off-by: Jeff Layton <jlayton@redhat.com> > --- > fs/xfs/xfs_file.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index 5fb5a0958a14..bc3b1575e8db 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -134,7 +134,7 @@ xfs_file_fsync( > struct inode *inode = file->f_mapping->host; > struct xfs_inode *ip = XFS_I(inode); > struct xfs_mount *mp = ip->i_mount; > - int error = 0; > + int error = 0, err2; > int log_flushed = 0; > xfs_lsn_t lsn = 0; > > @@ -142,10 +142,12 @@ xfs_file_fsync( > > error = filemap_write_and_wait_range(inode->i_mapping, start, end); > if (error) > - return error; > + goto out; > > - if (XFS_FORCED_SHUTDOWN(mp)) > - return -EIO; > + if (XFS_FORCED_SHUTDOWN(mp)) { > + error = -EIO; > + goto out; > + } > > xfs_iflags_clear(ip, XFS_ITRUNCATED); > > @@ -197,6 +199,11 @@ xfs_file_fsync( > mp->m_logdev_targp == mp->m_ddev_targp) > xfs_blkdev_issue_flush(mp->m_ddev_targp); > > +out: > + err2 = filemap_report_wb_err(file); Could we have a comment here to remind anyone reading the code a year from now that filemap_report_wb_err has side effects? Pre-coffee me was wondering why we'd bother calling filemap_report_wb_err in the XFS_FORCED_SHUTDOWN case, then remembered that it touches data structures. The first sentence of the commit message (really, the word 'advance') added as a comment was adequate to remind me of the side effects. Once that's added, Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> --D > + if (!error) > + error = err2; > + > return error; > } > > -- > 2.13.0 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, 2017-06-26 at 08:22 -0700, Darrick J. Wong wrote: > On Fri, Jun 16, 2017 at 03:34:26PM -0400, Jeff Layton wrote: > > Just check and advance the data errseq_t in struct file before > > before returning from fsync on normal files. Internal filemap_* > > callers are left as-is. > > > > Signed-off-by: Jeff Layton <jlayton@redhat.com> > > --- > > fs/xfs/xfs_file.c | 15 +++++++++++---- > > 1 file changed, 11 insertions(+), 4 deletions(-) > > > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > > index 5fb5a0958a14..bc3b1575e8db 100644 > > --- a/fs/xfs/xfs_file.c > > +++ b/fs/xfs/xfs_file.c > > @@ -134,7 +134,7 @@ xfs_file_fsync( > > struct inode *inode = file->f_mapping- > > >host; > > struct xfs_inode *ip = XFS_I(inode); > > struct xfs_mount *mp = ip->i_mount; > > - int error = 0; > > + int error = 0, err2; > > int log_flushed = 0; > > xfs_lsn_t lsn = 0; > > > > @@ -142,10 +142,12 @@ xfs_file_fsync( > > > > error = filemap_write_and_wait_range(inode->i_mapping, > > start, end); > > if (error) > > - return error; > > + goto out; > > > > - if (XFS_FORCED_SHUTDOWN(mp)) > > - return -EIO; > > + if (XFS_FORCED_SHUTDOWN(mp)) { > > + error = -EIO; > > + goto out; > > + } > > > > xfs_iflags_clear(ip, XFS_ITRUNCATED); > > > > @@ -197,6 +199,11 @@ xfs_file_fsync( > > mp->m_logdev_targp == mp->m_ddev_targp) > > xfs_blkdev_issue_flush(mp->m_ddev_targp); > > > > +out: > > + err2 = filemap_report_wb_err(file); > > Could we have a comment here to remind anyone reading the code a year > from now that filemap_report_wb_err has side effects? Pre-coffee me > was > wondering why we'd bother calling filemap_report_wb_err in the > XFS_FORCED_SHUTDOWN case, then remembered that it touches data > structures. > > The first sentence of the commit message (really, the word 'advance') > added as a comment was adequate to remind me of the side effects. > > Once that's added, > Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> > > --D > Yeah, definitely. I'm working on a respin of the series now to incorporate HCH's suggestion too. I'll add that in as well. Maybe I should rename that function to file_check_and_advance_wb_err() ? It would be good to make it clear that it does advance the errseq_t cursor. > > + if (!error) > > + error = err2; > > + > > return error; > > } > > > > -- > > 2.13.0 > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux- > > xfs" in > > the body of a message to majordomo@vger.kernel.org > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- > To unsubscribe from this list: send the line "unsubscribe linux- > btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Jun 26, 2017 at 01:58:32PM -0400, jlayton@redhat.com wrote: > On Mon, 2017-06-26 at 08:22 -0700, Darrick J. Wong wrote: > > On Fri, Jun 16, 2017 at 03:34:26PM -0400, Jeff Layton wrote: > > > Just check and advance the data errseq_t in struct file before > > > before returning from fsync on normal files. Internal filemap_* > > > callers are left as-is. > > > > > > Signed-off-by: Jeff Layton <jlayton@redhat.com> > > > --- > > > fs/xfs/xfs_file.c | 15 +++++++++++---- > > > 1 file changed, 11 insertions(+), 4 deletions(-) > > > > > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > > > index 5fb5a0958a14..bc3b1575e8db 100644 > > > --- a/fs/xfs/xfs_file.c > > > +++ b/fs/xfs/xfs_file.c > > > @@ -134,7 +134,7 @@ xfs_file_fsync( > > > struct inode *inode = file->f_mapping- > > > >host; > > > struct xfs_inode *ip = XFS_I(inode); > > > struct xfs_mount *mp = ip->i_mount; > > > - int error = 0; > > > + int error = 0, err2; > > > int log_flushed = 0; > > > xfs_lsn_t lsn = 0; > > > > > > @@ -142,10 +142,12 @@ xfs_file_fsync( > > > > > > error = filemap_write_and_wait_range(inode->i_mapping, > > > start, end); > > > if (error) > > > - return error; > > > + goto out; > > > > > > - if (XFS_FORCED_SHUTDOWN(mp)) > > > - return -EIO; > > > + if (XFS_FORCED_SHUTDOWN(mp)) { > > > + error = -EIO; > > > + goto out; > > > + } > > > > > > xfs_iflags_clear(ip, XFS_ITRUNCATED); > > > > > > @@ -197,6 +199,11 @@ xfs_file_fsync( > > > mp->m_logdev_targp == mp->m_ddev_targp) > > > xfs_blkdev_issue_flush(mp->m_ddev_targp); > > > > > > +out: > > > + err2 = filemap_report_wb_err(file); > > > > Could we have a comment here to remind anyone reading the code a year > > from now that filemap_report_wb_err has side effects? Pre-coffee me > > was > > wondering why we'd bother calling filemap_report_wb_err in the > > XFS_FORCED_SHUTDOWN case, then remembered that it touches data > > structures. > > > > The first sentence of the commit message (really, the word 'advance') > > added as a comment was adequate to remind me of the side effects. > > > > Once that's added, > > Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> > > > > --D > > > > Yeah, definitely. I'm working on a respin of the series now to > incorporate HCH's suggestion too. I'll add that in as well. > > Maybe I should rename that function to file_check_and_advance_wb_err() > ? It would be good to make it clear that it does advance the errseq_t > cursor. Seems like a good idea. --D > > > > + if (!error) > > > + error = err2; > > > + > > > return error; > > > } > > > > > > -- > > > 2.13.0 > > > > > > -- > > > To unsubscribe from this list: send the line "unsubscribe linux- > > > xfs" in > > > the body of a message to majordomo@vger.kernel.org > > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux- > > btrfs" in > > the body of a message to majordomo@vger.kernel.org > > More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 5fb5a0958a14..bc3b1575e8db 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -134,7 +134,7 @@ xfs_file_fsync( struct inode *inode = file->f_mapping->host; struct xfs_inode *ip = XFS_I(inode); struct xfs_mount *mp = ip->i_mount; - int error = 0; + int error = 0, err2; int log_flushed = 0; xfs_lsn_t lsn = 0; @@ -142,10 +142,12 @@ xfs_file_fsync( error = filemap_write_and_wait_range(inode->i_mapping, start, end); if (error) - return error; + goto out; - if (XFS_FORCED_SHUTDOWN(mp)) - return -EIO; + if (XFS_FORCED_SHUTDOWN(mp)) { + error = -EIO; + goto out; + } xfs_iflags_clear(ip, XFS_ITRUNCATED); @@ -197,6 +199,11 @@ xfs_file_fsync( mp->m_logdev_targp == mp->m_ddev_targp) xfs_blkdev_issue_flush(mp->m_ddev_targp); +out: + err2 = filemap_report_wb_err(file); + if (!error) + error = err2; + return error; }
Just check and advance the data errseq_t in struct file before before returning from fsync on normal files. Internal filemap_* callers are left as-is. Signed-off-by: Jeff Layton <jlayton@redhat.com> --- fs/xfs/xfs_file.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)