Lines Matching full:cb
72 * Encode/decode NFSv4 CB basic data types
202 dprintk("NFSD: Unrecognized NFS CB status value: %u\n", status); in nfs_cb_stat_to_errno()
349 const struct nfsd4_callback *cb, in encode_cb_sequence4args() argument
352 struct nfsd4_session *session = cb->cb_clp->cl_cb_session; in encode_cb_sequence4args()
393 struct nfsd4_callback *cb) in decode_cb_sequence4resok() argument
395 struct nfsd4_session *session = cb->cb_clp->cl_cb_session; in decode_cb_sequence4resok()
431 cb->cb_seq_status = status; in decode_cb_sequence4resok()
439 struct nfsd4_callback *cb) in decode_cb_sequence4res() argument
443 if (cb->cb_clp->cl_minorversion == 0) in decode_cb_sequence4res()
446 status = decode_cb_op_status(xdr, OP_CB_SEQUENCE, &cb->cb_seq_status); in decode_cb_sequence4res()
447 if (unlikely(status || cb->cb_seq_status)) in decode_cb_sequence4res()
450 return decode_cb_sequence4resok(xdr, cb); in decode_cb_sequence4res()
477 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_recall() local
478 const struct nfs4_delegation *dp = cb_to_delegation(cb); in nfs4_xdr_enc_cb_recall()
480 .ident = cb->cb_clp->cl_cb_ident, in nfs4_xdr_enc_cb_recall()
481 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_recall()
485 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_recall()
497 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_recall_any() local
500 .ident = cb->cb_clp->cl_cb_ident, in nfs4_xdr_enc_cb_recall_any()
501 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_recall_any()
504 ra = container_of(cb, struct nfsd4_cb_recall_any, ra_cb); in nfs4_xdr_enc_cb_recall_any()
506 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_recall_any()
533 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_recall() local
541 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_recall()
542 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_recall()
545 return decode_cb_op_status(xdr, OP_CB_RECALL, &cb->cb_status); in nfs4_xdr_dec_cb_recall()
556 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_recall_any() local
563 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_recall_any()
564 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_recall_any()
566 status = decode_cb_op_status(xdr, OP_CB_RECALL_ANY, &cb->cb_status); in nfs4_xdr_dec_cb_recall_any()
627 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_layout() local
629 container_of(cb, struct nfs4_layout_stateid, ls_recall); in nfs4_xdr_enc_cb_layout()
632 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_layout()
636 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_layout()
645 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_layout() local
653 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_layout()
654 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_layout()
657 return decode_cb_op_status(xdr, OP_CB_LAYOUTRECALL, &cb->cb_status); in nfs4_xdr_dec_cb_layout()
674 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_notify_lock() local
676 container_of(cb, struct nfsd4_blocked_lock, nbl_cb); in nfs4_xdr_enc_cb_notify_lock()
680 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_notify_lock()
688 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_notify_lock()
703 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_notify_lock() local
711 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_notify_lock()
712 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_notify_lock()
715 return decode_cb_op_status(xdr, OP_CB_NOTIFY_LOCK, &cb->cb_status); in nfs4_xdr_dec_cb_notify_lock()
779 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_offload() local
781 container_of(cb, struct nfsd4_cb_offload, co_cb); in nfs4_xdr_enc_cb_offload()
784 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_offload()
788 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_offload()
797 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_offload() local
805 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_offload()
806 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_offload()
809 return decode_cb_op_status(xdr, OP_CB_OFFLOAD, &cb->cb_status); in nfs4_xdr_dec_cb_offload()
888 static bool nfsd4_queue_cb(struct nfsd4_callback *cb) in nfsd4_queue_cb() argument
890 return queue_work(callback_wq, &cb->cb_work); in nfsd4_queue_cb()
1039 /* XXX: release method to ensure we set the cb channel down if
1076 static bool nfsd41_cb_get_slot(struct nfsd4_callback *cb, struct rpc_task *task) in nfsd41_cb_get_slot() argument
1078 struct nfs4_client *clp = cb->cb_clp; in nfsd41_cb_get_slot()
1080 if (!cb->cb_holds_slot && in nfsd41_cb_get_slot()
1090 cb->cb_holds_slot = true; in nfsd41_cb_get_slot()
1094 static void nfsd41_cb_release_slot(struct nfsd4_callback *cb) in nfsd41_cb_release_slot() argument
1096 struct nfs4_client *clp = cb->cb_clp; in nfsd41_cb_release_slot()
1098 if (cb->cb_holds_slot) { in nfsd41_cb_release_slot()
1099 cb->cb_holds_slot = false; in nfsd41_cb_release_slot()
1105 static void nfsd41_destroy_cb(struct nfsd4_callback *cb) in nfsd41_destroy_cb() argument
1107 struct nfs4_client *clp = cb->cb_clp; in nfsd41_destroy_cb()
1109 nfsd41_cb_release_slot(cb); in nfsd41_destroy_cb()
1110 if (cb->cb_ops && cb->cb_ops->release) in nfsd41_destroy_cb()
1111 cb->cb_ops->release(cb); in nfsd41_destroy_cb()
1121 struct nfsd4_callback *cb = calldata; in nfsd4_cb_prepare() local
1122 struct nfs4_client *clp = cb->cb_clp; in nfsd4_cb_prepare()
1129 cb->cb_seq_status = 1; in nfsd4_cb_prepare()
1130 cb->cb_status = 0; in nfsd4_cb_prepare()
1131 if (minorversion && !nfsd41_cb_get_slot(cb, task)) in nfsd4_cb_prepare()
1136 static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback *cb) in nfsd4_cb_sequence_done() argument
1138 struct nfs4_client *clp = cb->cb_clp; in nfsd4_cb_sequence_done()
1158 if (!cb->cb_holds_slot) in nfsd4_cb_sequence_done()
1161 switch (cb->cb_seq_status) { in nfsd4_cb_sequence_done()
1177 nfsd4_mark_cb_fault(cb->cb_clp, cb->cb_seq_status); in nfsd4_cb_sequence_done()
1195 nfsd4_mark_cb_fault(cb->cb_clp, cb->cb_seq_status); in nfsd4_cb_sequence_done()
1197 cb->cb_seq_status); in nfsd4_cb_sequence_done()
1200 nfsd41_cb_release_slot(cb); in nfsd4_cb_sequence_done()
1215 cb->cb_need_restart = true; in nfsd4_cb_sequence_done()
1222 struct nfsd4_callback *cb = calldata; in nfsd4_cb_done() local
1223 struct nfs4_client *clp = cb->cb_clp; in nfsd4_cb_done()
1225 if (!nfsd4_cb_sequence_done(task, cb)) in nfsd4_cb_done()
1228 if (cb->cb_status) { in nfsd4_cb_done()
1230 task->tk_status = cb->cb_status; in nfsd4_cb_done()
1233 switch (cb->cb_ops->done(cb, task)) { in nfsd4_cb_done()
1253 struct nfsd4_callback *cb = calldata; in nfsd4_cb_release() local
1255 if (cb->cb_need_restart) in nfsd4_cb_release()
1256 nfsd4_queue_cb(cb); in nfsd4_cb_release()
1258 nfsd41_destroy_cb(cb); in nfsd4_cb_release()
1319 static void nfsd4_process_cb_update(struct nfsd4_callback *cb) in nfsd4_process_cb_update() argument
1322 struct nfs4_client *clp = cb->cb_clp; in nfsd4_process_cb_update()
1350 memcpy(&conn, &cb->cb_clp->cl_cb_conn, sizeof(struct nfs4_cb_conn)); in nfsd4_process_cb_update()
1371 struct nfsd4_callback *cb = in nfsd4_run_cb_work() local
1373 struct nfs4_client *clp = cb->cb_clp; in nfsd4_run_cb_work()
1377 if (cb->cb_need_restart) { in nfsd4_run_cb_work()
1378 cb->cb_need_restart = false; in nfsd4_run_cb_work()
1380 if (cb->cb_ops && cb->cb_ops->prepare) in nfsd4_run_cb_work()
1381 cb->cb_ops->prepare(cb); in nfsd4_run_cb_work()
1385 nfsd4_process_cb_update(cb); in nfsd4_run_cb_work()
1390 nfsd41_destroy_cb(cb); in nfsd4_run_cb_work()
1397 if (!cb->cb_ops && clp->cl_minorversion) { in nfsd4_run_cb_work()
1399 nfsd41_destroy_cb(cb); in nfsd4_run_cb_work()
1403 cb->cb_msg.rpc_cred = clp->cl_cb_cred; in nfsd4_run_cb_work()
1405 rpc_call_async(clnt, &cb->cb_msg, RPC_TASK_SOFT | flags, in nfsd4_run_cb_work()
1406 cb->cb_ops ? &nfsd4_cb_ops : &nfsd4_cb_probe_ops, cb); in nfsd4_run_cb_work()
1409 void nfsd4_init_cb(struct nfsd4_callback *cb, struct nfs4_client *clp, in nfsd4_init_cb() argument
1412 cb->cb_clp = clp; in nfsd4_init_cb()
1413 cb->cb_msg.rpc_proc = &nfs4_cb_procedures[op]; in nfsd4_init_cb()
1414 cb->cb_msg.rpc_argp = cb; in nfsd4_init_cb()
1415 cb->cb_msg.rpc_resp = cb; in nfsd4_init_cb()
1416 cb->cb_ops = ops; in nfsd4_init_cb()
1417 INIT_WORK(&cb->cb_work, nfsd4_run_cb_work); in nfsd4_init_cb()
1418 cb->cb_seq_status = 1; in nfsd4_init_cb()
1419 cb->cb_status = 0; in nfsd4_init_cb()
1420 cb->cb_need_restart = false; in nfsd4_init_cb()
1421 cb->cb_holds_slot = false; in nfsd4_init_cb()
1426 * @cb: callback to queue
1431 bool nfsd4_run_cb(struct nfsd4_callback *cb) in nfsd4_run_cb() argument
1433 struct nfs4_client *clp = cb->cb_clp; in nfsd4_run_cb()
1437 queued = nfsd4_queue_cb(cb); in nfsd4_run_cb()