Lines Matching +full:triple +full:- +full:channel

1 // SPDX-License-Identifier: GPL-2.0
36 res->status = htonl(NFS4ERR_OP_NOT_IN_SESSION); in nfs4_callback_getattr()
37 if (!cps->clp) /* Always set for v4.0. Set in cb_sequence for v4.1 */ in nfs4_callback_getattr()
40 res->bitmap[0] = res->bitmap[1] = 0; in nfs4_callback_getattr()
41 res->status = htonl(NFS4ERR_BADHANDLE); in nfs4_callback_getattr()
44 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_getattr()
46 inode = nfs_delegation_find_inode(cps->clp, &args->fh); in nfs4_callback_getattr()
48 if (inode == ERR_PTR(-EAGAIN)) in nfs4_callback_getattr()
49 res->status = htonl(NFS4ERR_DELAY); in nfs4_callback_getattr()
50 trace_nfs4_cb_getattr(cps->clp, &args->fh, NULL, in nfs4_callback_getattr()
51 -ntohl(res->status)); in nfs4_callback_getattr()
56 if (delegation == NULL || (delegation->type & FMODE_WRITE) == 0) in nfs4_callback_getattr()
58 res->size = i_size_read(inode); in nfs4_callback_getattr()
59 res->change_attr = delegation->change_attr; in nfs4_callback_getattr()
61 res->change_attr++; in nfs4_callback_getattr()
62 res->ctime = inode->i_ctime; in nfs4_callback_getattr()
63 res->mtime = inode->i_mtime; in nfs4_callback_getattr()
64 res->bitmap[0] = (FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE) & in nfs4_callback_getattr()
65 args->bitmap[0]; in nfs4_callback_getattr()
66 res->bitmap[1] = (FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY) & in nfs4_callback_getattr()
67 args->bitmap[1]; in nfs4_callback_getattr()
68 res->status = 0; in nfs4_callback_getattr()
71 trace_nfs4_cb_getattr(cps->clp, &args->fh, inode, -ntohl(res->status)); in nfs4_callback_getattr()
74 dprintk("%s: exit with status = %d\n", __func__, ntohl(res->status)); in nfs4_callback_getattr()
75 return res->status; in nfs4_callback_getattr()
86 if (!cps->clp) /* Always set for v4.0. Set in cb_sequence for v4.1 */ in nfs4_callback_recall()
90 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_recall()
93 inode = nfs_delegation_find_inode(cps->clp, &args->fh); in nfs4_callback_recall()
95 if (inode == ERR_PTR(-EAGAIN)) in nfs4_callback_recall()
97 trace_nfs4_cb_recall(cps->clp, &args->fh, NULL, in nfs4_callback_recall()
98 &args->stateid, -ntohl(res)); in nfs4_callback_recall()
102 switch (nfs_async_inode_return_delegation(inode, &args->stateid)) { in nfs4_callback_recall()
106 case -ENOENT: in nfs4_callback_recall()
112 trace_nfs4_cb_recall(cps->clp, &args->fh, inode, in nfs4_callback_recall()
113 &args->stateid, -ntohl(res)); in nfs4_callback_recall()
136 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs_layout_find_inode_by_stateid()
137 list_for_each_entry_rcu(lo, &server->layouts, plh_layouts) { in nfs_layout_find_inode_by_stateid()
140 if (!nfs4_stateid_match_other(stateid, &lo->plh_stateid)) in nfs_layout_find_inode_by_stateid()
142 if (nfs_sb_active(server->super)) in nfs_layout_find_inode_by_stateid()
143 inode = igrab(lo->plh_inode); in nfs_layout_find_inode_by_stateid()
145 inode = ERR_PTR(-EAGAIN); in nfs_layout_find_inode_by_stateid()
149 nfs_sb_deactive(server->super); in nfs_layout_find_inode_by_stateid()
150 return ERR_PTR(-EAGAIN); in nfs_layout_find_inode_by_stateid()
154 return ERR_PTR(-ENOENT); in nfs_layout_find_inode_by_stateid()
172 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs_layout_find_inode_by_fh()
173 list_for_each_entry_rcu(lo, &server->layouts, plh_layouts) { in nfs_layout_find_inode_by_fh()
174 nfsi = NFS_I(lo->plh_inode); in nfs_layout_find_inode_by_fh()
175 if (nfs_compare_fh(fh, &nfsi->fh)) in nfs_layout_find_inode_by_fh()
177 if (nfsi->layout != lo) in nfs_layout_find_inode_by_fh()
179 if (nfs_sb_active(server->super)) in nfs_layout_find_inode_by_fh()
180 inode = igrab(lo->plh_inode); in nfs_layout_find_inode_by_fh()
182 inode = ERR_PTR(-EAGAIN); in nfs_layout_find_inode_by_fh()
186 nfs_sb_deactive(server->super); in nfs_layout_find_inode_by_fh()
187 return ERR_PTR(-EAGAIN); in nfs_layout_find_inode_by_fh()
191 return ERR_PTR(-ENOENT); in nfs_layout_find_inode_by_fh()
201 if (inode == ERR_PTR(-ENOENT)) in nfs_layout_find_inode()
219 if (!nfs4_stateid_match_other(&lo->plh_stateid, new)) in pnfs_check_callback_stateid()
222 newseq = be32_to_cpu(new->seqid); in pnfs_check_callback_stateid()
224 if (test_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags) && in pnfs_check_callback_stateid()
225 lo->plh_return_seq != 0) { in pnfs_check_callback_stateid()
226 if (newseq < lo->plh_return_seq) in pnfs_check_callback_stateid()
228 if (newseq > lo->plh_return_seq) in pnfs_check_callback_stateid()
234 oldseq = be32_to_cpu(lo->plh_stateid.seqid); in pnfs_check_callback_stateid()
252 ino = nfs_layout_find_inode(clp, &args->cbl_fh, &args->cbl_stateid); in initiate_file_draining()
254 if (ino == ERR_PTR(-EAGAIN)) in initiate_file_draining()
262 spin_lock(&ino->i_lock); in initiate_file_draining()
263 lo = NFS_I(ino)->layout; in initiate_file_draining()
265 spin_unlock(&ino->i_lock); in initiate_file_draining()
269 rv = pnfs_check_callback_stateid(lo, &args->cbl_stateid); in initiate_file_draining()
276 if (test_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags)) { in initiate_file_draining()
281 pnfs_set_layout_stateid(lo, &args->cbl_stateid, NULL, true); in initiate_file_draining()
283 &args->cbl_range, in initiate_file_draining()
284 be32_to_cpu(args->cbl_stateid.seqid))) { in initiate_file_draining()
286 case -EBUSY: in initiate_file_draining()
290 case -ENOENT: in initiate_file_draining()
291 set_bit(NFS_LAYOUT_DRAIN, &lo->plh_flags); in initiate_file_draining()
295 if (NFS_SERVER(ino)->pnfs_curr_ld->return_range) { in initiate_file_draining()
296 NFS_SERVER(ino)->pnfs_curr_ld->return_range(lo, in initiate_file_draining()
297 &args->cbl_range); in initiate_file_draining()
301 spin_unlock(&ino->i_lock); in initiate_file_draining()
309 trace_nfs4_cb_layoutrecall_file(clp, &args->cbl_fh, ino, in initiate_file_draining()
310 &args->cbl_stateid, -rv); in initiate_file_draining()
319 if (args->cbl_recall_type == RETURN_FSID) in initiate_bulk_draining()
320 stat = pnfs_destroy_layouts_byfsid(clp, &args->cbl_fsid, true); in initiate_bulk_draining()
331 if (args->cbl_recall_type == RETURN_FILE) in do_callback_layoutrecall()
342 if (cps->clp) in nfs4_callback_layoutrecall()
343 res = do_callback_layoutrecall(cps->clp, args); in nfs4_callback_layoutrecall()
366 if (!cps->clp) { in nfs4_callback_devicenotify()
371 for (i = 0; i < args->ndevs; i++) { in nfs4_callback_devicenotify()
372 struct cb_devicenotifyitem *dev = &args->devs[i]; in nfs4_callback_devicenotify()
374 if (!ld || ld->id != dev->cbd_layout_type) { in nfs4_callback_devicenotify()
376 ld = pnfs_find_layoutdriver(dev->cbd_layout_type); in nfs4_callback_devicenotify()
380 nfs4_delete_deviceid(ld, cps->clp, &dev->cbd_dev_id); in nfs4_callback_devicenotify()
384 kfree(args->devs); in nfs4_callback_devicenotify()
394 * back channel ca_maxresponsesize_cached to zero. This is OK for now
408 if (args->csa_slotid > tbl->server_highest_slotid) in validate_seqid()
412 if (args->csa_sequenceid == slot->seq_nr) { in validate_seqid()
414 if (nfs4_test_locked_slot(tbl, slot->slot_nr)) in validate_seqid()
419 if (args->csa_cachethis == 0) in validate_seqid()
430 if (args->csa_sequenceid != slot->seq_nr + 1) in validate_seqid()
441 * For each referring call triple, check the session's slot table for
463 session = clp->cl_session; in referring_call_exists()
464 tbl = &session->fc_slot_table; in referring_call_exists()
468 if (memcmp(session->sess_id.data, in referring_call_exists()
469 rclist->rcl_sessionid.data, in referring_call_exists()
473 for (j = 0; j < rclist->rcl_nrefcalls; j++) { in referring_call_exists()
474 ref = &rclist->rcl_refcalls[j]; in referring_call_exists()
476 status = nfs4_slot_wait_on_seqid(tbl, ref->rc_slotid, in referring_call_exists()
477 ref->rc_sequenceid, HZ >> 1) < 0; in referring_call_exists()
499 clp = nfs4_find_client_sessionid(cps->net, args->csa_addr, in nfs4_callback_sequence()
500 &args->csa_sessionid, cps->minorversion); in nfs4_callback_sequence()
504 if (!(clp->cl_session->flags & SESSION4_BACK_CHAN)) in nfs4_callback_sequence()
507 tbl = &clp->cl_session->bc_slot_table; in nfs4_callback_sequence()
510 memcpy(&res->csr_sessionid, &args->csa_sessionid, in nfs4_callback_sequence()
511 sizeof(res->csr_sessionid)); in nfs4_callback_sequence()
512 res->csr_sequenceid = args->csa_sequenceid; in nfs4_callback_sequence()
513 res->csr_slotid = args->csa_slotid; in nfs4_callback_sequence()
515 spin_lock(&tbl->slot_tbl_lock); in nfs4_callback_sequence()
517 if (test_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state)) { in nfs4_callback_sequence()
522 if (test_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state)) in nfs4_callback_sequence()
528 slot = nfs4_lookup_slot(tbl, args->csa_slotid); in nfs4_callback_sequence()
532 res->csr_highestslotid = tbl->server_highest_slotid; in nfs4_callback_sequence()
533 res->csr_target_highestslotid = tbl->target_highest_slotid; in nfs4_callback_sequence()
542 cps->slot = slot; in nfs4_callback_sequence()
545 if (args->csa_cachethis != 0) { in nfs4_callback_sequence()
555 if (referring_call_exists(clp, args->csa_nrclists, args->csa_rclists, in nfs4_callback_sequence()
556 &tbl->slot_tbl_lock) < 0) { in nfs4_callback_sequence()
566 slot->seq_nr = args->csa_sequenceid; in nfs4_callback_sequence()
568 spin_unlock(&tbl->slot_tbl_lock); in nfs4_callback_sequence()
571 cps->clp = clp; /* put in nfs4_callback_compound */ in nfs4_callback_sequence()
572 for (i = 0; i < args->csa_nrclists; i++) in nfs4_callback_sequence()
573 kfree(args->csa_rclists[i].rcl_refcalls); in nfs4_callback_sequence()
574 kfree(args->csa_rclists); in nfs4_callback_sequence()
577 cps->drc_status = status; in nfs4_callback_sequence()
580 res->csr_status = status; in nfs4_callback_sequence()
601 if (!cps->clp) /* set in cb_sequence */ in nfs4_callback_recallany()
605 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_recallany()
608 if (!validate_bitmap_values(args->craa_type_mask)) in nfs4_callback_recallany()
612 if (args->craa_type_mask & BIT(RCA4_TYPE_MASK_RDATA_DLG)) in nfs4_callback_recallany()
614 if (args->craa_type_mask & BIT(RCA4_TYPE_MASK_WDATA_DLG)) in nfs4_callback_recallany()
617 nfs_expire_unused_delegation_types(cps->clp, flags); in nfs4_callback_recallany()
619 if (args->craa_type_mask & BIT(RCA4_TYPE_MASK_FILE_LAYOUT)) in nfs4_callback_recallany()
620 pnfs_recall_all_layouts(cps->clp); in nfs4_callback_recallany()
622 if (args->craa_type_mask & BIT(PNFS_FF_RCA4_TYPE_MASK_READ)) { in nfs4_callback_recallany()
623 set_bit(NFS4CLNT_RECALL_ANY_LAYOUT_READ, &cps->clp->cl_state); in nfs4_callback_recallany()
626 if (args->craa_type_mask & BIT(PNFS_FF_RCA4_TYPE_MASK_RW)) { in nfs4_callback_recallany()
627 set_bit(NFS4CLNT_RECALL_ANY_LAYOUT_RW, &cps->clp->cl_state); in nfs4_callback_recallany()
631 nfs4_schedule_state_manager(cps->clp); in nfs4_callback_recallany()
638 /* Reduce the fore channel's max_slots to the target value */
647 if (!cps->clp) /* set in cb_sequence */ in nfs4_callback_recallslot()
651 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR), in nfs4_callback_recallslot()
652 args->crsa_target_highest_slotid); in nfs4_callback_recallslot()
654 fc_tbl = &cps->clp->cl_session->fc_slot_table; in nfs4_callback_recallslot()
658 nfs41_set_target_slotid(fc_tbl, args->crsa_target_highest_slotid); in nfs4_callback_recallslot()
659 nfs41_notify_server(cps->clp); in nfs4_callback_recallslot()
670 if (!cps->clp) /* set in cb_sequence */ in nfs4_callback_notify_lock()
674 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_notify_lock()
677 if (args->cbnl_valid) in nfs4_callback_notify_lock()
678 __wake_up(&cps->clp->cl_lock_waitq, TASK_NORMAL, 0, args); in nfs4_callback_notify_lock()
687 cp_state->count = args->wr_count; in nfs4_copy_cb_args()
688 cp_state->error = args->error; in nfs4_copy_cb_args()
689 if (!args->error) { in nfs4_copy_cb_args()
690 cp_state->verf.committed = args->wr_writeverf.committed; in nfs4_copy_cb_args()
691 memcpy(&cp_state->verf.verifier.data[0], in nfs4_copy_cb_args()
692 &args->wr_writeverf.verifier.data[0], in nfs4_copy_cb_args()
709 spin_lock(&cps->clp->cl_lock); in nfs4_callback_offload()
711 list_for_each_entry_rcu(server, &cps->clp->cl_superblocks, in nfs4_callback_offload()
713 list_for_each_entry(tmp_copy, &server->ss_copies, copies) { in nfs4_callback_offload()
714 if (memcmp(args->coa_stateid.other, in nfs4_callback_offload()
715 tmp_copy->stateid.other, in nfs4_callback_offload()
716 sizeof(args->coa_stateid.other))) in nfs4_callback_offload()
719 complete(&tmp_copy->completion); in nfs4_callback_offload()
727 memcpy(&copy->stateid, &args->coa_stateid, NFS4_STATEID_SIZE); in nfs4_callback_offload()
729 list_add_tail(&copy->copies, &cps->clp->pending_cb_stateids); in nfs4_callback_offload()
732 spin_unlock(&cps->clp->cl_lock); in nfs4_callback_offload()
734 trace_nfs4_cb_offload(&args->coa_fh, &args->coa_stateid, in nfs4_callback_offload()
735 args->wr_count, args->error, in nfs4_callback_offload()
736 args->wr_writeverf.committed); in nfs4_callback_offload()