diff options
Diffstat (limited to 'fs/nfsd/nfs4callback.c')
-rw-r--r-- | fs/nfsd/nfs4callback.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 0e262f32ac41..c8e9f637153a 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c | |||
@@ -645,7 +645,6 @@ static int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *c | |||
645 | .timeout = &timeparms, | 645 | .timeout = &timeparms, |
646 | .program = &cb_program, | 646 | .program = &cb_program, |
647 | .version = 0, | 647 | .version = 0, |
648 | .authflavor = clp->cl_flavor, | ||
649 | .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET), | 648 | .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET), |
650 | }; | 649 | }; |
651 | struct rpc_clnt *client; | 650 | struct rpc_clnt *client; |
@@ -656,6 +655,7 @@ static int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *c | |||
656 | args.client_name = clp->cl_principal; | 655 | args.client_name = clp->cl_principal; |
657 | args.prognumber = conn->cb_prog, | 656 | args.prognumber = conn->cb_prog, |
658 | args.protocol = XPRT_TRANSPORT_TCP; | 657 | args.protocol = XPRT_TRANSPORT_TCP; |
658 | args.authflavor = clp->cl_flavor; | ||
659 | clp->cl_cb_ident = conn->cb_ident; | 659 | clp->cl_cb_ident = conn->cb_ident; |
660 | } else { | 660 | } else { |
661 | if (!conn->cb_xprt) | 661 | if (!conn->cb_xprt) |
@@ -665,6 +665,7 @@ static int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *c | |||
665 | args.bc_xprt = conn->cb_xprt; | 665 | args.bc_xprt = conn->cb_xprt; |
666 | args.prognumber = clp->cl_cb_session->se_cb_prog; | 666 | args.prognumber = clp->cl_cb_session->se_cb_prog; |
667 | args.protocol = XPRT_TRANSPORT_BC_TCP; | 667 | args.protocol = XPRT_TRANSPORT_BC_TCP; |
668 | args.authflavor = RPC_AUTH_UNIX; | ||
668 | } | 669 | } |
669 | /* Create RPC client */ | 670 | /* Create RPC client */ |
670 | client = rpc_create(&args); | 671 | client = rpc_create(&args); |
@@ -754,9 +755,9 @@ static void do_probe_callback(struct nfs4_client *clp) | |||
754 | */ | 755 | */ |
755 | void nfsd4_probe_callback(struct nfs4_client *clp) | 756 | void nfsd4_probe_callback(struct nfs4_client *clp) |
756 | { | 757 | { |
757 | /* XXX: atomicity? Also, should we be using cl_cb_flags? */ | 758 | /* XXX: atomicity? Also, should we be using cl_flags? */ |
758 | clp->cl_cb_state = NFSD4_CB_UNKNOWN; | 759 | clp->cl_cb_state = NFSD4_CB_UNKNOWN; |
759 | set_bit(NFSD4_CLIENT_CB_UPDATE, &clp->cl_cb_flags); | 760 | set_bit(NFSD4_CLIENT_CB_UPDATE, &clp->cl_flags); |
760 | do_probe_callback(clp); | 761 | do_probe_callback(clp); |
761 | } | 762 | } |
762 | 763 | ||
@@ -915,7 +916,7 @@ void nfsd4_destroy_callback_queue(void) | |||
915 | /* must be called under the state lock */ | 916 | /* must be called under the state lock */ |
916 | void nfsd4_shutdown_callback(struct nfs4_client *clp) | 917 | void nfsd4_shutdown_callback(struct nfs4_client *clp) |
917 | { | 918 | { |
918 | set_bit(NFSD4_CLIENT_KILL, &clp->cl_cb_flags); | 919 | set_bit(NFSD4_CLIENT_CB_KILL, &clp->cl_flags); |
919 | /* | 920 | /* |
920 | * Note this won't actually result in a null callback; | 921 | * Note this won't actually result in a null callback; |
921 | * instead, nfsd4_do_callback_rpc() will detect the killed | 922 | * instead, nfsd4_do_callback_rpc() will detect the killed |
@@ -966,15 +967,15 @@ static void nfsd4_process_cb_update(struct nfsd4_callback *cb) | |||
966 | svc_xprt_put(clp->cl_cb_conn.cb_xprt); | 967 | svc_xprt_put(clp->cl_cb_conn.cb_xprt); |
967 | clp->cl_cb_conn.cb_xprt = NULL; | 968 | clp->cl_cb_conn.cb_xprt = NULL; |
968 | } | 969 | } |
969 | if (test_bit(NFSD4_CLIENT_KILL, &clp->cl_cb_flags)) | 970 | if (test_bit(NFSD4_CLIENT_CB_KILL, &clp->cl_flags)) |
970 | return; | 971 | return; |
971 | spin_lock(&clp->cl_lock); | 972 | spin_lock(&clp->cl_lock); |
972 | /* | 973 | /* |
973 | * Only serialized callback code is allowed to clear these | 974 | * Only serialized callback code is allowed to clear these |
974 | * flags; main nfsd code can only set them: | 975 | * flags; main nfsd code can only set them: |
975 | */ | 976 | */ |
976 | BUG_ON(!clp->cl_cb_flags); | 977 | BUG_ON(!(clp->cl_flags & NFSD4_CLIENT_CB_FLAG_MASK)); |
977 | clear_bit(NFSD4_CLIENT_CB_UPDATE, &clp->cl_cb_flags); | 978 | clear_bit(NFSD4_CLIENT_CB_UPDATE, &clp->cl_flags); |
978 | memcpy(&conn, &cb->cb_clp->cl_cb_conn, sizeof(struct nfs4_cb_conn)); | 979 | memcpy(&conn, &cb->cb_clp->cl_cb_conn, sizeof(struct nfs4_cb_conn)); |
979 | c = __nfsd4_find_backchannel(clp); | 980 | c = __nfsd4_find_backchannel(clp); |
980 | if (c) { | 981 | if (c) { |
@@ -986,7 +987,7 @@ static void nfsd4_process_cb_update(struct nfsd4_callback *cb) | |||
986 | 987 | ||
987 | err = setup_callback_client(clp, &conn, ses); | 988 | err = setup_callback_client(clp, &conn, ses); |
988 | if (err) { | 989 | if (err) { |
989 | warn_no_callback_path(clp, err); | 990 | nfsd4_mark_cb_down(clp, err); |
990 | return; | 991 | return; |
991 | } | 992 | } |
992 | /* Yay, the callback channel's back! Restart any callbacks: */ | 993 | /* Yay, the callback channel's back! Restart any callbacks: */ |
@@ -1000,7 +1001,7 @@ void nfsd4_do_callback_rpc(struct work_struct *w) | |||
1000 | struct nfs4_client *clp = cb->cb_clp; | 1001 | struct nfs4_client *clp = cb->cb_clp; |
1001 | struct rpc_clnt *clnt; | 1002 | struct rpc_clnt *clnt; |
1002 | 1003 | ||
1003 | if (clp->cl_cb_flags) | 1004 | if (clp->cl_flags & NFSD4_CLIENT_CB_FLAG_MASK) |
1004 | nfsd4_process_cb_update(cb); | 1005 | nfsd4_process_cb_update(cb); |
1005 | 1006 | ||
1006 | clnt = clp->cl_cb_client; | 1007 | clnt = clp->cl_cb_client; |