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()
294 if (NFS_SERVER(ino)->pnfs_curr_ld->return_range) { in initiate_file_draining()
295 NFS_SERVER(ino)->pnfs_curr_ld->return_range(lo, in initiate_file_draining()
296 &args->cbl_range); in initiate_file_draining()
300 spin_unlock(&ino->i_lock); in initiate_file_draining()
308 trace_nfs4_cb_layoutrecall_file(clp, &args->cbl_fh, ino, in initiate_file_draining()
309 &args->cbl_stateid, -rv); in initiate_file_draining()
318 if (args->cbl_recall_type == RETURN_FSID) in initiate_bulk_draining()
319 stat = pnfs_destroy_layouts_byfsid(clp, &args->cbl_fsid, true); in initiate_bulk_draining()
330 if (args->cbl_recall_type == RETURN_FILE) in do_callback_layoutrecall()
341 if (cps->clp) in nfs4_callback_layoutrecall()
342 res = do_callback_layoutrecall(cps->clp, args); in nfs4_callback_layoutrecall()
363 struct nfs_client *clp = 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()
375 server->pnfs_curr_ld->id != dev->cbd_layout_type) { in nfs4_callback_devicenotify()
377 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) in nfs4_callback_devicenotify()
378 if (server->pnfs_curr_ld && in nfs4_callback_devicenotify()
379 server->pnfs_curr_ld->id == dev->cbd_layout_type) { in nfs4_callback_devicenotify()
388 nfs4_delete_deviceid(server->pnfs_curr_ld, clp, &dev->cbd_dev_id); in nfs4_callback_devicenotify()
392 kfree(args->devs); in nfs4_callback_devicenotify()
402 * back channel ca_maxresponsesize_cached to zero. This is OK for now
416 if (args->csa_slotid > tbl->server_highest_slotid) in validate_seqid()
420 if (args->csa_sequenceid == slot->seq_nr) { in validate_seqid()
422 if (nfs4_test_locked_slot(tbl, slot->slot_nr)) in validate_seqid()
427 if (args->csa_cachethis == 0) in validate_seqid()
438 if (args->csa_sequenceid != slot->seq_nr + 1) in validate_seqid()
449 * For each referring call triple, check the session's slot table for
471 session = clp->cl_session; in referring_call_exists()
472 tbl = &session->fc_slot_table; in referring_call_exists()
476 if (memcmp(session->sess_id.data, in referring_call_exists()
477 rclist->rcl_sessionid.data, in referring_call_exists()
481 for (j = 0; j < rclist->rcl_nrefcalls; j++) { in referring_call_exists()
482 ref = &rclist->rcl_refcalls[j]; in referring_call_exists()
484 status = nfs4_slot_wait_on_seqid(tbl, ref->rc_slotid, in referring_call_exists()
485 ref->rc_sequenceid, HZ >> 1) < 0; in referring_call_exists()
507 clp = nfs4_find_client_sessionid(cps->net, args->csa_addr, in nfs4_callback_sequence()
508 &args->csa_sessionid, cps->minorversion); in nfs4_callback_sequence()
512 if (!(clp->cl_session->flags & SESSION4_BACK_CHAN)) in nfs4_callback_sequence()
515 tbl = &clp->cl_session->bc_slot_table; in nfs4_callback_sequence()
518 memcpy(&res->csr_sessionid, &args->csa_sessionid, in nfs4_callback_sequence()
519 sizeof(res->csr_sessionid)); in nfs4_callback_sequence()
520 res->csr_sequenceid = args->csa_sequenceid; in nfs4_callback_sequence()
521 res->csr_slotid = args->csa_slotid; in nfs4_callback_sequence()
523 spin_lock(&tbl->slot_tbl_lock); in nfs4_callback_sequence()
525 if (test_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state)) { in nfs4_callback_sequence()
530 if (test_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state)) in nfs4_callback_sequence()
536 slot = nfs4_lookup_slot(tbl, args->csa_slotid); in nfs4_callback_sequence()
540 res->csr_highestslotid = tbl->server_highest_slotid; in nfs4_callback_sequence()
541 res->csr_target_highestslotid = tbl->target_highest_slotid; in nfs4_callback_sequence()
550 cps->slot = slot; in nfs4_callback_sequence()
553 if (args->csa_cachethis != 0) { in nfs4_callback_sequence()
563 if (referring_call_exists(clp, args->csa_nrclists, args->csa_rclists, in nfs4_callback_sequence()
564 &tbl->slot_tbl_lock) < 0) { in nfs4_callback_sequence()
574 slot->seq_nr = args->csa_sequenceid; in nfs4_callback_sequence()
576 spin_unlock(&tbl->slot_tbl_lock); in nfs4_callback_sequence()
579 cps->clp = clp; /* put in nfs4_callback_compound */ in nfs4_callback_sequence()
580 for (i = 0; i < args->csa_nrclists; i++) in nfs4_callback_sequence()
581 kfree(args->csa_rclists[i].rcl_refcalls); in nfs4_callback_sequence()
582 kfree(args->csa_rclists); in nfs4_callback_sequence()
585 cps->drc_status = status; in nfs4_callback_sequence()
588 res->csr_status = status; in nfs4_callback_sequence()
609 if (!cps->clp) /* set in cb_sequence */ in nfs4_callback_recallany()
613 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_recallany()
616 if (!validate_bitmap_values(args->craa_type_mask)) in nfs4_callback_recallany()
620 if (args->craa_type_mask & BIT(RCA4_TYPE_MASK_RDATA_DLG)) in nfs4_callback_recallany()
622 if (args->craa_type_mask & BIT(RCA4_TYPE_MASK_WDATA_DLG)) in nfs4_callback_recallany()
625 nfs_expire_unused_delegation_types(cps->clp, flags); in nfs4_callback_recallany()
627 if (args->craa_type_mask & BIT(RCA4_TYPE_MASK_FILE_LAYOUT)) in nfs4_callback_recallany()
628 pnfs_recall_all_layouts(cps->clp); in nfs4_callback_recallany()
630 if (args->craa_type_mask & BIT(PNFS_FF_RCA4_TYPE_MASK_READ)) { in nfs4_callback_recallany()
631 set_bit(NFS4CLNT_RECALL_ANY_LAYOUT_READ, &cps->clp->cl_state); in nfs4_callback_recallany()
634 if (args->craa_type_mask & BIT(PNFS_FF_RCA4_TYPE_MASK_RW)) { in nfs4_callback_recallany()
635 set_bit(NFS4CLNT_RECALL_ANY_LAYOUT_RW, &cps->clp->cl_state); in nfs4_callback_recallany()
639 nfs4_schedule_state_manager(cps->clp); in nfs4_callback_recallany()
646 /* Reduce the fore channel's max_slots to the target value */
655 if (!cps->clp) /* set in cb_sequence */ in nfs4_callback_recallslot()
659 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR), in nfs4_callback_recallslot()
660 args->crsa_target_highest_slotid); in nfs4_callback_recallslot()
662 fc_tbl = &cps->clp->cl_session->fc_slot_table; in nfs4_callback_recallslot()
666 nfs41_set_target_slotid(fc_tbl, args->crsa_target_highest_slotid); in nfs4_callback_recallslot()
667 nfs41_notify_server(cps->clp); in nfs4_callback_recallslot()
678 if (!cps->clp) /* set in cb_sequence */ in nfs4_callback_notify_lock()
682 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_notify_lock()
685 if (args->cbnl_valid) in nfs4_callback_notify_lock()
686 __wake_up(&cps->clp->cl_lock_waitq, TASK_NORMAL, 0, args); in nfs4_callback_notify_lock()
695 cp_state->count = args->wr_count; in nfs4_copy_cb_args()
696 cp_state->error = args->error; in nfs4_copy_cb_args()
697 if (!args->error) { in nfs4_copy_cb_args()
698 cp_state->verf.committed = args->wr_writeverf.committed; in nfs4_copy_cb_args()
699 memcpy(&cp_state->verf.verifier.data[0], in nfs4_copy_cb_args()
700 &args->wr_writeverf.verifier.data[0], in nfs4_copy_cb_args()
717 spin_lock(&cps->clp->cl_lock); in nfs4_callback_offload()
719 list_for_each_entry_rcu(server, &cps->clp->cl_superblocks, in nfs4_callback_offload()
721 list_for_each_entry(tmp_copy, &server->ss_copies, copies) { in nfs4_callback_offload()
722 if (memcmp(args->coa_stateid.other, in nfs4_callback_offload()
723 tmp_copy->stateid.other, in nfs4_callback_offload()
724 sizeof(args->coa_stateid.other))) in nfs4_callback_offload()
727 complete(&tmp_copy->completion); in nfs4_callback_offload()
735 memcpy(©->stateid, &args->coa_stateid, NFS4_STATEID_SIZE); in nfs4_callback_offload()
737 list_add_tail(©->copies, &cps->clp->pending_cb_stateids); in nfs4_callback_offload()
740 spin_unlock(&cps->clp->cl_lock); in nfs4_callback_offload()