Re: [PATCH 4/5] NFS: Send attributes in OPEN request for NFS4_CREATE_EXCLUSIVE4_1

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

 



On 7/28/2015 20:47, Trond Myklebust wrote:
> Hi Kinglong,
> 
> On Tue, Jul 28, 2015 at 7:13 AM, Kinglong Mee <kinglongmee@xxxxxxxxx> wrote:
>> Client sends a SETATTR request after OPEN for updating attributes.
>> For create file with S_ISGID is set, the SETATTR will be not set S_ISGID
>> as chmod of no PERMISSION.
>>
>> Signed-off-by: Kinglong Mee <kinglongmee@xxxxxxxxx>
>> ---
>>  fs/nfs/nfs4proc.c | 2 +-
>>  fs/nfs/nfs4xdr.c  | 4 +---
>>  2 files changed, 2 insertions(+), 4 deletions(-)
>>
>> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
>> index 8bee934..801f5f4 100644
>> --- a/fs/nfs/nfs4proc.c
>> +++ b/fs/nfs/nfs4proc.c
>> @@ -2413,7 +2413,7 @@ static int _nfs4_do_open(struct inode *dir,
>>         state = ctx->state;
>>
>>         if ((opendata->o_arg.open_flags & O_EXCL) &&
>> -           (opendata->o_arg.createmode != NFS4_CREATE_GUARDED)) {
>> +           (opendata->o_arg.createmode == NFS4_CREATE_EXCLUSIVE)) {
>>                 nfs4_exclusive_attrset(opendata, sattr);
>>
>>                 nfs_fattr_init(opendata->o_res.f_attr);
>> diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
>> index 558cd65d..b5147bc 100644
>> --- a/fs/nfs/nfs4xdr.c
>> +++ b/fs/nfs/nfs4xdr.c
>> @@ -1382,7 +1382,6 @@ static inline void encode_openhdr(struct xdr_stream *xdr, const struct nfs_opena
>>
>>  static inline void encode_createmode(struct xdr_stream *xdr, const struct nfs_openargs *arg)
>>  {
>> -       struct iattr dummy;
>>         __be32 *p;
>>
>>         p = reserve_space(xdr, 4);
>> @@ -1402,8 +1401,7 @@ static inline void encode_createmode(struct xdr_stream *xdr, const struct nfs_op
>>         case NFS4_CREATE_EXCLUSIVE4_1:
>>                 *p = cpu_to_be32(NFS4_CREATE_EXCLUSIVE4_1);
>>                 encode_nfs4_verifier(xdr, &arg->u.verifier);
>> -               dummy.ia_valid = 0;
>> -               encode_attrs(xdr, &dummy, arg->label, arg->server);
>> +               encode_attrs(xdr, arg->u.attrs, arg->label, arg->server);
>>         }
>>  }
>>
> 
> The problem here is that NFSv4.1 requires that the client use the
> "suppattr_exclcreat" attribute (see
> https://tools.ietf.org/html/rfc5661#section-5.8.1.14 and
> https://tools.ietf.org/html/rfc5661#section-18.16.3) in order to
> figure out which attributes it is permitted to send. If it sends
> anything which is not on the approved list, the server is supposed to
> fail the create attempt with NFS4ERR_INVAL...

Sorry for my missing it.
I will try to implement it later.

thanks,
Kinglong Mee
--
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