Lines Matching refs:cb

344 				    const struct nfsd4_callback *cb,  in encode_cb_sequence4args()  argument
347 struct nfsd4_session *session = cb->cb_clp->cl_cb_session; in encode_cb_sequence4args()
388 struct nfsd4_callback *cb) in decode_cb_sequence4resok() argument
390 struct nfsd4_session *session = cb->cb_clp->cl_cb_session; in decode_cb_sequence4resok()
426 cb->cb_seq_status = status; in decode_cb_sequence4resok()
434 struct nfsd4_callback *cb) in decode_cb_sequence4res() argument
438 if (cb->cb_clp->cl_minorversion == 0) in decode_cb_sequence4res()
441 status = decode_cb_op_status(xdr, OP_CB_SEQUENCE, &cb->cb_seq_status); in decode_cb_sequence4res()
442 if (unlikely(status || cb->cb_seq_status)) in decode_cb_sequence4res()
445 return decode_cb_sequence4resok(xdr, cb); in decode_cb_sequence4res()
472 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_recall() local
473 const struct nfs4_delegation *dp = cb_to_delegation(cb); in nfs4_xdr_enc_cb_recall()
475 .ident = cb->cb_clp->cl_cb_ident, in nfs4_xdr_enc_cb_recall()
476 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_recall()
480 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_recall()
508 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_recall() local
516 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_recall()
517 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_recall()
520 return decode_cb_op_status(xdr, OP_CB_RECALL, &cb->cb_status); in nfs4_xdr_dec_cb_recall()
580 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_layout() local
582 container_of(cb, struct nfs4_layout_stateid, ls_recall); in nfs4_xdr_enc_cb_layout()
585 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_layout()
589 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_layout()
598 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_layout() local
606 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_layout()
607 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_layout()
610 return decode_cb_op_status(xdr, OP_CB_LAYOUTRECALL, &cb->cb_status); in nfs4_xdr_dec_cb_layout()
627 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_notify_lock() local
629 container_of(cb, struct nfsd4_blocked_lock, nbl_cb); in nfs4_xdr_enc_cb_notify_lock()
633 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_notify_lock()
641 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_notify_lock()
656 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_notify_lock() local
664 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_notify_lock()
665 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_notify_lock()
668 return decode_cb_op_status(xdr, OP_CB_NOTIFY_LOCK, &cb->cb_status); in nfs4_xdr_dec_cb_notify_lock()
733 const struct nfsd4_callback *cb = data; in nfs4_xdr_enc_cb_offload() local
735 container_of(cb, struct nfsd4_copy, cp_cb); in nfs4_xdr_enc_cb_offload()
738 .minorversion = cb->cb_clp->cl_minorversion, in nfs4_xdr_enc_cb_offload()
742 encode_cb_sequence4args(xdr, cb, &hdr); in nfs4_xdr_enc_cb_offload()
751 struct nfsd4_callback *cb = data; in nfs4_xdr_dec_cb_offload() local
759 status = decode_cb_sequence4res(xdr, cb); in nfs4_xdr_dec_cb_offload()
760 if (unlikely(status || cb->cb_seq_status)) in nfs4_xdr_dec_cb_offload()
763 return decode_cb_op_status(xdr, OP_CB_OFFLOAD, &cb->cb_status); in nfs4_xdr_dec_cb_offload()
841 static bool nfsd4_queue_cb(struct nfsd4_callback *cb) in nfsd4_queue_cb() argument
843 return queue_work(callback_wq, &cb->cb_work); in nfsd4_queue_cb()
1027 static bool nfsd41_cb_get_slot(struct nfsd4_callback *cb, struct rpc_task *task) in nfsd41_cb_get_slot() argument
1029 struct nfs4_client *clp = cb->cb_clp; in nfsd41_cb_get_slot()
1031 if (!cb->cb_holds_slot && in nfsd41_cb_get_slot()
1041 cb->cb_holds_slot = true; in nfsd41_cb_get_slot()
1045 static void nfsd41_cb_release_slot(struct nfsd4_callback *cb) in nfsd41_cb_release_slot() argument
1047 struct nfs4_client *clp = cb->cb_clp; in nfsd41_cb_release_slot()
1049 if (cb->cb_holds_slot) { in nfsd41_cb_release_slot()
1050 cb->cb_holds_slot = false; in nfsd41_cb_release_slot()
1056 static void nfsd41_destroy_cb(struct nfsd4_callback *cb) in nfsd41_destroy_cb() argument
1058 struct nfs4_client *clp = cb->cb_clp; in nfsd41_destroy_cb()
1060 nfsd41_cb_release_slot(cb); in nfsd41_destroy_cb()
1061 if (cb->cb_ops && cb->cb_ops->release) in nfsd41_destroy_cb()
1062 cb->cb_ops->release(cb); in nfsd41_destroy_cb()
1072 struct nfsd4_callback *cb = calldata; in nfsd4_cb_prepare() local
1073 struct nfs4_client *clp = cb->cb_clp; in nfsd4_cb_prepare()
1080 cb->cb_seq_status = 1; in nfsd4_cb_prepare()
1081 cb->cb_status = 0; in nfsd4_cb_prepare()
1082 if (minorversion && !nfsd41_cb_get_slot(cb, task)) in nfsd4_cb_prepare()
1087 static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback *cb) in nfsd4_cb_sequence_done() argument
1089 struct nfs4_client *clp = cb->cb_clp; in nfsd4_cb_sequence_done()
1109 if (!cb->cb_holds_slot) in nfsd4_cb_sequence_done()
1112 switch (cb->cb_seq_status) { in nfsd4_cb_sequence_done()
1128 nfsd4_mark_cb_fault(cb->cb_clp, cb->cb_seq_status); in nfsd4_cb_sequence_done()
1146 nfsd4_mark_cb_fault(cb->cb_clp, cb->cb_seq_status); in nfsd4_cb_sequence_done()
1148 cb->cb_seq_status); in nfsd4_cb_sequence_done()
1151 nfsd41_cb_release_slot(cb); in nfsd4_cb_sequence_done()
1166 cb->cb_need_restart = true; in nfsd4_cb_sequence_done()
1173 struct nfsd4_callback *cb = calldata; in nfsd4_cb_done() local
1174 struct nfs4_client *clp = cb->cb_clp; in nfsd4_cb_done()
1176 if (!nfsd4_cb_sequence_done(task, cb)) in nfsd4_cb_done()
1179 if (cb->cb_status) { in nfsd4_cb_done()
1181 task->tk_status = cb->cb_status; in nfsd4_cb_done()
1184 switch (cb->cb_ops->done(cb, task)) { in nfsd4_cb_done()
1204 struct nfsd4_callback *cb = calldata; in nfsd4_cb_release() local
1206 if (cb->cb_need_restart) in nfsd4_cb_release()
1207 nfsd4_queue_cb(cb); in nfsd4_cb_release()
1209 nfsd41_destroy_cb(cb); in nfsd4_cb_release()
1270 static void nfsd4_process_cb_update(struct nfsd4_callback *cb) in nfsd4_process_cb_update() argument
1273 struct nfs4_client *clp = cb->cb_clp; in nfsd4_process_cb_update()
1301 memcpy(&conn, &cb->cb_clp->cl_cb_conn, sizeof(struct nfs4_cb_conn)); in nfsd4_process_cb_update()
1322 struct nfsd4_callback *cb = in nfsd4_run_cb_work() local
1324 struct nfs4_client *clp = cb->cb_clp; in nfsd4_run_cb_work()
1328 if (cb->cb_need_restart) { in nfsd4_run_cb_work()
1329 cb->cb_need_restart = false; in nfsd4_run_cb_work()
1331 if (cb->cb_ops && cb->cb_ops->prepare) in nfsd4_run_cb_work()
1332 cb->cb_ops->prepare(cb); in nfsd4_run_cb_work()
1336 nfsd4_process_cb_update(cb); in nfsd4_run_cb_work()
1341 nfsd41_destroy_cb(cb); in nfsd4_run_cb_work()
1348 if (!cb->cb_ops && clp->cl_minorversion) { in nfsd4_run_cb_work()
1350 nfsd41_destroy_cb(cb); in nfsd4_run_cb_work()
1354 cb->cb_msg.rpc_cred = clp->cl_cb_cred; in nfsd4_run_cb_work()
1356 rpc_call_async(clnt, &cb->cb_msg, RPC_TASK_SOFT | flags, in nfsd4_run_cb_work()
1357 cb->cb_ops ? &nfsd4_cb_ops : &nfsd4_cb_probe_ops, cb); in nfsd4_run_cb_work()
1360 void nfsd4_init_cb(struct nfsd4_callback *cb, struct nfs4_client *clp, in nfsd4_init_cb() argument
1363 cb->cb_clp = clp; in nfsd4_init_cb()
1364 cb->cb_msg.rpc_proc = &nfs4_cb_procedures[op]; in nfsd4_init_cb()
1365 cb->cb_msg.rpc_argp = cb; in nfsd4_init_cb()
1366 cb->cb_msg.rpc_resp = cb; in nfsd4_init_cb()
1367 cb->cb_ops = ops; in nfsd4_init_cb()
1368 INIT_WORK(&cb->cb_work, nfsd4_run_cb_work); in nfsd4_init_cb()
1369 cb->cb_seq_status = 1; in nfsd4_init_cb()
1370 cb->cb_status = 0; in nfsd4_init_cb()
1371 cb->cb_need_restart = false; in nfsd4_init_cb()
1372 cb->cb_holds_slot = false; in nfsd4_init_cb()
1375 void nfsd4_run_cb(struct nfsd4_callback *cb) in nfsd4_run_cb() argument
1377 struct nfs4_client *clp = cb->cb_clp; in nfsd4_run_cb()
1380 if (!nfsd4_queue_cb(cb)) in nfsd4_run_cb()