Lines Matching refs:cb

373 				    const struct nfsd4_callback *cb,  in encode_cb_sequence4args()  argument
376 struct nfsd4_session *session = cb->cb_clp->cl_cb_session; in encode_cb_sequence4args()
417 struct nfsd4_callback *cb) in decode_cb_sequence4resok() argument
419 struct nfsd4_session *session = cb->cb_clp->cl_cb_session; in decode_cb_sequence4resok()
455 cb->cb_seq_status = status; in decode_cb_sequence4resok()
463 struct nfsd4_callback *cb) in decode_cb_sequence4res() argument
467 if (cb->cb_clp->cl_minorversion == 0) in decode_cb_sequence4res()
470 status = decode_cb_op_status(xdr, OP_CB_SEQUENCE, &cb->cb_seq_status); in decode_cb_sequence4res()
471 if (unlikely(status || cb->cb_seq_status)) in decode_cb_sequence4res()
474 return decode_cb_sequence4resok(xdr, cb); in decode_cb_sequence4res()
501 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_recall() local
502 const struct nfs4_delegation *dp = cb_to_delegation(cb); in nfs4_xdr_enc_cb_recall()
504 .ident = cb->cb_clp->cl_cb_ident, in nfs4_xdr_enc_cb_recall()
505 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_recall()
509 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_recall()
521 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_recall_any() local
524 .ident = cb->cb_clp->cl_cb_ident, in nfs4_xdr_enc_cb_recall_any()
525 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_recall_any()
528 ra = container_of(cb, struct nfsd4_cb_recall_any, ra_cb); in nfs4_xdr_enc_cb_recall_any()
530 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_recall_any()
557 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_recall() local
565 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_recall()
566 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_recall()
569 return decode_cb_op_status(xdr, OP_CB_RECALL, &cb->cb_status); in nfs4_xdr_dec_cb_recall()
580 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_recall_any() local
587 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_recall_any()
588 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_recall_any()
590 status = decode_cb_op_status(xdr, OP_CB_RECALL_ANY, &cb->cb_status); in nfs4_xdr_dec_cb_recall_any()
651 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_layout() local
653 container_of(cb, struct nfs4_layout_stateid, ls_recall); in nfs4_xdr_enc_cb_layout()
656 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_layout()
660 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_layout()
669 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_layout() local
677 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_layout()
678 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_layout()
681 return decode_cb_op_status(xdr, OP_CB_LAYOUTRECALL, &cb->cb_status); in nfs4_xdr_dec_cb_layout()
698 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_notify_lock() local
700 container_of(cb, struct nfsd4_blocked_lock, nbl_cb); in nfs4_xdr_enc_cb_notify_lock()
704 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_notify_lock()
712 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_notify_lock()
727 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_notify_lock() local
735 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_notify_lock()
736 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_notify_lock()
739 return decode_cb_op_status(xdr, OP_CB_NOTIFY_LOCK, &cb->cb_status); in nfs4_xdr_dec_cb_notify_lock()
803 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_offload() local
805 container_of(cb, struct nfsd4_cb_offload, co_cb); in nfs4_xdr_enc_cb_offload()
808 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_offload()
812 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_offload()
821 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_offload() local
829 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_offload()
830 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_offload()
833 return decode_cb_op_status(xdr, OP_CB_OFFLOAD, &cb->cb_status); in nfs4_xdr_dec_cb_offload()
912 static bool nfsd4_queue_cb(struct nfsd4_callback *cb) in nfsd4_queue_cb() argument
914 return queue_work(callback_wq, &cb->cb_work); in nfsd4_queue_cb()
1100 static bool nfsd41_cb_get_slot(struct nfsd4_callback *cb, struct rpc_task *task) in nfsd41_cb_get_slot() argument
1102 struct nfs4_client *clp = cb->cb_clp; in nfsd41_cb_get_slot()
1104 if (!cb->cb_holds_slot && in nfsd41_cb_get_slot()
1114 cb->cb_holds_slot = true; in nfsd41_cb_get_slot()
1118 static void nfsd41_cb_release_slot(struct nfsd4_callback *cb) in nfsd41_cb_release_slot() argument
1120 struct nfs4_client *clp = cb->cb_clp; in nfsd41_cb_release_slot()
1122 if (cb->cb_holds_slot) { in nfsd41_cb_release_slot()
1123 cb->cb_holds_slot = false; in nfsd41_cb_release_slot()
1129 static void nfsd41_destroy_cb(struct nfsd4_callback *cb) in nfsd41_destroy_cb() argument
1131 struct nfs4_client *clp = cb->cb_clp; in nfsd41_destroy_cb()
1133 nfsd41_cb_release_slot(cb); in nfsd41_destroy_cb()
1134 if (cb->cb_ops && cb->cb_ops->release) in nfsd41_destroy_cb()
1135 cb->cb_ops->release(cb); in nfsd41_destroy_cb()
1145 struct nfsd4_callback *cb = calldata; in nfsd4_cb_prepare() local
1146 struct nfs4_client *clp = cb->cb_clp; in nfsd4_cb_prepare()
1153 cb->cb_seq_status = 1; in nfsd4_cb_prepare()
1154 cb->cb_status = 0; in nfsd4_cb_prepare()
1155 if (minorversion && !nfsd41_cb_get_slot(cb, task)) in nfsd4_cb_prepare()
1160 static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback *cb) in nfsd4_cb_sequence_done() argument
1162 struct nfs4_client *clp = cb->cb_clp; in nfsd4_cb_sequence_done()
1182 if (!cb->cb_holds_slot) in nfsd4_cb_sequence_done()
1185 switch (cb->cb_seq_status) { in nfsd4_cb_sequence_done()
1201 nfsd4_mark_cb_fault(cb->cb_clp, cb->cb_seq_status); in nfsd4_cb_sequence_done()
1219 nfsd4_mark_cb_fault(cb->cb_clp, cb->cb_seq_status); in nfsd4_cb_sequence_done()
1221 cb->cb_seq_status); in nfsd4_cb_sequence_done()
1224 nfsd41_cb_release_slot(cb); in nfsd4_cb_sequence_done()
1239 cb->cb_need_restart = true; in nfsd4_cb_sequence_done()
1246 struct nfsd4_callback *cb = calldata; in nfsd4_cb_done() local
1247 struct nfs4_client *clp = cb->cb_clp; in nfsd4_cb_done()
1249 if (!nfsd4_cb_sequence_done(task, cb)) in nfsd4_cb_done()
1252 if (cb->cb_status) { in nfsd4_cb_done()
1254 task->tk_status = cb->cb_status; in nfsd4_cb_done()
1257 switch (cb->cb_ops->done(cb, task)) { in nfsd4_cb_done()
1277 struct nfsd4_callback *cb = calldata; in nfsd4_cb_release() local
1279 if (cb->cb_need_restart) in nfsd4_cb_release()
1280 nfsd4_queue_cb(cb); in nfsd4_cb_release()
1282 nfsd41_destroy_cb(cb); in nfsd4_cb_release()
1343 static void nfsd4_process_cb_update(struct nfsd4_callback *cb) in nfsd4_process_cb_update() argument
1346 struct nfs4_client *clp = cb->cb_clp; in nfsd4_process_cb_update()
1374 memcpy(&conn, &cb->cb_clp->cl_cb_conn, sizeof(struct nfs4_cb_conn)); in nfsd4_process_cb_update()
1395 struct nfsd4_callback *cb = in nfsd4_run_cb_work() local
1397 struct nfs4_client *clp = cb->cb_clp; in nfsd4_run_cb_work()
1401 if (cb->cb_need_restart) { in nfsd4_run_cb_work()
1402 cb->cb_need_restart = false; in nfsd4_run_cb_work()
1404 if (cb->cb_ops && cb->cb_ops->prepare) in nfsd4_run_cb_work()
1405 cb->cb_ops->prepare(cb); in nfsd4_run_cb_work()
1409 nfsd4_process_cb_update(cb); in nfsd4_run_cb_work()
1414 nfsd41_destroy_cb(cb); in nfsd4_run_cb_work()
1421 if (!cb->cb_ops && clp->cl_minorversion) { in nfsd4_run_cb_work()
1423 nfsd41_destroy_cb(cb); in nfsd4_run_cb_work()
1427 cb->cb_msg.rpc_cred = clp->cl_cb_cred; in nfsd4_run_cb_work()
1429 rpc_call_async(clnt, &cb->cb_msg, RPC_TASK_SOFT | flags, in nfsd4_run_cb_work()
1430 cb->cb_ops ? &nfsd4_cb_ops : &nfsd4_cb_probe_ops, cb); in nfsd4_run_cb_work()
1433 void nfsd4_init_cb(struct nfsd4_callback *cb, struct nfs4_client *clp, in nfsd4_init_cb() argument
1436 cb->cb_clp = clp; in nfsd4_init_cb()
1437 cb->cb_msg.rpc_proc = &nfs4_cb_procedures[op]; in nfsd4_init_cb()
1438 cb->cb_msg.rpc_argp = cb; in nfsd4_init_cb()
1439 cb->cb_msg.rpc_resp = cb; in nfsd4_init_cb()
1440 cb->cb_ops = ops; in nfsd4_init_cb()
1441 INIT_WORK(&cb->cb_work, nfsd4_run_cb_work); in nfsd4_init_cb()
1442 cb->cb_seq_status = 1; in nfsd4_init_cb()
1443 cb->cb_status = 0; in nfsd4_init_cb()
1444 cb->cb_need_restart = false; in nfsd4_init_cb()
1445 cb->cb_holds_slot = false; in nfsd4_init_cb()
1455 bool nfsd4_run_cb(struct nfsd4_callback *cb) in nfsd4_run_cb() argument
1457 struct nfs4_client *clp = cb->cb_clp; in nfsd4_run_cb()
1461 queued = nfsd4_queue_cb(cb); in nfsd4_run_cb()