diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-06 14:31:38 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-06 14:31:38 -0500 |
| commit | 05c5cb31ec47cacf38db56d9efaa37ca9d473132 (patch) | |
| tree | 03f900679819abd8700d5ea93c22e3a59d3af7ca | |
| parent | 4582a30c2fdca5d2b40f63a20ea082b93230ff2b (diff) | |
| parent | 4ea41e2de5bba756858bb40f964e3490b6d1a25c (diff) | |
Merge branch 'for-2.6.34' of git://linux-nfs.org/~bfields/linux
* 'for-2.6.34' of git://linux-nfs.org/~bfields/linux: (22 commits)
nfsd4: fix minor memory leak
svcrpc: treat uid's as unsigned
nfsd: ensure sockets are closed on error
Revert "sunrpc: move the close processing after do recvfrom method"
Revert "sunrpc: fix peername failed on closed listener"
sunrpc: remove unnecessary svc_xprt_put
NFSD: NFSv4 callback client should use RPC_TASK_SOFTCONN
xfs_export_operations.commit_metadata
commit_metadata export operation replacing nfsd_sync_dir
lockd: don't clear sm_monitored on nsm_reboot_lookup
lockd: release reference to nsm_handle in nlm_host_rebooted
nfsd: Use vfs_fsync_range() in nfsd_commit
NFSD: Create PF_INET6 listener in write_ports
SUNRPC: NFS kernel APIs shouldn't return ENOENT for "transport not found"
SUNRPC: Bury "#ifdef IPV6" in svc_create_xprt()
NFSD: Support AF_INET6 in svc_addsock() function
SUNRPC: Use rpc_pton() in ip_map_parse()
nfsd: 4.1 has an rfc number
nfsd41: Create the recovery entry for the NFSv4.1 client
nfsd: use vfs_fsync for non-directories
...
| -rw-r--r-- | Documentation/filesystems/nfs/nfs41-server.txt | 5 | ||||
| -rw-r--r-- | fs/lockd/host.c | 2 | ||||
| -rw-r--r-- | fs/lockd/mon.c | 12 | ||||
| -rw-r--r-- | fs/lockd/svc.c | 2 | ||||
| -rw-r--r-- | fs/nfs/callback.c | 2 | ||||
| -rw-r--r-- | fs/nfsd/nfs4callback.c | 5 | ||||
| -rw-r--r-- | fs/nfsd/nfs4recover.c | 4 | ||||
| -rw-r--r-- | fs/nfsd/nfs4state.c | 4 | ||||
| -rw-r--r-- | fs/nfsd/nfs4xdr.c | 2 | ||||
| -rw-r--r-- | fs/nfsd/nfsctl.c | 24 | ||||
| -rw-r--r-- | fs/nfsd/vfs.c | 153 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_export.c | 20 | ||||
| -rw-r--r-- | include/linux/exportfs.h | 5 | ||||
| -rw-r--r-- | net/sunrpc/svc_xprt.c | 27 | ||||
| -rw-r--r-- | net/sunrpc/svcauth_unix.c | 49 | ||||
| -rw-r--r-- | net/sunrpc/svcsock.c | 3 |
16 files changed, 174 insertions, 145 deletions
diff --git a/Documentation/filesystems/nfs/nfs41-server.txt b/Documentation/filesystems/nfs/nfs41-server.txt index 1bd0d0c05171..6a53a84afc72 100644 --- a/Documentation/filesystems/nfs/nfs41-server.txt +++ b/Documentation/filesystems/nfs/nfs41-server.txt | |||
| @@ -17,8 +17,7 @@ kernels must turn 4.1 on or off *before* turning support for version 4 | |||
| 17 | on or off; rpc.nfsd does this correctly.) | 17 | on or off; rpc.nfsd does this correctly.) |
| 18 | 18 | ||
| 19 | The NFSv4 minorversion 1 (NFSv4.1) implementation in nfsd is based | 19 | The NFSv4 minorversion 1 (NFSv4.1) implementation in nfsd is based |
| 20 | on the latest NFSv4.1 Internet Draft: | 20 | on RFC 5661. |
| 21 | http://tools.ietf.org/html/draft-ietf-nfsv4-minorversion1-29 | ||
| 22 | 21 | ||
| 23 | From the many new features in NFSv4.1 the current implementation | 22 | From the many new features in NFSv4.1 the current implementation |
| 24 | focuses on the mandatory-to-implement NFSv4.1 Sessions, providing | 23 | focuses on the mandatory-to-implement NFSv4.1 Sessions, providing |
| @@ -44,7 +43,7 @@ interoperability problems with future clients. Known issues: | |||
| 44 | trunking, but this is a mandatory feature, and its use is | 43 | trunking, but this is a mandatory feature, and its use is |
| 45 | recommended to clients in a number of places. (E.g. to ensure | 44 | recommended to clients in a number of places. (E.g. to ensure |
| 46 | timely renewal in case an existing connection's retry timeouts | 45 | timely renewal in case an existing connection's retry timeouts |
| 47 | have gotten too long; see section 8.3 of the draft.) | 46 | have gotten too long; see section 8.3 of the RFC.) |
| 48 | Therefore, lack of this feature may cause future clients to | 47 | Therefore, lack of this feature may cause future clients to |
| 49 | fail. | 48 | fail. |
| 50 | - Incomplete backchannel support: incomplete backchannel gss | 49 | - Incomplete backchannel support: incomplete backchannel gss |
diff --git a/fs/lockd/host.c b/fs/lockd/host.c index 4600c2037b8b..bb464d12104c 100644 --- a/fs/lockd/host.c +++ b/fs/lockd/host.c | |||
| @@ -479,8 +479,8 @@ again: mutex_lock(&nlm_host_mutex); | |||
| 479 | } | 479 | } |
| 480 | } | 480 | } |
| 481 | } | 481 | } |
| 482 | |||
| 483 | mutex_unlock(&nlm_host_mutex); | 482 | mutex_unlock(&nlm_host_mutex); |
| 483 | nsm_release(nsm); | ||
| 484 | } | 484 | } |
| 485 | 485 | ||
| 486 | /* | 486 | /* |
diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c index f956651d0f65..fefa4df3f005 100644 --- a/fs/lockd/mon.c +++ b/fs/lockd/mon.c | |||
| @@ -349,9 +349,9 @@ retry: | |||
| 349 | * nsm_reboot_lookup - match NLMPROC_SM_NOTIFY arguments to an nsm_handle | 349 | * nsm_reboot_lookup - match NLMPROC_SM_NOTIFY arguments to an nsm_handle |
| 350 | * @info: pointer to NLMPROC_SM_NOTIFY arguments | 350 | * @info: pointer to NLMPROC_SM_NOTIFY arguments |
| 351 | * | 351 | * |
| 352 | * Returns a matching nsm_handle if found in the nsm cache; the returned | 352 | * Returns a matching nsm_handle if found in the nsm cache. The returned |
| 353 | * nsm_handle's reference count is bumped and sm_monitored is cleared. | 353 | * nsm_handle's reference count is bumped. Otherwise returns NULL if some |
| 354 | * Otherwise returns NULL if some error occurred. | 354 | * error occurred. |
| 355 | */ | 355 | */ |
| 356 | struct nsm_handle *nsm_reboot_lookup(const struct nlm_reboot *info) | 356 | struct nsm_handle *nsm_reboot_lookup(const struct nlm_reboot *info) |
| 357 | { | 357 | { |
| @@ -370,12 +370,6 @@ struct nsm_handle *nsm_reboot_lookup(const struct nlm_reboot *info) | |||
| 370 | atomic_inc(&cached->sm_count); | 370 | atomic_inc(&cached->sm_count); |
| 371 | spin_unlock(&nsm_lock); | 371 | spin_unlock(&nsm_lock); |
| 372 | 372 | ||
| 373 | /* | ||
| 374 | * During subsequent lock activity, force a fresh | ||
| 375 | * notification to be set up for this host. | ||
| 376 | */ | ||
| 377 | cached->sm_monitored = 0; | ||
| 378 | |||
| 379 | dprintk("lockd: host %s (%s) rebooted, cnt %d\n", | 373 | dprintk("lockd: host %s (%s) rebooted, cnt %d\n", |
| 380 | cached->sm_name, cached->sm_addrbuf, | 374 | cached->sm_name, cached->sm_addrbuf, |
| 381 | atomic_read(&cached->sm_count)); | 375 | atomic_read(&cached->sm_count)); |
diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c index e50cfa3d9654..7d150517ddf0 100644 --- a/fs/lockd/svc.c +++ b/fs/lockd/svc.c | |||
| @@ -243,11 +243,9 @@ static int make_socks(struct svc_serv *serv) | |||
| 243 | if (err < 0) | 243 | if (err < 0) |
| 244 | goto out_err; | 244 | goto out_err; |
| 245 | 245 | ||
| 246 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||
| 247 | err = create_lockd_family(serv, PF_INET6); | 246 | err = create_lockd_family(serv, PF_INET6); |
| 248 | if (err < 0 && err != -EAFNOSUPPORT) | 247 | if (err < 0 && err != -EAFNOSUPPORT) |
| 249 | goto out_err; | 248 | goto out_err; |
| 250 | #endif /* CONFIG_IPV6 || CONFIG_IPV6_MODULE */ | ||
| 251 | 249 | ||
| 252 | warned = 0; | 250 | warned = 0; |
| 253 | return 0; | 251 | return 0; |
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c index 73ab220354df..36dfdae95123 100644 --- a/fs/nfs/callback.c +++ b/fs/nfs/callback.c | |||
| @@ -118,7 +118,6 @@ nfs4_callback_up(struct svc_serv *serv) | |||
| 118 | dprintk("NFS: Callback listener port = %u (af %u)\n", | 118 | dprintk("NFS: Callback listener port = %u (af %u)\n", |
| 119 | nfs_callback_tcpport, PF_INET); | 119 | nfs_callback_tcpport, PF_INET); |
| 120 | 120 | ||
| 121 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||
| 122 | ret = svc_create_xprt(serv, "tcp", PF_INET6, | 121 | ret = svc_create_xprt(serv, "tcp", PF_INET6, |
| 123 | nfs_callback_set_tcpport, SVC_SOCK_ANONYMOUS); | 122 | nfs_callback_set_tcpport, SVC_SOCK_ANONYMOUS); |
| 124 | if (ret > 0) { | 123 | if (ret > 0) { |
| @@ -129,7 +128,6 @@ nfs4_callback_up(struct svc_serv *serv) | |||
| 129 | ret = 0; | 128 | ret = 0; |
| 130 | else | 129 | else |
| 131 | goto out_err; | 130 | goto out_err; |
| 132 | #endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */ | ||
| 133 | 131 | ||
| 134 | return svc_prepare_thread(serv, &serv->sv_pools[0]); | 132 | return svc_prepare_thread(serv, &serv->sv_pools[0]); |
| 135 | 133 | ||
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index c6eed2a3b093..4bc22c763de7 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c | |||
| @@ -525,6 +525,8 @@ static struct rpc_cred *callback_cred; | |||
| 525 | 525 | ||
| 526 | int set_callback_cred(void) | 526 | int set_callback_cred(void) |
| 527 | { | 527 | { |
| 528 | if (callback_cred) | ||
| 529 | return 0; | ||
| 528 | callback_cred = rpc_lookup_machine_cred(); | 530 | callback_cred = rpc_lookup_machine_cred(); |
| 529 | if (!callback_cred) | 531 | if (!callback_cred) |
| 530 | return -ENOMEM; | 532 | return -ENOMEM; |
| @@ -542,7 +544,8 @@ void do_probe_callback(struct nfs4_client *clp) | |||
| 542 | }; | 544 | }; |
| 543 | int status; | 545 | int status; |
| 544 | 546 | ||
| 545 | status = rpc_call_async(cb->cb_client, &msg, RPC_TASK_SOFT, | 547 | status = rpc_call_async(cb->cb_client, &msg, |
| 548 | RPC_TASK_SOFT | RPC_TASK_SOFTCONN, | ||
| 546 | &nfsd4_cb_probe_ops, (void *)clp); | 549 | &nfsd4_cb_probe_ops, (void *)clp); |
| 547 | if (status) { | 550 | if (status) { |
| 548 | warn_no_callback_path(clp, status); | 551 | warn_no_callback_path(clp, status); |
diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c index 5a754f7b71ed..98fb98e330b4 100644 --- a/fs/nfsd/nfs4recover.c +++ b/fs/nfsd/nfs4recover.c | |||
| @@ -119,9 +119,7 @@ out_no_tfm: | |||
| 119 | static void | 119 | static void |
| 120 | nfsd4_sync_rec_dir(void) | 120 | nfsd4_sync_rec_dir(void) |
| 121 | { | 121 | { |
| 122 | mutex_lock(&rec_dir.dentry->d_inode->i_mutex); | 122 | vfs_fsync(NULL, rec_dir.dentry, 0); |
| 123 | nfsd_sync_dir(rec_dir.dentry); | ||
| 124 | mutex_unlock(&rec_dir.dentry->d_inode->i_mutex); | ||
| 125 | } | 123 | } |
| 126 | 124 | ||
| 127 | int | 125 | int |
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index fcafe6087f69..c97fddbd17db 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
| @@ -2482,8 +2482,10 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf | |||
| 2482 | } | 2482 | } |
| 2483 | memcpy(&open->op_stateid, &stp->st_stateid, sizeof(stateid_t)); | 2483 | memcpy(&open->op_stateid, &stp->st_stateid, sizeof(stateid_t)); |
| 2484 | 2484 | ||
| 2485 | if (nfsd4_has_session(&resp->cstate)) | 2485 | if (nfsd4_has_session(&resp->cstate)) { |
| 2486 | open->op_stateowner->so_confirmed = 1; | 2486 | open->op_stateowner->so_confirmed = 1; |
| 2487 | nfsd4_create_clid_dir(open->op_stateowner->so_client); | ||
