Skip to content

Commit

Permalink
nfsd: change heuristic for selecting the client_tracking_ops
Browse files Browse the repository at this point in the history
First, try to use the new usermodehelper upcall. It should succeed or
fail quickly, so there's little cost to doing so.

If it fails, and the legacy tracking dir exists, use that. If it
doesn't exist then fall back to using nfsdcld.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
  • Loading branch information
Jeff Layton authored and J. Bruce Fields committed Nov 12, 2012
1 parent 2873d21 commit 2d77bf0
Showing 1 changed file with 27 additions and 9 deletions.
36 changes: 27 additions & 9 deletions fs/nfsd/nfs4recover.c
Original file line number Diff line number Diff line change
Expand Up @@ -1064,17 +1064,35 @@ nfsd4_client_tracking_init(struct net *net)
int status;
struct path path;

if (!client_tracking_ops) {
client_tracking_ops = &nfsd4_cld_tracking_ops;
status = kern_path(nfs4_recoverydir(), LOOKUP_FOLLOW, &path);
if (!status) {
if (S_ISDIR(path.dentry->d_inode->i_mode))
client_tracking_ops =
&nfsd4_legacy_tracking_ops;
path_put(&path);
}
/* just run the init if it the method is already decided */
if (client_tracking_ops)
goto do_init;

/*
* First, try a UMH upcall. It should succeed or fail quickly, so
* there's little harm in trying that first.
*/
client_tracking_ops = &nfsd4_umh_tracking_ops;
status = client_tracking_ops->init(net);
if (!status)
return status;

/*
* See if the recoverydir exists and is a directory. If it is,
* then use the legacy ops.
*/
client_tracking_ops = &nfsd4_legacy_tracking_ops;
status = kern_path(nfs4_recoverydir(), LOOKUP_FOLLOW, &path);
if (!status) {
status = S_ISDIR(path.dentry->d_inode->i_mode);
path_put(&path);
if (status)
goto do_init;
}

/* Finally, try to use nfsdcld */
client_tracking_ops = &nfsd4_cld_tracking_ops;
do_init:
status = client_tracking_ops->init(net);
if (status) {
printk(KERN_WARNING "NFSD: Unable to initialize client "
Expand Down

0 comments on commit 2d77bf0

Please sign in to comment.