Thanks!

On 2020-05-24, Paul Ripke wrote:
> On Sun, May 24, 2020 at 06:56:54AM -0400, Greg Troxel wrote:
> > Yorick Hardy <[email protected]> writes:
> > 
> > (I realize you later say this isn't it.)
> > 
> > >> @@ -4141,10 +4140,6 @@ sys_fdatasync(struct lwp *l, const struct 
> > >> sys_fdatasync_args *uap, register_t *r
> > >>          /* fd_getvnode() will use the descriptor for us */
> > >>          if ((error = fd_getvnode(SCARG(uap, fd), &fp)) != 0)
> > >>                  return (error);
> > >> -        if ((fp->f_flag & FWRITE) == 0) {
> > >> -                fd_putfile(SCARG(uap, fd));
> > >> -                return (EBADF);
> > >> -        }
> > >>          vp = fp->f_vnode;
> > >>          vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
> > >>          error = VOP_FSYNC(vp, fp->f_cred, FSYNC_WAIT|FSYNC_DATAONLY, 0, 
> > >> 0);
> > 
> > If you look at the function beyond what's in the diff, you will see (I
> > think, but I really mean I see) that there is always a single
> > fd_putfile.  This was just doing the put before returning, rather than
> > setting error and the usaul "goto out" where the end-of-routine cleanup
> > happens.  See also sys_fsync_range() in the same file.
> > 
> > I could be reading this wrong.
> 
> I concur - this was just the fd_putfile to match the fd_getfile in
> the early error path for read-only files. The code now falls through
> and calls fd_putfile regardless, to remove the fd reference.
> 
> There should be no real behaviour change here apart from a relaxing
> of the success conditions.
> 
> -- 
> Paul Ripke
> "Great minds discuss ideas, average minds discuss events, small minds
>  discuss people."
> -- Disputed: Often attributed to Eleanor Roosevelt. 1948.

-- 
Kind regards,

Yorick Hardy

Reply via email to