Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'bugfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6

* 'bugfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6:
NFSv4: Fix a problem whereby a buggy server can oops the kernel
NFSv4: Fix an NFSv4 mount regression
NFSv4: Fix an Oops in nfs4_free_lock_state

+40 -28
+3 -15
fs/nfs/client.c
··· 1242 1242 return error; 1243 1243 } 1244 1244 1245 - /* 1246 - * Initialize a session. 1247 - * Note: save the mount rsize and wsize for create_server negotiation. 1248 - */ 1249 - static void nfs4_init_session(struct nfs_client *clp, 1250 - unsigned int wsize, unsigned int rsize) 1251 - { 1252 - #if defined(CONFIG_NFS_V4_1) 1253 - if (nfs4_has_session(clp)) { 1254 - clp->cl_session->fc_attrs.max_rqst_sz = wsize; 1255 - clp->cl_session->fc_attrs.max_resp_sz = rsize; 1256 - } 1257 - #endif /* CONFIG_NFS_V4_1 */ 1258 - } 1259 1245 1260 1246 /* 1261 1247 * Session has been established, and the client marked ready. ··· 1336 1350 BUG_ON(!server->nfs_client->rpc_ops); 1337 1351 BUG_ON(!server->nfs_client->rpc_ops->file_inode_ops); 1338 1352 1339 - nfs4_init_session(server->nfs_client, server->wsize, server->rsize); 1353 + error = nfs4_init_session(server); 1354 + if (error < 0) 1355 + goto error; 1340 1356 1341 1357 /* Probe the root fh to retrieve its FSID */ 1342 1358 error = nfs4_path_walk(server, mntfh, data->nfs_server.export_path);
+1 -1
fs/nfs/dir.c
··· 1025 1025 res = NULL; 1026 1026 goto out; 1027 1027 /* This turned out not to be a regular file */ 1028 - case -EISDIR: 1029 1028 case -ENOTDIR: 1030 1029 goto no_open; 1031 1030 case -ELOOP: 1032 1031 if (!(nd->intent.open.flags & O_NOFOLLOW)) 1033 1032 goto no_open; 1033 + /* case -EISDIR: */ 1034 1034 /* case -EINVAL: */ 1035 1035 default: 1036 1036 goto out;
+6
fs/nfs/nfs4_fs.h
··· 220 220 extern struct nfs4_session *nfs4_alloc_session(struct nfs_client *clp); 221 221 extern int nfs4_proc_create_session(struct nfs_client *, int reset); 222 222 extern int nfs4_proc_destroy_session(struct nfs4_session *); 223 + extern int nfs4_init_session(struct nfs_server *server); 223 224 #else /* CONFIG_NFS_v4_1 */ 224 225 static inline int nfs4_setup_sequence(struct nfs_client *clp, 225 226 struct nfs4_sequence_args *args, struct nfs4_sequence_res *res, 226 227 int cache_reply, struct rpc_task *task) 228 + { 229 + return 0; 230 + } 231 + 232 + static inline int nfs4_init_session(struct nfs_server *server) 227 233 { 228 234 return 0; 229 235 }
+29 -11
fs/nfs/nfs4proc.c
··· 2040 2040 .rpc_argp = &args, 2041 2041 .rpc_resp = &res, 2042 2042 }; 2043 - int status; 2044 2043 2045 2044 nfs_fattr_init(info->fattr); 2046 - status = nfs4_recover_expired_lease(server); 2047 - if (!status) 2048 - status = nfs4_check_client_ready(server->nfs_client); 2049 - if (!status) 2050 - status = nfs4_call_sync(server, &msg, &args, &res, 0); 2051 - return status; 2045 + return nfs4_call_sync(server, &msg, &args, &res, 0); 2052 2046 } 2053 2047 2054 2048 static int nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle, ··· 4093 4099 if (request->fl_start < 0 || request->fl_end < 0) 4094 4100 return -EINVAL; 4095 4101 4096 - if (IS_GETLK(cmd)) 4097 - return nfs4_proc_getlk(state, F_GETLK, request); 4102 + if (IS_GETLK(cmd)) { 4103 + if (state != NULL) 4104 + return nfs4_proc_getlk(state, F_GETLK, request); 4105 + return 0; 4106 + } 4098 4107 4099 4108 if (!(IS_SETLK(cmd) || IS_SETLKW(cmd))) 4100 4109 return -EINVAL; 4101 4110 4102 - if (request->fl_type == F_UNLCK) 4103 - return nfs4_proc_unlck(state, cmd, request); 4111 + if (request->fl_type == F_UNLCK) { 4112 + if (state != NULL) 4113 + return nfs4_proc_unlck(state, cmd, request); 4114 + return 0; 4115 + } 4104 4116 4117 + if (state == NULL) 4118 + return -ENOLCK; 4105 4119 do { 4106 4120 status = nfs4_proc_setlk(state, cmd, request); 4107 4121 if ((status != -EAGAIN) || IS_SETLK(cmd)) ··· 4793 4791 4794 4792 dprintk("<-- nfs4_proc_destroy_session\n"); 4795 4793 return status; 4794 + } 4795 + 4796 + int nfs4_init_session(struct nfs_server *server) 4797 + { 4798 + struct nfs_client *clp = server->nfs_client; 4799 + int ret; 4800 + 4801 + if (!nfs4_has_session(clp)) 4802 + return 0; 4803 + 4804 + clp->cl_session->fc_attrs.max_rqst_sz = server->wsize; 4805 + clp->cl_session->fc_attrs.max_resp_sz = server->rsize; 4806 + ret = nfs4_recover_expired_lease(server); 4807 + if (!ret) 4808 + ret = nfs4_check_client_ready(clp); 4809 + return ret; 4796 4810 } 4797 4811 4798 4812 /*
+1 -1
fs/nfs/nfs4state.c
··· 553 553 INIT_LIST_HEAD(&lsp->ls_sequence.list); 554 554 lsp->ls_seqid.sequence = &lsp->ls_sequence; 555 555 atomic_set(&lsp->ls_count, 1); 556 + lsp->ls_state = state; 556 557 lsp->ls_owner = fl_owner; 557 558 spin_lock(&clp->cl_lock); 558 559 nfs_alloc_unique_id(&clp->cl_lockowner_id, &lsp->ls_id, 1, 64); ··· 588 587 if (lsp != NULL) 589 588 break; 590 589 if (new != NULL) { 591 - new->ls_state = state; 592 590 list_add(&new->ls_locks, &state->lock_states); 593 591 set_bit(LK_STATE_IN_USE, &state->flags); 594 592 lsp = new;