nfs4proc.c (f15e1e8bc6427e4a0d38290937ccbfec1d1a2c44) | nfs4proc.c (b68572e07c58324cb8c274f1d84a20cad479c2d3) |
---|---|
1/* 2 * fs/nfs/nfs4proc.c 3 * 4 * Client-side procedure declarations for NFSv4. 5 * 6 * Copyright (c) 2002 The Regents of the University of Michigan. 7 * All rights reserved. 8 * --- 1758 unchanged lines hidden (view full) --- 1767 rcu_read_unlock(); 1768 break; 1769 } 1770 /* Save the delegation */ 1771 nfs4_stateid_copy(&stateid, &delegation->stateid); 1772 rcu_read_unlock(); 1773 nfs_release_seqid(opendata->o_arg.seqid); 1774 if (!opendata->is_recover) { | 1/* 2 * fs/nfs/nfs4proc.c 3 * 4 * Client-side procedure declarations for NFSv4. 5 * 6 * Copyright (c) 2002 The Regents of the University of Michigan. 7 * All rights reserved. 8 * --- 1758 unchanged lines hidden (view full) --- 1767 rcu_read_unlock(); 1768 break; 1769 } 1770 /* Save the delegation */ 1771 nfs4_stateid_copy(&stateid, &delegation->stateid); 1772 rcu_read_unlock(); 1773 nfs_release_seqid(opendata->o_arg.seqid); 1774 if (!opendata->is_recover) { |
1775 ret = nfs_may_open(state->inode, state->owner->so_cred, open_mode); | 1775 ret = nfs_may_open(state->inode, state->owner->so_cred->cr_cred, open_mode); |
1776 if (ret != 0) 1777 goto out; 1778 } 1779 ret = -EAGAIN; 1780 1781 /* Try to update the stateid using the delegation */ 1782 if (update_open_stateid(state, NULL, &stateid, fmode)) 1783 goto out_return_state; --- 722 unchanged lines hidden (view full) --- 2506 /* ONLY check for exec rights */ 2507 if (S_ISDIR(state->inode->i_mode)) 2508 mask = NFS4_ACCESS_LOOKUP; 2509 else 2510 mask = NFS4_ACCESS_EXECUTE; 2511 } else if ((fmode & FMODE_READ) && !opendata->file_created) 2512 mask = NFS4_ACCESS_READ; 2513 | 1776 if (ret != 0) 1777 goto out; 1778 } 1779 ret = -EAGAIN; 1780 1781 /* Try to update the stateid using the delegation */ 1782 if (update_open_stateid(state, NULL, &stateid, fmode)) 1783 goto out_return_state; --- 722 unchanged lines hidden (view full) --- 2506 /* ONLY check for exec rights */ 2507 if (S_ISDIR(state->inode->i_mode)) 2508 mask = NFS4_ACCESS_LOOKUP; 2509 else 2510 mask = NFS4_ACCESS_EXECUTE; 2511 } else if ((fmode & FMODE_READ) && !opendata->file_created) 2512 mask = NFS4_ACCESS_READ; 2513 |
2514 cache.cred = cred; | 2514 cache.cred = cred->cr_cred; |
2515 nfs_access_set_mask(&cache, opendata->o_res.access_result); 2516 nfs_access_add_cache(state->inode, &cache); 2517 2518 flags = NFS4_ACCESS_READ | NFS4_ACCESS_EXECUTE | NFS4_ACCESS_LOOKUP; 2519 if ((mask & ~cache.mask & flags) == 0) 2520 return 0; 2521 2522 return -EACCES; --- 1660 unchanged lines hidden (view full) --- 4183 struct nfs_server *server = NFS_SERVER(inode); 4184 struct nfs4_accessargs args = { 4185 .fh = NFS_FH(inode), 4186 .access = entry->mask, 4187 }; 4188 struct nfs4_accessres res = { 4189 .server = server, 4190 }; | 2515 nfs_access_set_mask(&cache, opendata->o_res.access_result); 2516 nfs_access_add_cache(state->inode, &cache); 2517 2518 flags = NFS4_ACCESS_READ | NFS4_ACCESS_EXECUTE | NFS4_ACCESS_LOOKUP; 2519 if ((mask & ~cache.mask & flags) == 0) 2520 return 0; 2521 2522 return -EACCES; --- 1660 unchanged lines hidden (view full) --- 4183 struct nfs_server *server = NFS_SERVER(inode); 4184 struct nfs4_accessargs args = { 4185 .fh = NFS_FH(inode), 4186 .access = entry->mask, 4187 }; 4188 struct nfs4_accessres res = { 4189 .server = server, 4190 }; |
4191 struct auth_cred acred = { 4192 .cred = entry->cred, 4193 }; |
|
4191 struct rpc_message msg = { 4192 .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_ACCESS], 4193 .rpc_argp = &args, 4194 .rpc_resp = &res, | 4194 struct rpc_message msg = { 4195 .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_ACCESS], 4196 .rpc_argp = &args, 4197 .rpc_resp = &res, |
4195 .rpc_cred = entry->cred, | 4198 .rpc_cred = rpc_lookup_generic_cred(&acred, 0, GFP_NOFS), |
4196 }; 4197 int status = 0; 4198 | 4199 }; 4200 int status = 0; 4201 |
4202 if (!msg.rpc_cred) 4203 return -ENOMEM; |
|
4199 if (!nfs4_have_delegation(inode, FMODE_READ)) { 4200 res.fattr = nfs_alloc_fattr(); | 4204 if (!nfs4_have_delegation(inode, FMODE_READ)) { 4205 res.fattr = nfs_alloc_fattr(); |
4201 if (res.fattr == NULL) | 4206 if (res.fattr == NULL) { 4207 put_rpccred(msg.rpc_cred); |
4202 return -ENOMEM; | 4208 return -ENOMEM; |
4209 } |
|
4203 args.bitmask = server->cache_consistency_bitmask; 4204 } 4205 4206 status = nfs4_call_sync(server->client, server, &msg, &args.seq_args, &res.seq_res, 0); 4207 if (!status) { 4208 nfs_access_set_mask(entry, res.access); 4209 if (res.fattr) 4210 nfs_refresh_inode(inode, res.fattr); 4211 } 4212 nfs_free_fattr(res.fattr); | 4210 args.bitmask = server->cache_consistency_bitmask; 4211 } 4212 4213 status = nfs4_call_sync(server->client, server, &msg, &args.seq_args, &res.seq_res, 0); 4214 if (!status) { 4215 nfs_access_set_mask(entry, res.access); 4216 if (res.fattr) 4217 nfs_refresh_inode(inode, res.fattr); 4218 } 4219 nfs_free_fattr(res.fattr); |
4220 put_rpccred(msg.rpc_cred); |
|
4213 return status; 4214} 4215 4216static int nfs4_proc_access(struct inode *inode, struct nfs_access_entry *entry) 4217{ 4218 struct nfs4_exception exception = { }; 4219 int err; 4220 do { --- 5620 unchanged lines hidden --- | 4221 return status; 4222} 4223 4224static int nfs4_proc_access(struct inode *inode, struct nfs_access_entry *entry) 4225{ 4226 struct nfs4_exception exception = { }; 4227 int err; 4228 do { --- 5620 unchanged lines hidden --- |