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 memset(res->bitmap, 0, sizeof(res->bitmap)); 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->atime = inode_get_atime(inode); in nfs4_callback_getattr()
63 res->ctime = inode_get_ctime(inode); in nfs4_callback_getattr()
64 res->mtime = inode_get_mtime(inode); in nfs4_callback_getattr()
65 res->bitmap[0] = (FATTR4_WORD0_CHANGE | FATTR4_WORD0_SIZE) & in nfs4_callback_getattr()
66 args->bitmap[0]; in nfs4_callback_getattr()
67 res->bitmap[1] = (FATTR4_WORD1_TIME_ACCESS | in nfs4_callback_getattr()
69 FATTR4_WORD1_TIME_MODIFY) & args->bitmap[1]; in nfs4_callback_getattr()
70 res->bitmap[2] = (FATTR4_WORD2_TIME_DELEG_ACCESS | in nfs4_callback_getattr()
71 FATTR4_WORD2_TIME_DELEG_MODIFY) & args->bitmap[2]; in nfs4_callback_getattr()
72 res->status = 0; in nfs4_callback_getattr()
75 trace_nfs4_cb_getattr(cps->clp, &args->fh, inode, -ntohl(res->status)); in nfs4_callback_getattr()
78 dprintk("%s: exit with status = %d\n", __func__, ntohl(res->status)); in nfs4_callback_getattr()
79 return res->status; in nfs4_callback_getattr()
90 if (!cps->clp) /* Always set for v4.0. Set in cb_sequence for v4.1 */ in nfs4_callback_recall()
94 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_recall()
97 inode = nfs_delegation_find_inode(cps->clp, &args->fh); in nfs4_callback_recall()
99 if (inode == ERR_PTR(-EAGAIN)) in nfs4_callback_recall()
101 trace_nfs4_cb_recall(cps->clp, &args->fh, NULL, in nfs4_callback_recall()
102 &args->stateid, -ntohl(res)); in nfs4_callback_recall()
106 switch (nfs_async_inode_return_delegation(inode, &args->stateid)) { in nfs4_callback_recall()
110 case -ENOENT: in nfs4_callback_recall()
116 trace_nfs4_cb_recall(cps->clp, &args->fh, inode, in nfs4_callback_recall()
117 &args->stateid, -ntohl(res)); in nfs4_callback_recall()
140 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs_layout_find_inode_by_stateid()
141 list_for_each_entry_rcu(lo, &server->layouts, plh_layouts) { in nfs_layout_find_inode_by_stateid()
144 if (!nfs4_stateid_match_other(stateid, &lo->plh_stateid)) in nfs_layout_find_inode_by_stateid()
146 if (nfs_sb_active(server->super)) in nfs_layout_find_inode_by_stateid()
147 inode = igrab(lo->plh_inode); in nfs_layout_find_inode_by_stateid()
149 inode = ERR_PTR(-EAGAIN); in nfs_layout_find_inode_by_stateid()
153 nfs_sb_deactive(server->super); in nfs_layout_find_inode_by_stateid()
154 return ERR_PTR(-EAGAIN); in nfs_layout_find_inode_by_stateid()
158 return ERR_PTR(-ENOENT); in nfs_layout_find_inode_by_stateid()
176 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs_layout_find_inode_by_fh()
177 list_for_each_entry_rcu(lo, &server->layouts, plh_layouts) { in nfs_layout_find_inode_by_fh()
178 nfsi = NFS_I(lo->plh_inode); in nfs_layout_find_inode_by_fh()
179 if (nfs_compare_fh(fh, &nfsi->fh)) in nfs_layout_find_inode_by_fh()
181 if (nfsi->layout != lo) in nfs_layout_find_inode_by_fh()
183 if (nfs_sb_active(server->super)) in nfs_layout_find_inode_by_fh()
184 inode = igrab(lo->plh_inode); in nfs_layout_find_inode_by_fh()
186 inode = ERR_PTR(-EAGAIN); in nfs_layout_find_inode_by_fh()
190 nfs_sb_deactive(server->super); in nfs_layout_find_inode_by_fh()
191 return ERR_PTR(-EAGAIN); in nfs_layout_find_inode_by_fh()
195 return ERR_PTR(-ENOENT); in nfs_layout_find_inode_by_fh()
205 if (inode == ERR_PTR(-ENOENT)) in nfs_layout_find_inode()
224 if (!nfs4_stateid_match_other(&lo->plh_stateid, new)) in pnfs_check_callback_stateid()
227 newseq = be32_to_cpu(new->seqid); in pnfs_check_callback_stateid()
229 if (test_bit(NFS_LAYOUT_RETURN, &lo->plh_flags)) in pnfs_check_callback_stateid()
238 oldseq = be32_to_cpu(lo->plh_stateid.seqid); in pnfs_check_callback_stateid()
239 if (newseq > oldseq + 1 && !cps->referring_calls) in pnfs_check_callback_stateid()
258 ino = nfs_layout_find_inode(clp, &args->cbl_fh, &args->cbl_stateid); in initiate_file_draining()
260 if (ino == ERR_PTR(-EAGAIN)) in initiate_file_draining()
268 spin_lock(&ino->i_lock); in initiate_file_draining()
269 lo = NFS_I(ino)->layout; in initiate_file_draining()
271 spin_unlock(&ino->i_lock); in initiate_file_draining()
275 rv = pnfs_check_callback_stateid(lo, &args->cbl_stateid, cps); in initiate_file_draining()
282 if (test_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags)) { in initiate_file_draining()
287 pnfs_set_layout_stateid(lo, &args->cbl_stateid, NULL, true); in initiate_file_draining()
289 &args->cbl_range, in initiate_file_draining()
290 be32_to_cpu(args->cbl_stateid.seqid))) { in initiate_file_draining()
292 case -EBUSY: in initiate_file_draining()
296 case -ENOENT: in initiate_file_draining()
297 set_bit(NFS_LAYOUT_DRAIN, &lo->plh_flags); in initiate_file_draining()
301 if (NFS_SERVER(ino)->pnfs_curr_ld->return_range) { in initiate_file_draining()
302 NFS_SERVER(ino)->pnfs_curr_ld->return_range(lo, in initiate_file_draining()
303 &args->cbl_range); in initiate_file_draining()
307 spin_unlock(&ino->i_lock); in initiate_file_draining()
315 trace_nfs4_cb_layoutrecall_file(clp, &args->cbl_fh, ino, in initiate_file_draining()
316 &args->cbl_stateid, -rv); in initiate_file_draining()
325 if (args->cbl_recall_type == RETURN_FSID) in initiate_bulk_draining()
326 stat = pnfs_layout_destroy_byfsid(clp, &args->cbl_fsid, in initiate_bulk_draining()
339 if (args->cbl_recall_type == RETURN_FILE) in do_callback_layoutrecall()
350 if (cps->clp) in nfs4_callback_layoutrecall()
351 res = do_callback_layoutrecall(cps->clp, args, cps); in nfs4_callback_layoutrecall()
375 if (!cps->clp) { in nfs4_callback_devicenotify()
380 for (i = 0; i < args->ndevs; i++) { in nfs4_callback_devicenotify()
381 struct cb_devicenotifyitem *dev = &args->devs[i]; in nfs4_callback_devicenotify()
383 if (!ld || ld->id != dev->cbd_layout_type) { in nfs4_callback_devicenotify()
385 ld = pnfs_find_layoutdriver(dev->cbd_layout_type); in nfs4_callback_devicenotify()
389 nfs4_delete_deviceid(ld, cps->clp, &dev->cbd_dev_id); in nfs4_callback_devicenotify()
393 kfree(args->devs); in nfs4_callback_devicenotify()
403 * back channel ca_maxresponsesize_cached to zero. This is OK for now
417 if (args->csa_slotid > tbl->server_highest_slotid) in validate_seqid()
421 if (args->csa_sequenceid == slot->seq_nr) { in validate_seqid()
423 if (nfs4_test_locked_slot(tbl, slot->slot_nr)) in validate_seqid()
428 if (args->csa_cachethis == 0) in validate_seqid()
439 if (args->csa_sequenceid != slot->seq_nr + 1) in validate_seqid()
450 * For each referring call triple, check the session's slot table for
473 session = clp->cl_session; in referring_call_exists()
474 tbl = &session->fc_slot_table; in referring_call_exists()
478 if (memcmp(session->sess_id.data, in referring_call_exists()
479 rclist->rcl_sessionid.data, in referring_call_exists()
483 for (j = 0; j < rclist->rcl_nrefcalls; j++) { in referring_call_exists()
484 ref = &rclist->rcl_refcalls[j]; in referring_call_exists()
486 status = nfs4_slot_wait_on_seqid(tbl, ref->rc_slotid, in referring_call_exists()
487 ref->rc_sequenceid, HZ >> 1) < 0; in referring_call_exists()
511 clp = nfs4_find_client_sessionid(cps->net, args->csa_addr, in nfs4_callback_sequence()
512 &args->csa_sessionid, cps->minorversion); in nfs4_callback_sequence()
516 if (!(clp->cl_session->flags & SESSION4_BACK_CHAN)) in nfs4_callback_sequence()
519 tbl = &clp->cl_session->bc_slot_table; in nfs4_callback_sequence()
522 memcpy(&res->csr_sessionid, &args->csa_sessionid, in nfs4_callback_sequence()
523 sizeof(res->csr_sessionid)); in nfs4_callback_sequence()
524 res->csr_sequenceid = args->csa_sequenceid; in nfs4_callback_sequence()
525 res->csr_slotid = args->csa_slotid; in nfs4_callback_sequence()
527 spin_lock(&tbl->slot_tbl_lock); in nfs4_callback_sequence()
529 if (test_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state)) { in nfs4_callback_sequence()
534 if (test_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state)) in nfs4_callback_sequence()
540 slot = nfs4_lookup_slot(tbl, args->csa_slotid); in nfs4_callback_sequence()
544 res->csr_highestslotid = tbl->server_highest_slotid; in nfs4_callback_sequence()
545 res->csr_target_highestslotid = tbl->target_highest_slotid; in nfs4_callback_sequence()
554 cps->slot = slot; in nfs4_callback_sequence()
557 if (args->csa_cachethis != 0) { in nfs4_callback_sequence()
567 ret = referring_call_exists(clp, args->csa_nrclists, args->csa_rclists, in nfs4_callback_sequence()
568 &tbl->slot_tbl_lock); in nfs4_callback_sequence()
573 cps->referring_calls = ret; in nfs4_callback_sequence()
580 slot->seq_nr = args->csa_sequenceid; in nfs4_callback_sequence()
582 spin_unlock(&tbl->slot_tbl_lock); in nfs4_callback_sequence()
585 cps->clp = clp; /* put in nfs4_callback_compound */ in nfs4_callback_sequence()
586 for (i = 0; i < args->csa_nrclists; i++) in nfs4_callback_sequence()
587 kfree(args->csa_rclists[i].rcl_refcalls); in nfs4_callback_sequence()
588 kfree(args->csa_rclists); in nfs4_callback_sequence()
591 cps->drc_status = status; in nfs4_callback_sequence()
594 res->csr_status = status; in nfs4_callback_sequence()
615 if (!cps->clp) /* set in cb_sequence */ in nfs4_callback_recallany()
619 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_recallany()
622 if (!validate_bitmap_values(args->craa_type_mask)) in nfs4_callback_recallany()
626 if (args->craa_type_mask & BIT(RCA4_TYPE_MASK_RDATA_DLG)) in nfs4_callback_recallany()
628 if (args->craa_type_mask & BIT(RCA4_TYPE_MASK_WDATA_DLG)) in nfs4_callback_recallany()
631 nfs_expire_unused_delegation_types(cps->clp, flags); in nfs4_callback_recallany()
633 if (args->craa_type_mask & BIT(RCA4_TYPE_MASK_FILE_LAYOUT)) in nfs4_callback_recallany()
634 pnfs_recall_all_layouts(cps->clp, cps); in nfs4_callback_recallany()
636 if (args->craa_type_mask & BIT(PNFS_FF_RCA4_TYPE_MASK_READ)) { in nfs4_callback_recallany()
637 set_bit(NFS4CLNT_RECALL_ANY_LAYOUT_READ, &cps->clp->cl_state); in nfs4_callback_recallany()
640 if (args->craa_type_mask & BIT(PNFS_FF_RCA4_TYPE_MASK_RW)) { in nfs4_callback_recallany()
641 set_bit(NFS4CLNT_RECALL_ANY_LAYOUT_RW, &cps->clp->cl_state); in nfs4_callback_recallany()
645 nfs4_schedule_state_manager(cps->clp); in nfs4_callback_recallany()
652 /* Reduce the fore channel's max_slots to the target value */
661 if (!cps->clp) /* set in cb_sequence */ in nfs4_callback_recallslot()
665 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR), in nfs4_callback_recallslot()
666 args->crsa_target_highest_slotid); in nfs4_callback_recallslot()
668 fc_tbl = &cps->clp->cl_session->fc_slot_table; in nfs4_callback_recallslot()
672 nfs41_set_target_slotid(fc_tbl, args->crsa_target_highest_slotid); in nfs4_callback_recallslot()
673 nfs41_notify_server(cps->clp); in nfs4_callback_recallslot()
684 if (!cps->clp) /* set in cb_sequence */ in nfs4_callback_notify_lock()
688 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_callback_notify_lock()
691 if (args->cbnl_valid) in nfs4_callback_notify_lock()
692 __wake_up(&cps->clp->cl_lock_waitq, TASK_NORMAL, 0, args); in nfs4_callback_notify_lock()
701 cp_state->count = args->wr_count; in nfs4_copy_cb_args()
702 cp_state->error = args->error; in nfs4_copy_cb_args()
703 if (!args->error) { in nfs4_copy_cb_args()
704 cp_state->verf.committed = args->wr_writeverf.committed; in nfs4_copy_cb_args()
705 memcpy(&cp_state->verf.verifier.data[0], in nfs4_copy_cb_args()
706 &args->wr_writeverf.verifier.data[0], in nfs4_copy_cb_args()
723 spin_lock(&cps->clp->cl_lock); in nfs4_callback_offload()
725 list_for_each_entry_rcu(server, &cps->clp->cl_superblocks, in nfs4_callback_offload()
727 list_for_each_entry(tmp_copy, &server->ss_copies, copies) { in nfs4_callback_offload()
728 if (memcmp(args->coa_stateid.other, in nfs4_callback_offload()
729 tmp_copy->stateid.other, in nfs4_callback_offload()
730 sizeof(args->coa_stateid.other))) in nfs4_callback_offload()
733 complete(&tmp_copy->completion); in nfs4_callback_offload()
741 memcpy(&copy->stateid, &args->coa_stateid, NFS4_STATEID_SIZE); in nfs4_callback_offload()
743 list_add_tail(&copy->copies, &cps->clp->pending_cb_stateids); in nfs4_callback_offload()
746 spin_unlock(&cps->clp->cl_lock); in nfs4_callback_offload()
748 trace_nfs4_cb_offload(&args->coa_fh, &args->coa_stateid, in nfs4_callback_offload()
749 args->wr_count, args->error, in nfs4_callback_offload()
750 args->wr_writeverf.committed); in nfs4_callback_offload()