Lines Matching refs:cb
344 const struct nfsd4_callback *cb,
347 struct nfsd4_session *session = cb->cb_clp->cl_cb_session;
388 struct nfsd4_callback *cb)
390 struct nfsd4_session *session = cb->cb_clp->cl_cb_session;
426 cb->cb_seq_status = status;
434 struct nfsd4_callback *cb)
438 if (cb->cb_clp->cl_minorversion == 0)
441 status = decode_cb_op_status(xdr, OP_CB_SEQUENCE, &cb->cb_seq_status);
442 if (unlikely(status || cb->cb_seq_status))
445 return decode_cb_sequence4resok(xdr, cb);
472 const struct nfsd4_callback *cb = data;
473 const struct nfs4_delegation *dp = cb_to_delegation(cb);
475 .ident = cb->cb_clp->cl_cb_ident,
476 .minorversion = cb->cb_clp->cl_minorversion,
480 encode_cb_sequence4args(xdr, cb, &hdr);
508 struct nfsd4_callback *cb = data;
516 status = decode_cb_sequence4res(xdr, cb);
517 if (unlikely(status || cb->cb_seq_status))
520 return decode_cb_op_status(xdr, OP_CB_RECALL, &cb->cb_status);
580 const struct nfsd4_callback *cb = data;
582 container_of(cb, struct nfs4_layout_stateid, ls_recall);
585 .minorversion = cb->cb_clp->cl_minorversion,
589 encode_cb_sequence4args(xdr, cb, &hdr);
598 struct nfsd4_callback *cb = data;
606 status = decode_cb_sequence4res(xdr, cb);
607 if (unlikely(status || cb->cb_seq_status))
610 return decode_cb_op_status(xdr, OP_CB_LAYOUTRECALL, &cb->cb_status);
627 const struct nfsd4_callback *cb = data;
629 container_of(cb, struct nfsd4_blocked_lock, nbl_cb);
633 .minorversion = cb->cb_clp->cl_minorversion,
641 encode_cb_sequence4args(xdr, cb, &hdr);
656 struct nfsd4_callback *cb = data;
664 status = decode_cb_sequence4res(xdr, cb);
665 if (unlikely(status || cb->cb_seq_status))
668 return decode_cb_op_status(xdr, OP_CB_NOTIFY_LOCK, &cb->cb_status);
733 const struct nfsd4_callback *cb = data;
735 container_of(cb, struct nfsd4_copy, cp_cb);
738 .minorversion = cb->cb_clp->cl_minorversion,
742 encode_cb_sequence4args(xdr, cb, &hdr);
751 struct nfsd4_callback *cb = data;
759 status = decode_cb_sequence4res(xdr, cb);
760 if (unlikely(status || cb->cb_seq_status))
763 return decode_cb_op_status(xdr, OP_CB_OFFLOAD, &cb->cb_status);
841 static bool nfsd4_queue_cb(struct nfsd4_callback *cb)
843 return queue_work(callback_wq, &cb->cb_work);
986 /* XXX: release method to ensure we set the cb channel down if
1024 static bool nfsd41_cb_get_slot(struct nfsd4_callback *cb, struct rpc_task *task)
1026 struct nfs4_client *clp = cb->cb_clp;
1028 if (!cb->cb_holds_slot &&
1038 cb->cb_holds_slot = true;
1042 static void nfsd41_cb_release_slot(struct nfsd4_callback *cb)
1044 struct nfs4_client *clp = cb->cb_clp;
1046 if (cb->cb_holds_slot) {
1047 cb->cb_holds_slot = false;
1053 static void nfsd41_destroy_cb(struct nfsd4_callback *cb)
1055 struct nfs4_client *clp = cb->cb_clp;
1057 nfsd41_cb_release_slot(cb);
1058 if (cb->cb_ops && cb->cb_ops->release)
1059 cb->cb_ops->release(cb);
1069 struct nfsd4_callback *cb = calldata;
1070 struct nfs4_client *clp = cb->cb_clp;
1077 cb->cb_seq_status = 1;
1078 cb->cb_status = 0;
1079 if (minorversion && !nfsd41_cb_get_slot(cb, task))
1084 static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback *cb)
1086 struct nfs4_client *clp = cb->cb_clp;
1106 if (!cb->cb_holds_slot)
1109 switch (cb->cb_seq_status) {
1125 nfsd4_mark_cb_fault(cb->cb_clp, cb->cb_seq_status);
1143 nfsd4_mark_cb_fault(cb->cb_clp, cb->cb_seq_status);
1145 cb->cb_seq_status);
1148 nfsd41_cb_release_slot(cb);
1163 cb->cb_need_restart = true;
1170 struct nfsd4_callback *cb = calldata;
1171 struct nfs4_client *clp = cb->cb_clp;
1175 if (!nfsd4_cb_sequence_done(task, cb))
1178 if (cb->cb_status) {
1180 task->tk_status = cb->cb_status;
1183 switch (cb->cb_ops->done(cb, task)) {
1203 struct nfsd4_callback *cb = calldata;
1205 if (cb->cb_need_restart)
1206 nfsd4_queue_cb(cb);
1208 nfsd41_destroy_cb(cb);
1266 static void nfsd4_process_cb_update(struct nfsd4_callback *cb)
1269 struct nfs4_client *clp = cb->cb_clp;
1298 memcpy(&conn, &cb->cb_clp->cl_cb_conn, sizeof(struct nfs4_cb_conn));
1319 struct nfsd4_callback *cb =
1321 struct nfs4_client *clp = cb->cb_clp;
1325 trace_nfsd_cb_work(clp, cb->cb_msg.rpc_proc->p_name);
1327 if (cb->cb_need_restart) {
1328 cb->cb_need_restart = false;
1330 if (cb->cb_ops && cb->cb_ops->prepare)
1331 cb->cb_ops->prepare(cb);
1335 nfsd4_process_cb_update(cb);
1340 nfsd41_destroy_cb(cb);
1347 if (!cb->cb_ops && clp->cl_minorversion) {
1349 nfsd41_destroy_cb(cb);
1353 cb->cb_msg.rpc_cred = clp->cl_cb_cred;
1355 rpc_call_async(clnt, &cb->cb_msg, RPC_TASK_SOFT | flags,
1356 cb->cb_ops ? &nfsd4_cb_ops : &nfsd4_cb_probe_ops, cb);
1359 void nfsd4_init_cb(struct nfsd4_callback *cb, struct nfs4_client *clp,
1362 cb->cb_clp = clp;
1363 cb->cb_msg.rpc_proc = &nfs4_cb_procedures[op];
1364 cb->cb_msg.rpc_argp = cb;
1365 cb->cb_msg.rpc_resp = cb;
1366 cb->cb_ops = ops;
1367 INIT_WORK(&cb->cb_work, nfsd4_run_cb_work);
1368 cb->cb_seq_status = 1;
1369 cb->cb_status = 0;
1370 cb->cb_need_restart = false;
1371 cb->cb_holds_slot = false;
1374 void nfsd4_run_cb(struct nfsd4_callback *cb)
1376 struct nfs4_client *clp = cb->cb_clp;
1379 if (!nfsd4_queue_cb(cb))