Re: [PATCH] nfsd41: make sure nfs server process OPEN with EXCLUSIVE4_1 correcttly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 08, 2011 at 05:57:25PM +0800, Mi Jinlong wrote:
> 
> 
> J. Bruce Fields :
> > On Wed, Apr 06, 2011 at 05:04:50PM +0800, Mi Jinlong wrote:
> >> At the recent kernel(2.6.39-rc1),
> > 
> > (But this is not a regression, right?  This has been a problem all
> > along.)
> 
>   Yes, I think it's just a problem.
> 
> > 
> >> NFS server can't process OPEN with EXCLUSIVE4_1,
> >> because NFS server call nfsd_create_v3 to create file instead implement a separate
> >> one. But nfsd_create_v3 can't process createmode is EXCLUSIVE4_1.
> > 
> > Is our handling of the attributes correct in this case?  (See e.g. the
> > op_bmval[1] assignment a few lines down.)
> 
>   There is no problem of the p_bmval[1] assignment a few lines down.
>   According to rfc5661 18.16.3, EXCLUSIVE4_1 supports the setting of
>   attributes at file creation, we don't need to set p_bmval[1] assignment
>   as EXCLUSIVE.
> 
>   I think we should have a fix at nfsd_create_v3(), not at do_open_lookup().
>   Please ignore the old patch, a new one is as following.
> 
> --
> thanks,
> Mi Jinlong
> 
> =============================================================================
> >From 7adf0213b525c02761022c7fee60f52012d32a9a Mon Sep 17 00:00:00 2001
> From: Mi Jinlong <mijinlong@xxxxxxxxxxxxxx>
> Date: Mon, 4 Apr 2011 00:49:19 +0800
> Subject: [PATCH] nfsd41: make sure nfs server process OPEN with EXCLUSIVE4_1 correcttly
> 
> NFS server can't process OPEN with EXCLUSIVE4_1, because NFS server call 
> nfsd_create_v3 to create file instead implement a separate one. 
> But nfsd_create_v3 can't process createmode is EXCLUSIVE4_1.
> 
> This patch rename nfsd_create_v3() to do_nfsd_create(),

Good idea.

> -	if (createmode == NFS3_CREATE_EXCLUSIVE) {
> +	if (createmode & NFS3_CREATE_EXCLUSIVE) {

Using & NFS3_CREATE_EXCLUSIVE is a little too clever; I'd rather just
write out (createmode == NFS3_CREATE_EXCLUSIVE) || (createmode ==
NFS4_CREATE_EXCLUSIVE4_1).  If that's too cumbersome, define a static
inline helper nfsd_create_is_exclusive(createmode) in a header
somewhere.

> +#ifdef CONFIG_NFSD_V4
> +		case NFS4_CREATE_EXCLUSIVE4_1:
> +#endif

And I'd rather avoid these ifdef's in the main part of the code.  Could
we move the definition of NFS4_CREATE_EXCLUSIVE4_1 someplace common
instead?

--b.
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux