Lines Matching +full:triple +full:- +full:channel
1 // SPDX-License-Identifier: GPL-2.0
31 res->status = htonl(NFS4ERR_OP_NOT_IN_SESSION); in nfs4_callback_getattr()
32 if (!cps->clp) /* Always set for v4.0. Set in cb_sequence for v4.1 */ in nfs4_callback_getattr()
35 res->bitmap[0] = res->bitmap[1] = 0; in nfs4_callback_getattr()
36 res->status = htonl(NFS4ERR_BADHANDLE); in nfs4_callback_getattr()
39 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_getattr()
41 inode = nfs_delegation_find_inode(cps->clp, &args->fh); in nfs4_callback_getattr()
43 if (inode == ERR_PTR(-EAGAIN)) in nfs4_callback_getattr()
44 res->status = htonl(NFS4ERR_DELAY); in nfs4_callback_getattr()
45 trace_nfs4_cb_getattr(cps->clp, &args->fh, NULL, in nfs4_callback_getattr()
46 -ntohl(res->status)); in nfs4_callback_getattr()
51 if (delegation == NULL || (delegation->type & FMODE_WRITE) == 0) in nfs4_callback_getattr()
53 res->size = i_size_read(inode); in nfs4_callback_getattr()
54 res->change_attr = delegation->change_attr; in nfs4_callback_getattr()
56 res->change_attr++; in nfs4_callback_getattr()
57 res->ctime = inode->i_ctime; in nfs4_callback_getattr()
58 res->mtime = inode->i_mtime; in nfs4_callback_getattr()
59 res->bitmap[0] = (FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE) & in nfs4_callback_getattr()
60 args->bitmap[0]; in nfs4_callback_getattr()
61 res->bitmap[1] = (FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY) & in nfs4_callback_getattr()
62 args->bitmap[1]; in nfs4_callback_getattr()
63 res->status = 0; in nfs4_callback_getattr()
66 trace_nfs4_cb_getattr(cps->clp, &args->fh, inode, -ntohl(res->status)); in nfs4_callback_getattr()
69 dprintk("%s: exit with status = %d\n", __func__, ntohl(res->status)); in nfs4_callback_getattr()
70 return res->status; in nfs4_callback_getattr()
81 if (!cps->clp) /* Always set for v4.0. Set in cb_sequence for v4.1 */ in nfs4_callback_recall()
85 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_recall()
88 inode = nfs_delegation_find_inode(cps->clp, &args->fh); in nfs4_callback_recall()
90 if (inode == ERR_PTR(-EAGAIN)) in nfs4_callback_recall()
92 trace_nfs4_cb_recall(cps->clp, &args->fh, NULL, in nfs4_callback_recall()
93 &args->stateid, -ntohl(res)); in nfs4_callback_recall()
97 switch (nfs_async_inode_return_delegation(inode, &args->stateid)) { in nfs4_callback_recall()
101 case -ENOENT: in nfs4_callback_recall()
107 trace_nfs4_cb_recall(cps->clp, &args->fh, inode, in nfs4_callback_recall()
108 &args->stateid, -ntohl(res)); in nfs4_callback_recall()
131 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs_layout_find_inode_by_stateid()
132 list_for_each_entry_rcu(lo, &server->layouts, plh_layouts) { in nfs_layout_find_inode_by_stateid()
135 if (!nfs4_stateid_match_other(stateid, &lo->plh_stateid)) in nfs_layout_find_inode_by_stateid()
137 if (nfs_sb_active(server->super)) in nfs_layout_find_inode_by_stateid()
138 inode = igrab(lo->plh_inode); in nfs_layout_find_inode_by_stateid()
140 inode = ERR_PTR(-EAGAIN); in nfs_layout_find_inode_by_stateid()
144 nfs_sb_deactive(server->super); in nfs_layout_find_inode_by_stateid()
145 return ERR_PTR(-EAGAIN); in nfs_layout_find_inode_by_stateid()
149 return ERR_PTR(-ENOENT); in nfs_layout_find_inode_by_stateid()
167 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs_layout_find_inode_by_fh()
168 list_for_each_entry_rcu(lo, &server->layouts, plh_layouts) { in nfs_layout_find_inode_by_fh()
169 nfsi = NFS_I(lo->plh_inode); in nfs_layout_find_inode_by_fh()
170 if (nfs_compare_fh(fh, &nfsi->fh)) in nfs_layout_find_inode_by_fh()
172 if (nfsi->layout != lo) in nfs_layout_find_inode_by_fh()
174 if (nfs_sb_active(server->super)) in nfs_layout_find_inode_by_fh()
175 inode = igrab(lo->plh_inode); in nfs_layout_find_inode_by_fh()
177 inode = ERR_PTR(-EAGAIN); in nfs_layout_find_inode_by_fh()
181 nfs_sb_deactive(server->super); in nfs_layout_find_inode_by_fh()
182 return ERR_PTR(-EAGAIN); in nfs_layout_find_inode_by_fh()
186 return ERR_PTR(-ENOENT); in nfs_layout_find_inode_by_fh()
196 if (inode == ERR_PTR(-ENOENT)) in nfs_layout_find_inode()
214 if (!nfs4_stateid_match_other(&lo->plh_stateid, new)) in pnfs_check_callback_stateid()
217 newseq = be32_to_cpu(new->seqid); in pnfs_check_callback_stateid()
219 if (test_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags) && in pnfs_check_callback_stateid()
220 lo->plh_return_seq != 0) { in pnfs_check_callback_stateid()
221 if (newseq < lo->plh_return_seq) in pnfs_check_callback_stateid()
223 if (newseq > lo->plh_return_seq) in pnfs_check_callback_stateid()
229 oldseq = be32_to_cpu(lo->plh_stateid.seqid); in pnfs_check_callback_stateid()
247 ino = nfs_layout_find_inode(clp, &args->cbl_fh, &args->cbl_stateid); in initiate_file_draining()
249 if (ino == ERR_PTR(-EAGAIN)) in initiate_file_draining()
257 spin_lock(&ino->i_lock); in initiate_file_draining()
258 lo = NFS_I(ino)->layout; in initiate_file_draining()
260 spin_unlock(&ino->i_lock); in initiate_file_draining()
264 rv = pnfs_check_callback_stateid(lo, &args->cbl_stateid); in initiate_file_draining()
271 if (test_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags)) { in initiate_file_draining()
276 pnfs_set_layout_stateid(lo, &args->cbl_stateid, NULL, true); in initiate_file_draining()
278 &args->cbl_range, in initiate_file_draining()
279 be32_to_cpu(args->cbl_stateid.seqid))) { in initiate_file_draining()
281 case -EBUSY: in initiate_file_draining()
285 case -ENOENT: in initiate_file_draining()
289 if (NFS_SERVER(ino)->pnfs_curr_ld->return_range) { in initiate_file_draining()
290 NFS_SERVER(ino)->pnfs_curr_ld->return_range(lo, in initiate_file_draining()
291 &args->cbl_range); in initiate_file_draining()
295 spin_unlock(&ino->i_lock); in initiate_file_draining()
303 trace_nfs4_cb_layoutrecall_file(clp, &args->cbl_fh, ino, in initiate_file_draining()
304 &args->cbl_stateid, -rv); in initiate_file_draining()
313 if (args->cbl_recall_type == RETURN_FSID) in initiate_bulk_draining()
314 stat = pnfs_destroy_layouts_byfsid(clp, &args->cbl_fsid, true); in initiate_bulk_draining()
325 if (args->cbl_recall_type == RETURN_FILE) in do_callback_layoutrecall()
336 if (cps->clp) in nfs4_callback_layoutrecall()
337 res = do_callback_layoutrecall(cps->clp, args); in nfs4_callback_layoutrecall()
358 struct nfs_client *clp = cps->clp; in nfs4_callback_devicenotify()
366 for (i = 0; i < args->ndevs; i++) { in nfs4_callback_devicenotify()
367 struct cb_devicenotifyitem *dev = &args->devs[i]; in nfs4_callback_devicenotify()
370 server->pnfs_curr_ld->id != dev->cbd_layout_type) { in nfs4_callback_devicenotify()
372 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) in nfs4_callback_devicenotify()
373 if (server->pnfs_curr_ld && in nfs4_callback_devicenotify()
374 server->pnfs_curr_ld->id == dev->cbd_layout_type) { in nfs4_callback_devicenotify()
383 nfs4_delete_deviceid(server->pnfs_curr_ld, clp, &dev->cbd_dev_id); in nfs4_callback_devicenotify()
387 kfree(args->devs); in nfs4_callback_devicenotify()
397 * back channel ca_maxresponsesize_cached to zero. This is OK for now
411 if (args->csa_slotid > tbl->server_highest_slotid) in validate_seqid()
415 if (args->csa_sequenceid == slot->seq_nr) { in validate_seqid()
417 if (nfs4_test_locked_slot(tbl, slot->slot_nr)) in validate_seqid()
422 if (args->csa_cachethis == 0) in validate_seqid()
433 if (args->csa_sequenceid != slot->seq_nr + 1) in validate_seqid()
444 * For each referring call triple, check the session's slot table for
466 session = clp->cl_session; in referring_call_exists()
467 tbl = &session->fc_slot_table; in referring_call_exists()
471 if (memcmp(session->sess_id.data, in referring_call_exists()
472 rclist->rcl_sessionid.data, in referring_call_exists()
476 for (j = 0; j < rclist->rcl_nrefcalls; j++) { in referring_call_exists()
477 ref = &rclist->rcl_refcalls[j]; in referring_call_exists()
479 status = nfs4_slot_wait_on_seqid(tbl, ref->rc_slotid, in referring_call_exists()
480 ref->rc_sequenceid, HZ >> 1) < 0; in referring_call_exists()
502 clp = nfs4_find_client_sessionid(cps->net, args->csa_addr, in nfs4_callback_sequence()
503 &args->csa_sessionid, cps->minorversion); in nfs4_callback_sequence()
507 if (!(clp->cl_session->flags & SESSION4_BACK_CHAN)) in nfs4_callback_sequence()
510 tbl = &clp->cl_session->bc_slot_table; in nfs4_callback_sequence()
513 memcpy(&res->csr_sessionid, &args->csa_sessionid, in nfs4_callback_sequence()
514 sizeof(res->csr_sessionid)); in nfs4_callback_sequence()
515 res->csr_sequenceid = args->csa_sequenceid; in nfs4_callback_sequence()
516 res->csr_slotid = args->csa_slotid; in nfs4_callback_sequence()
518 spin_lock(&tbl->slot_tbl_lock); in nfs4_callback_sequence()
520 if (test_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state)) { in nfs4_callback_sequence()
525 if (test_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state)) in nfs4_callback_sequence()
531 slot = nfs4_lookup_slot(tbl, args->csa_slotid); in nfs4_callback_sequence()
535 res->csr_highestslotid = tbl->server_highest_slotid; in nfs4_callback_sequence()
536 res->csr_target_highestslotid = tbl->target_highest_slotid; in nfs4_callback_sequence()
545 cps->slot = slot; in nfs4_callback_sequence()
548 if (args->csa_cachethis != 0) { in nfs4_callback_sequence()
558 if (referring_call_exists(clp, args->csa_nrclists, args->csa_rclists, in nfs4_callback_sequence()
559 &tbl->slot_tbl_lock) < 0) { in nfs4_callback_sequence()
569 slot->seq_nr = args->csa_sequenceid; in nfs4_callback_sequence()
571 spin_unlock(&tbl->slot_tbl_lock); in nfs4_callback_sequence()
574 cps->clp = clp; /* put in nfs4_callback_compound */ in nfs4_callback_sequence()
575 for (i = 0; i < args->csa_nrclists; i++) in nfs4_callback_sequence()
576 kfree(args->csa_rclists[i].rcl_refcalls); in nfs4_callback_sequence()
577 kfree(args->csa_rclists); in nfs4_callback_sequence()
580 cps->drc_status = status; in nfs4_callback_sequence()
583 res->csr_status = status; in nfs4_callback_sequence()
604 if (!cps->clp) /* set in cb_sequence */ in nfs4_callback_recallany()
608 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_recallany()
611 if (!validate_bitmap_values(args->craa_type_mask)) in nfs4_callback_recallany()
615 if (args->craa_type_mask & BIT(RCA4_TYPE_MASK_RDATA_DLG)) in nfs4_callback_recallany()
617 if (args->craa_type_mask & BIT(RCA4_TYPE_MASK_WDATA_DLG)) in nfs4_callback_recallany()
620 nfs_expire_unused_delegation_types(cps->clp, flags); in nfs4_callback_recallany()
622 if (args->craa_type_mask & BIT(RCA4_TYPE_MASK_FILE_LAYOUT)) in nfs4_callback_recallany()
623 pnfs_recall_all_layouts(cps->clp); in nfs4_callback_recallany()
625 if (args->craa_type_mask & BIT(PNFS_FF_RCA4_TYPE_MASK_READ)) { in nfs4_callback_recallany()
626 set_bit(NFS4CLNT_RECALL_ANY_LAYOUT_READ, &cps->clp->cl_state); in nfs4_callback_recallany()
629 if (args->craa_type_mask & BIT(PNFS_FF_RCA4_TYPE_MASK_RW)) { in nfs4_callback_recallany()
630 set_bit(NFS4CLNT_RECALL_ANY_LAYOUT_RW, &cps->clp->cl_state); in nfs4_callback_recallany()
634 nfs4_schedule_state_manager(cps->clp); in nfs4_callback_recallany()
641 /* Reduce the fore channel's max_slots to the target value */
650 if (!cps->clp) /* set in cb_sequence */ in nfs4_callback_recallslot()
654 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR), in nfs4_callback_recallslot()
655 args->crsa_target_highest_slotid); in nfs4_callback_recallslot()
657 fc_tbl = &cps->clp->cl_session->fc_slot_table; in nfs4_callback_recallslot()
661 nfs41_set_target_slotid(fc_tbl, args->crsa_target_highest_slotid); in nfs4_callback_recallslot()
662 nfs41_notify_server(cps->clp); in nfs4_callback_recallslot()
673 if (!cps->clp) /* set in cb_sequence */ in nfs4_callback_notify_lock()
677 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_notify_lock()
680 if (args->cbnl_valid) in nfs4_callback_notify_lock()
681 __wake_up(&cps->clp->cl_lock_waitq, TASK_NORMAL, 0, args); in nfs4_callback_notify_lock()
690 cp_state->count = args->wr_count; in nfs4_copy_cb_args()
691 cp_state->error = args->error; in nfs4_copy_cb_args()
692 if (!args->error) { in nfs4_copy_cb_args()
693 cp_state->verf.committed = args->wr_writeverf.committed; in nfs4_copy_cb_args()
694 memcpy(&cp_state->verf.verifier.data[0], in nfs4_copy_cb_args()
695 &args->wr_writeverf.verifier.data[0], in nfs4_copy_cb_args()
712 spin_lock(&cps->clp->cl_lock); in nfs4_callback_offload()
714 list_for_each_entry_rcu(server, &cps->clp->cl_superblocks, in nfs4_callback_offload()
716 list_for_each_entry(tmp_copy, &server->ss_copies, copies) { in nfs4_callback_offload()
717 if (memcmp(args->coa_stateid.other, in nfs4_callback_offload()
718 tmp_copy->stateid.other, in nfs4_callback_offload()
719 sizeof(args->coa_stateid.other))) in nfs4_callback_offload()
722 complete(&tmp_copy->completion); in nfs4_callback_offload()
730 memcpy(©->stateid, &args->coa_stateid, NFS4_STATEID_SIZE); in nfs4_callback_offload()
732 list_add_tail(©->copies, &cps->clp->pending_cb_stateids); in nfs4_callback_offload()
735 spin_unlock(&cps->clp->cl_lock); in nfs4_callback_offload()