Please submit this patch to Gerrithub (see src/ CONTRIBUTING_HOWTO.txt).

Thanks

Frank

> -----Original Message-----
> From: Kropelin, Adam [mailto:krope...@amazon.com]
> Sent: Tuesday, January 10, 2017 11:39 AM
> To: nfs-ganesha-devel@lists.sourceforge.net
> Subject: [Nfs-ganesha-devel] [PATCH] Fix NLM SHARE count management
> 
> While testing nfs-ganesha with Windows clients using NLM I ran into an
issue
> related to the NLM SHARE call, which Windows utilizes on mounts made with
> locking enabled (the default; "-o nolock" works around the issues).
> 
> ganesha is granting an exclusive write NLM SHARE call but then denying a
> subsequent WRITE (by the share owner). Someone else reported this on the
> list, but the threaded ended without resolution:
>     https://sourceforge.net/p/nfs-ganesha/mailman/message/35006656
> 
> I tracked this particular issue down to ganesha incrementing the v4 share
> count for shares that result from an NLM SHARE call. Since NLM SHARE is
> inherently an NFSv3(,2,1) operation, the v4 count should not be
incremented
> on this code path (state_nlm_share). Note that this is specifically an NLM
> path (i.e., NFSv3 and below); NFSv4-related share operations are performed
> via state_share_{add,remove,upgrade,downgrade} which do correctly
> update the v4 count.
> 
> The patch below addresses this issue. Issue was found, fixed, and verified
on
> V2.2; patch below is against -next.
> 
> With this change in place I am able to successfully access a ganesha
server
> from Windows clients without using the "nolock" mount option.
> 
> --Adam
> 
> When recording an NLM SHARE state for a file, do not set the
> NFSv4 flag as this will erroneously cause denial of future NFSv3 writes to
that
> file. NLM SHARE is inherently an NFSv3 operation and as such should not
use
> an NFSv4 flag. This fixes the ability of Windows clients to write to files
when
> the "-o nolock" flag is not in use.
> ---
>  src/SAL/state_share.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/src/SAL/state_share.c b/src/SAL/state_share.c index
> 4f46cef..c11c61c 100644
> --- a/src/SAL/state_share.c
> +++ b/src/SAL/state_share.c
> @@ -992,7 +992,7 @@ state_status_t state_nlm_share(struct
> fsal_obj_handle *obj,
>                                    old_share_deny,
>                                    share_access,
>                                    share_deny,
> -                                  true);
> +                                  false);
> 
>         /* Get the updated union of share states of this file. */
>         new_entry_share_access = state_share_get_share_access(obj-
> >state_hdl);
> @@ -1017,7 +1017,7 @@ state_status_t state_nlm_share(struct
> fsal_obj_handle *obj,
>                                                    share_deny,
>                                                    old_share_access,
>                                                    old_share_deny,
> -                                                  true);
> +                                                  false);
> 
>                         remove_nlm_share(state);
> 
> @@ -1100,7 +1100,7 @@ state_status_t state_nlm_unshare(struct
> fsal_obj_handle *obj,
>                                    old_share_deny,
>                                    new_share_access,
>                                    new_share_deny,
> -                                  true);
> +                                  false);
> 
>         /* Get the updated union of share states of this file. */
>         new_entry_share_access = state_share_get_share_access(obj-
> >state_hdl);
> @@ -1127,7 +1127,7 @@ state_status_t state_nlm_unshare(struct
> fsal_obj_handle *obj,
>                                                    new_share_deny,
>                                                    old_share_access,
>                                                    old_share_deny,
> -                                                  true);
> +                                                  false);
> 
>                         LogDebug(COMPONENT_STATE, "do_share_op failed");
>                         goto out;
> 
> 
>
----------------------------------------------------------------------------
--
> Developer Access Program for Intel Xeon Phi Processors Access to Intel
Xeon
> Phi processor-based developer platforms.
> With one year of Intel Parallel Studio XE.
> Training and support from Colfax.
> Order your platform today. http://sdm.link/xeonphi
> _______________________________________________
> 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


------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
_______________________________________________
Nfs-ganesha-devel mailing list
Nfs-ganesha-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel

Reply via email to