> Thanks Frank. I will try it out. Any concerns on holding the lock across 
> system
> calls (though this is read lock)?

No there shouldn't be too much concern. Other places use trylock and if that 
fails, they use a temporary fd to avoid blocking. I had initial concerns (look 
through the comments in the gerrithub submission), but I think this patch is 
the best path.

Frank

> On 1/10/18, Frank Filz <ffilz...@mindspring.com> wrote:
> > We have a patch under review for FSAL_GPFS for that issue, awaiting
> > the submitter to extend the patch to cover other FSALs also. If you
> > want to verify the fix would work for your case, it should be easy to
> > take the fix and do the same thing in FSAL_VFS.
> >
> > https://review.gerrithub.io/#/c/390141/
> >
> > As soon as this patch is merged into V2.6, it will be slated for
> > backport to V2.5-stable.
> >
> > Frank
> >
> >> -----Original Message-----
> >> From: Pradeep [mailto:pradeep.tho...@gmail.com]
> >> Sent: Wednesday, January 10, 2018 8:06 PM
> >> To: nfs-ganesha-devel <nfs-ganesha-devel@lists.sourceforge.net>
> >> Subject: [Nfs-ganesha-devel] Race between fsal_find_fd() and 'open
> >> downgrade'
> >>
> >> Hello,
> >>
> >> I'm seeing a write failure because another thread in ganesha doing
> >> 'open downgrade' closed the FD the find_fd() returned. Any suggestion
> >> on how to fix the race?
> >>
> >> vfs_reopen2()
> >> {...
> >>         status = vfs_open_my_fd(myself, openflags, posix_flags,
> >> my_fd);
> >>
> >>         if (!FSAL_IS_ERROR(status)) {
> >>                 /* Close the existing file descriptor and copy the new
> >>                  * one over.
> >>                  */
> >>                 vfs_close_my_fd(my_share_fd);
> >>                 *my_share_fd = fd;
> >>
> >> vfs_write2()
> >> {
> >> ..
> >>         status = find_fd(&my_fd, obj_hdl, bypass, state, openflags,
> >>                          &has_lock, &closefd, false);
> >>
> >>         if (FSAL_IS_ERROR(status)) {
> >>                 LogDebug(COMPONENT_FSAL,
> >>                          "find_fd failed %s",
> >> msg_fsal_err(status.major));
> >>                 goto out;
> >>         }
> >>
> >>         fsal_set_credentials(op_ctx->creds);
> >>
> >>         nb_written = pwrite(my_fd, buffer, buffer_size, offset);
> >>
> >>
> > ----------------------------------------------------------------------
> > ------
> > --
> >> Check out the vibrant tech community on one of the world's most
> >> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> >> _______________________________________________
> >> Nfs-ganesha-devel mailing list
> >> Nfs-ganesha-devel@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel
> >
> >
> > ---
> > This email has been checked for viruses by Avast antivirus software.
> > https://www.avast.com/antivirus
> >
> >


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Nfs-ganesha-devel mailing list
Nfs-ganesha-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel

Reply via email to