Lines Matching +full:poll +full:- +full:retry +full:- +full:count
1 // SPDX-License-Identifier: GPL-2.0
29 struct nfs_client *clp = (NFS_SERVER(file_inode(filep)))->nfs_client; in nfs42_set_netaddr()
33 naddr->netid_len = scnprintf(naddr->netid, in nfs42_set_netaddr()
34 sizeof(naddr->netid), "%s", in nfs42_set_netaddr()
35 rpc_peeraddr2str(clp->cl_rpcclient, in nfs42_set_netaddr()
37 naddr->addr_len = scnprintf(naddr->addr, in nfs42_set_netaddr()
38 sizeof(naddr->addr), in nfs42_set_netaddr()
40 rpc_peeraddr2str(clp->cl_rpcclient, in nfs42_set_netaddr()
63 msg->rpc_argp = &args; in _nfs42_proc_fallocate()
64 msg->rpc_resp = &res; in _nfs42_proc_fallocate()
66 status = nfs4_set_rw_stateid(&args.falloc_stateid, lock->open_context, in _nfs42_proc_fallocate()
69 if (status == -EAGAIN) in _nfs42_proc_fallocate()
70 status = -NFS4ERR_BAD_STATEID; in _nfs42_proc_fallocate()
74 nfs4_bitmask_set(bitmask, server->cache_consistency_bitmask, inode, in _nfs42_proc_fallocate()
79 return -ENOMEM; in _nfs42_proc_fallocate()
81 status = nfs4_call_sync(server->client, server, msg, in _nfs42_proc_fallocate()
85 spin_lock(&inode->i_lock); in _nfs42_proc_fallocate()
88 spin_unlock(&inode->i_lock); in _nfs42_proc_fallocate()
93 if (msg->rpc_proc == &nfs4_procedures[NFSPROC4_CLNT_ALLOCATE]) in _nfs42_proc_fallocate()
115 exception.state = lock->open_context->state; in nfs42_proc_fallocate()
123 if (err == -ENOTSUPP) { in nfs42_proc_fallocate()
124 err = -EOPNOTSUPP; in nfs42_proc_fallocate()
128 } while (exception.retry); in nfs42_proc_fallocate()
143 return -EOPNOTSUPP; in nfs42_proc_allocate()
148 if (err == -EOPNOTSUPP) in nfs42_proc_allocate()
149 NFS_SERVER(inode)->caps &= ~NFS_CAP_ALLOCATE; in nfs42_proc_allocate()
164 return -EOPNOTSUPP; in nfs42_proc_deallocate()
170 truncate_pagecache_range(inode, offset, (offset + len) -1); in nfs42_proc_deallocate()
171 if (err == -EOPNOTSUPP) in nfs42_proc_deallocate()
172 NFS_SERVER(inode)->caps &= ~NFS_CAP_DEALLOCATE; in nfs42_proc_deallocate()
182 spin_lock(&dst_server->nfs_client->cl_lock); in nfs4_copy_dequeue_callback()
183 list_del_init(©->copies); in nfs4_copy_dequeue_callback()
184 spin_unlock(&dst_server->nfs_client->cl_lock); in nfs4_copy_dequeue_callback()
186 spin_lock(&src_server->nfs_client->cl_lock); in nfs4_copy_dequeue_callback()
187 list_del_init(©->src_copies); in nfs4_copy_dequeue_callback()
188 spin_unlock(&src_server->nfs_client->cl_lock); in nfs4_copy_dequeue_callback()
203 struct nfs_client *clp = dst_server->nfs_client; in handle_async_copy()
210 return -ENOMEM; in handle_async_copy()
212 spin_lock(&dst_server->nfs_client->cl_lock); in handle_async_copy()
214 &dst_server->nfs_client->pending_cb_stateids, in handle_async_copy()
216 if (memcmp(&res->write_res.stateid, &iter->stateid, in handle_async_copy()
220 list_del(&iter->copies); in handle_async_copy()
224 spin_unlock(&dst_server->nfs_client->cl_lock); in handle_async_copy()
230 memcpy(©->stateid, &res->write_res.stateid, NFS4_STATEID_SIZE); in handle_async_copy()
231 init_completion(©->completion); in handle_async_copy()
232 copy->parent_dst_state = dst_ctx->state; in handle_async_copy()
233 copy->parent_src_state = src_ctx->state; in handle_async_copy()
235 list_add_tail(©->copies, &dst_server->ss_copies); in handle_async_copy()
236 spin_unlock(&dst_server->nfs_client->cl_lock); in handle_async_copy()
239 spin_lock(&src_server->nfs_client->cl_lock); in handle_async_copy()
240 list_add_tail(©->src_copies, &src_server->ss_src_copies); in handle_async_copy()
241 spin_unlock(&src_server->nfs_client->cl_lock); in handle_async_copy()
245 status = wait_for_completion_interruptible_timeout(©->completion, in handle_async_copy()
250 if (status == -ERESTARTSYS) { in handle_async_copy()
252 } else if (copy->flags || copy->error == NFS4ERR_PARTNER_NO_AUTH) { in handle_async_copy()
253 status = -EAGAIN; in handle_async_copy()
258 res->write_res.count = copy->count; in handle_async_copy()
260 memcpy(&res->write_res.verifier, ©->verf, sizeof(copy->verf)); in handle_async_copy()
261 status = -copy->error; in handle_async_copy()
267 nfs42_do_offload_cancel_async(dst, ©->stateid); in handle_async_copy()
273 if (timeout > (clp->cl_lease_time >> 1)) in handle_async_copy()
274 timeout = clp->cl_lease_time >> 1; in handle_async_copy()
275 status = nfs42_proc_offload_status(dst, ©->stateid, &copied); in handle_async_copy()
276 if (status == -EINPROGRESS) in handle_async_copy()
284 res->write_res.count = copied; in handle_async_copy()
286 case -EREMOTEIO: in handle_async_copy()
288 status = -EOPNOTSUPP; in handle_async_copy()
289 res->write_res.count = copied; in handle_async_copy()
291 case -EBADF: in handle_async_copy()
294 res->write_res.count = 0; in handle_async_copy()
295 status = -EOPNOTSUPP; in handle_async_copy()
297 case -EOPNOTSUPP: in handle_async_copy()
300 * spec-compliant. */ in handle_async_copy()
301 res->write_res.count = 0; in handle_async_copy()
310 int status = -ENOMEM; in process_copy_commit()
316 status = nfs4_proc_commit(dst, pos_dst, res->write_res.count, &cres); in process_copy_commit()
319 if (nfs_write_verifier_cmp(&res->write_res.verifier.verifier, in process_copy_commit()
320 &cres.verf->verifier)) { in process_copy_commit()
322 status = -EAGAIN; in process_copy_commit()
331 * nfs42_copy_dest_done - perform inode cache updates after clone/copy offload
344 loff_t end = newsize - 1; in nfs42_copy_dest_done()
346 WARN_ON_ONCE(invalidate_inode_pages2_range(inode->i_mapping, in nfs42_copy_dest_done()
349 spin_lock(&inode->i_lock); in nfs42_copy_dest_done()
356 spin_unlock(&inode->i_lock); in nfs42_copy_dest_done()
378 loff_t pos_src = args->src_pos; in _nfs42_proc_copy()
379 loff_t pos_dst = args->dst_pos; in _nfs42_proc_copy()
380 size_t count = args->count; in _nfs42_proc_copy() local
384 args->cp_src = nss; in _nfs42_proc_copy()
385 nfs4_stateid_copy(&args->src_stateid, cnr_stateid); in _nfs42_proc_copy()
387 status = nfs4_set_rw_stateid(&args->src_stateid, in _nfs42_proc_copy()
388 src_lock->open_context, src_lock, FMODE_READ); in _nfs42_proc_copy()
390 if (status == -EAGAIN) in _nfs42_proc_copy()
391 status = -NFS4ERR_BAD_STATEID; in _nfs42_proc_copy()
395 status = nfs_filemap_write_and_wait_range(src->f_mapping, in _nfs42_proc_copy()
396 pos_src, pos_src + (loff_t)count - 1); in _nfs42_proc_copy()
400 status = nfs4_set_rw_stateid(&args->dst_stateid, dst_lock->open_context, in _nfs42_proc_copy()
403 if (status == -EAGAIN) in _nfs42_proc_copy()
404 status = -NFS4ERR_BAD_STATEID; in _nfs42_proc_copy()
412 res->commit_res.verf = NULL; in _nfs42_proc_copy()
413 if (args->sync) { in _nfs42_proc_copy()
414 res->commit_res.verf = in _nfs42_proc_copy()
416 if (!res->commit_res.verf) in _nfs42_proc_copy()
417 return -ENOMEM; in _nfs42_proc_copy()
420 &src_lock->open_context->state->flags); in _nfs42_proc_copy()
422 &dst_lock->open_context->state->flags); in _nfs42_proc_copy()
424 status = nfs4_call_sync(dst_server->client, dst_server, &msg, in _nfs42_proc_copy()
425 &args->seq_args, &res->seq_res, 0); in _nfs42_proc_copy()
427 if (status == -ENOTSUPP) in _nfs42_proc_copy()
428 dst_server->caps &= ~NFS_CAP_COPY; in _nfs42_proc_copy()
432 if (args->sync && in _nfs42_proc_copy()
433 nfs_write_verifier_cmp(&res->write_res.verifier.verifier, in _nfs42_proc_copy()
434 &res->commit_res.verf->verifier)) { in _nfs42_proc_copy()
435 status = -EAGAIN; in _nfs42_proc_copy()
439 if (!res->synchronous) { in _nfs42_proc_copy()
441 dst, &args->src_stateid, restart); in _nfs42_proc_copy()
446 if ((!res->synchronous || !args->sync) && in _nfs42_proc_copy()
447 res->write_res.verifier.committed != NFS_FILE_SYNC) { in _nfs42_proc_copy()
453 nfs42_copy_dest_done(dst_inode, pos_dst, res->write_res.count); in _nfs42_proc_copy()
455 status = res->write_res.count; in _nfs42_proc_copy()
457 if (args->sync) in _nfs42_proc_copy()
458 kfree(res->commit_res.verf); in _nfs42_proc_copy()
463 struct file *dst, loff_t pos_dst, size_t count, in nfs42_proc_copy() argument
475 .count = count, in nfs42_proc_copy()
494 src_exception.state = src_lock->open_context->state; in nfs42_proc_copy()
502 dst_exception.state = dst_lock->open_context->state; in nfs42_proc_copy()
514 if ((err == -ENOTSUPP || in nfs42_proc_copy()
515 err == -NFS4ERR_OFFLOAD_DENIED) && in nfs42_proc_copy()
517 err = -EOPNOTSUPP; in nfs42_proc_copy()
519 } else if (err == -EAGAIN) { in nfs42_proc_copy()
521 dst_exception.retry = 1; in nfs42_proc_copy()
525 } else if (err == -NFS4ERR_OFFLOAD_NO_REQS && in nfs42_proc_copy()
528 dst_exception.retry = 1; in nfs42_proc_copy()
530 } else if ((err == -ESTALE || in nfs42_proc_copy()
531 err == -NFS4ERR_OFFLOAD_DENIED || in nfs42_proc_copy()
532 err == -ENOTSUPP) && in nfs42_proc_copy()
535 err = -EOPNOTSUPP; in nfs42_proc_copy()
543 } while (src_exception.retry || dst_exception.retry); in nfs42_proc_copy()
561 nfs4_setup_sequence(data->seq_server->nfs_client, in nfs42_offload_prepare()
562 &data->args.osa_seq_args, in nfs42_offload_prepare()
563 &data->res.osr_seq_res, task); in nfs42_offload_prepare()
570 trace_nfs4_offload_cancel(&data->args, task->tk_status); in nfs42_offload_cancel_done()
571 nfs41_sequence_done(task, &data->res.osr_seq_res); in nfs42_offload_cancel_done()
572 if (task->tk_status && in nfs42_offload_cancel_done()
573 nfs4_async_handle_error(task, data->seq_server, NULL, in nfs42_offload_cancel_done()
574 NULL) == -EAGAIN) in nfs42_offload_cancel_done()
598 .rpc_cred = ctx->cred, in nfs42_do_offload_cancel_async()
601 .rpc_client = dst_server->client, in nfs42_do_offload_cancel_async()
609 if (!(dst_server->caps & NFS_CAP_OFFLOAD_CANCEL)) in nfs42_do_offload_cancel_async()
610 return -EOPNOTSUPP; in nfs42_do_offload_cancel_async()
614 return -ENOMEM; in nfs42_do_offload_cancel_async()
616 data->seq_server = dst_server; in nfs42_do_offload_cancel_async()
617 data->args.osa_src_fh = NFS_FH(file_inode(dst)); in nfs42_do_offload_cancel_async()
618 memcpy(&data->args.osa_stateid, stateid, in nfs42_do_offload_cancel_async()
619 sizeof(data->args.osa_stateid)); in nfs42_do_offload_cancel_async()
620 msg.rpc_argp = &data->args; in nfs42_do_offload_cancel_async()
621 msg.rpc_resp = &data->res; in nfs42_do_offload_cancel_async()
623 nfs4_init_sequence(&data->args.osa_seq_args, &data->res.osr_seq_res, in nfs42_do_offload_cancel_async()
629 if (status == -ENOTSUPP) in nfs42_do_offload_cancel_async()
630 dst_server->caps &= ~NFS_CAP_OFFLOAD_CANCEL; in nfs42_do_offload_cancel_async()
642 .rpc_argp = &data->args, in _nfs42_proc_offload_status()
643 .rpc_resp = &data->res, in _nfs42_proc_offload_status()
644 .rpc_cred = ctx->cred, in _nfs42_proc_offload_status()
648 status = nfs4_call_sync(server->client, server, &msg, in _nfs42_proc_offload_status()
649 &data->args.osa_seq_args, in _nfs42_proc_offload_status()
650 &data->res.osr_seq_res, 1); in _nfs42_proc_offload_status()
651 trace_nfs4_offload_status(&data->args, status); in _nfs42_proc_offload_status()
656 case -NFS4ERR_ADMIN_REVOKED: in _nfs42_proc_offload_status()
657 case -NFS4ERR_BAD_STATEID: in _nfs42_proc_offload_status()
658 case -NFS4ERR_OLD_STATEID: in _nfs42_proc_offload_status()
665 status = -EBADF; in _nfs42_proc_offload_status()
667 case -NFS4ERR_NOTSUPP: in _nfs42_proc_offload_status()
668 case -ENOTSUPP: in _nfs42_proc_offload_status()
669 case -EOPNOTSUPP: in _nfs42_proc_offload_status()
670 server->caps &= ~NFS_CAP_OFFLOAD_STATUS; in _nfs42_proc_offload_status()
671 status = -EOPNOTSUPP; in _nfs42_proc_offload_status()
679 * nfs42_proc_offload_status - Poll completion status of an async copy operation
686 * %-EINPROGRESS: Server returned no completion status
687 * %-EREMOTEIO: Server returned an error completion status
688 * %-EBADF: Server did not recognize the copy stateid
689 * %-EOPNOTSUPP: Server does not support OFFLOAD_STATUS
690 * %-ERESTARTSYS: Wait interrupted by signal
706 if (!(server->caps & NFS_CAP_OFFLOAD_STATUS)) in nfs42_proc_offload_status()
707 return -EOPNOTSUPP; in nfs42_proc_offload_status()
711 return -ENOMEM; in nfs42_proc_offload_status()
712 data->seq_server = server; in nfs42_proc_offload_status()
713 data->args.osa_src_fh = NFS_FH(inode); in nfs42_proc_offload_status()
714 memcpy(&data->args.osa_stateid, stateid, in nfs42_proc_offload_status()
715 sizeof(data->args.osa_stateid)); in nfs42_proc_offload_status()
716 exception.stateid = &data->args.osa_stateid; in nfs42_proc_offload_status()
719 if (status == -EOPNOTSUPP) in nfs42_proc_offload_status()
722 } while (exception.retry); in nfs42_proc_offload_status()
726 *copied = data->res.osr_count; in nfs42_proc_offload_status()
727 if (!data->res.complete_count) in nfs42_proc_offload_status()
728 status = -EINPROGRESS; in nfs42_proc_offload_status()
729 else if (data->res.osr_complete != NFS_OK) in nfs42_proc_offload_status()
730 status = -EREMOTEIO; in nfs42_proc_offload_status()
758 status = nfs4_set_rw_stateid(&args->cna_src_stateid, ctx, l_ctx, in _nfs42_proc_copy_notify()
762 if (status == -EAGAIN) in _nfs42_proc_copy_notify()
763 status = -NFS4ERR_BAD_STATEID; in _nfs42_proc_copy_notify()
767 status = nfs4_call_sync(src_server->client, src_server, &msg, in _nfs42_proc_copy_notify()
768 &args->cna_seq_args, &res->cnr_seq_res, 0); in _nfs42_proc_copy_notify()
770 if (status == -ENOTSUPP) in _nfs42_proc_copy_notify()
771 src_server->caps &= ~NFS_CAP_COPY_NOTIFY; in _nfs42_proc_copy_notify()
788 if (!(src_server->caps & NFS_CAP_COPY_NOTIFY)) in nfs42_proc_copy_notify()
789 return -EOPNOTSUPP; in nfs42_proc_copy_notify()
793 return -ENOMEM; in nfs42_proc_copy_notify()
795 args->cna_src_fh = NFS_FH(file_inode(src)), in nfs42_proc_copy_notify()
796 args->cna_dst.nl4_type = NL4_NETADDR; in nfs42_proc_copy_notify()
797 nfs42_set_netaddr(dst, &args->cna_dst.u.nl4_addr); in nfs42_proc_copy_notify()
798 exception.stateid = &args->cna_src_stateid; in nfs42_proc_copy_notify()
802 if (status == -ENOTSUPP) { in nfs42_proc_copy_notify()
803 status = -EOPNOTSUPP; in nfs42_proc_copy_notify()
807 } while (exception.retry); in nfs42_proc_copy_notify()
834 return -ENOTSUPP; in _nfs42_proc_llseek()
836 status = nfs4_set_rw_stateid(&args.sa_stateid, lock->open_context, in _nfs42_proc_llseek()
839 if (status == -EAGAIN) in _nfs42_proc_llseek()
840 status = -NFS4ERR_BAD_STATEID; in _nfs42_proc_llseek()
844 status = nfs_filemap_write_and_wait_range(inode->i_mapping, in _nfs42_proc_llseek()
849 status = nfs4_call_sync(server->client, server, &msg, in _nfs42_proc_llseek()
852 if (status == -ENOTSUPP) in _nfs42_proc_llseek()
853 server->caps &= ~NFS_CAP_SEEK; in _nfs42_proc_llseek()
858 return -NFS4ERR_NXIO; in _nfs42_proc_llseek()
860 return vfs_setpos(filep, res.sr_offset, inode->i_sb->s_maxbytes); in _nfs42_proc_llseek()
875 exception.state = lock->open_context->state; in nfs42_proc_llseek()
881 if (err == -ENOTSUPP) { in nfs42_proc_llseek()
882 err = -EOPNOTSUPP; in nfs42_proc_llseek()
886 } while (exception.retry); in nfs42_proc_llseek()
897 struct inode *inode = data->inode; in nfs42_layoutstat_prepare()
901 spin_lock(&inode->i_lock); in nfs42_layoutstat_prepare()
902 lo = NFS_I(inode)->layout; in nfs42_layoutstat_prepare()
904 spin_unlock(&inode->i_lock); in nfs42_layoutstat_prepare()
908 nfs4_stateid_copy(&data->args.stateid, &lo->plh_stateid); in nfs42_layoutstat_prepare()
909 spin_unlock(&inode->i_lock); in nfs42_layoutstat_prepare()
910 nfs4_setup_sequence(server->nfs_client, &data->args.seq_args, in nfs42_layoutstat_prepare()
911 &data->res.seq_res, task); in nfs42_layoutstat_prepare()
918 struct inode *inode = data->inode; in nfs42_layoutstat_done()
921 if (!nfs4_sequence_done(task, &data->res.seq_res)) in nfs42_layoutstat_done()
924 switch (task->tk_status) { in nfs42_layoutstat_done()
927 case -NFS4ERR_BADHANDLE: in nfs42_layoutstat_done()
928 case -ESTALE: in nfs42_layoutstat_done()
931 case -NFS4ERR_EXPIRED: in nfs42_layoutstat_done()
932 case -NFS4ERR_ADMIN_REVOKED: in nfs42_layoutstat_done()
933 case -NFS4ERR_DELEG_REVOKED: in nfs42_layoutstat_done()
934 case -NFS4ERR_STALE_STATEID: in nfs42_layoutstat_done()
935 case -NFS4ERR_BAD_STATEID: in nfs42_layoutstat_done()
936 spin_lock(&inode->i_lock); in nfs42_layoutstat_done()
937 lo = NFS_I(inode)->layout; in nfs42_layoutstat_done()
939 nfs4_stateid_match(&data->args.stateid, in nfs42_layoutstat_done()
940 &lo->plh_stateid)) { in nfs42_layoutstat_done()
944 * Mark the bad layout state as invalid, then retry in nfs42_layoutstat_done()
948 spin_unlock(&inode->i_lock); in nfs42_layoutstat_done()
952 spin_unlock(&inode->i_lock); in nfs42_layoutstat_done()
954 case -NFS4ERR_OLD_STATEID: in nfs42_layoutstat_done()
955 spin_lock(&inode->i_lock); in nfs42_layoutstat_done()
956 lo = NFS_I(inode)->layout; in nfs42_layoutstat_done()
958 nfs4_stateid_match_other(&data->args.stateid, in nfs42_layoutstat_done()
959 &lo->plh_stateid)) { in nfs42_layoutstat_done()
961 if (!nfs4_stateid_is_newer(&lo->plh_stateid, in nfs42_layoutstat_done()
962 &data->args.stateid)) in nfs42_layoutstat_done()
966 spin_unlock(&inode->i_lock); in nfs42_layoutstat_done()
968 case -ENOTSUPP: in nfs42_layoutstat_done()
969 case -EOPNOTSUPP: in nfs42_layoutstat_done()
970 NFS_SERVER(inode)->caps &= ~NFS_CAP_LAYOUTSTATS; in nfs42_layoutstat_done()
973 trace_nfs4_layoutstats(inode, &data->args.stateid, task->tk_status); in nfs42_layoutstat_done()
980 struct nfs42_layoutstat_devinfo *devinfo = data->args.devinfo; in nfs42_layoutstat_release()
983 for (i = 0; i < data->args.num_dev; i++) { in nfs42_layoutstat_release()
984 if (devinfo[i].ld_private.ops && devinfo[i].ld_private.ops->free) in nfs42_layoutstat_release()
985 devinfo[i].ld_private.ops->free(&devinfo[i].ld_private); in nfs42_layoutstat_release()
988 pnfs_put_layout_hdr(NFS_I(data->args.inode)->layout); in nfs42_layoutstat_release()
990 clear_bit(NFS_INO_LAYOUTSTATS, &NFS_I(data->args.inode)->flags); in nfs42_layoutstat_release()
992 nfs_iput_and_deactive(data->inode); in nfs42_layoutstat_release()
993 kfree(data->args.devinfo); in nfs42_layoutstat_release()
1008 .rpc_argp = &data->args, in nfs42_proc_layoutstats_generic()
1009 .rpc_resp = &data->res, in nfs42_proc_layoutstats_generic()
1012 .rpc_client = server->client, in nfs42_proc_layoutstats_generic()
1020 data->inode = nfs_igrab_and_active(data->args.inode); in nfs42_proc_layoutstats_generic()
1021 if (!data->inode) { in nfs42_proc_layoutstats_generic()
1023 return -EAGAIN; in nfs42_proc_layoutstats_generic()
1025 nfs4_init_sequence(&data->args.seq_args, &data->res.seq_res, 0, 0); in nfs42_proc_layoutstats_generic()
1037 struct inode *inode = lseg->pls_layout->plh_inode; in nfs42_alloc_layouterror_data()
1041 data->args.inode = data->inode = nfs_igrab_and_active(inode); in nfs42_alloc_layouterror_data()
1042 if (data->inode) { in nfs42_alloc_layouterror_data()
1043 data->lseg = pnfs_get_lseg(lseg); in nfs42_alloc_layouterror_data()
1044 if (data->lseg) in nfs42_alloc_layouterror_data()
1046 nfs_iput_and_deactive(data->inode); in nfs42_alloc_layouterror_data()
1056 pnfs_put_lseg(data->lseg); in nfs42_free_layouterror_data()
1057 nfs_iput_and_deactive(data->inode); in nfs42_free_layouterror_data()
1065 struct inode *inode = data->inode; in nfs42_layouterror_prepare()
1067 struct pnfs_layout_hdr *lo = data->lseg->pls_layout; in nfs42_layouterror_prepare()
1070 spin_lock(&inode->i_lock); in nfs42_layouterror_prepare()
1072 spin_unlock(&inode->i_lock); in nfs42_layouterror_prepare()
1076 for (i = 0; i < data->args.num_errors; i++) in nfs42_layouterror_prepare()
1077 nfs4_stateid_copy(&data->args.errors[i].stateid, in nfs42_layouterror_prepare()
1078 &lo->plh_stateid); in nfs42_layouterror_prepare()
1079 spin_unlock(&inode->i_lock); in nfs42_layouterror_prepare()
1080 nfs4_setup_sequence(server->nfs_client, &data->args.seq_args, in nfs42_layouterror_prepare()
1081 &data->res.seq_res, task); in nfs42_layouterror_prepare()
1088 struct inode *inode = data->inode; in nfs42_layouterror_done()
1089 struct pnfs_layout_hdr *lo = data->lseg->pls_layout; in nfs42_layouterror_done()
1091 if (!nfs4_sequence_done(task, &data->res.seq_res)) in nfs42_layouterror_done()
1094 switch (task->tk_status) { in nfs42_layouterror_done()
1097 case -NFS4ERR_BADHANDLE: in nfs42_layouterror_done()
1098 case -ESTALE: in nfs42_layouterror_done()
1101 case -NFS4ERR_EXPIRED: in nfs42_layouterror_done()
1102 case -NFS4ERR_ADMIN_REVOKED: in nfs42_layouterror_done()
1103 case -NFS4ERR_DELEG_REVOKED: in nfs42_layouterror_done()
1104 case -NFS4ERR_STALE_STATEID: in nfs42_layouterror_done()
1105 case -NFS4ERR_BAD_STATEID: in nfs42_layouterror_done()
1106 spin_lock(&inode->i_lock); in nfs42_layouterror_done()
1108 nfs4_stateid_match(&data->args.errors[0].stateid, in nfs42_layouterror_done()
1109 &lo->plh_stateid)) { in nfs42_layouterror_done()
1113 * Mark the bad layout state as invalid, then retry in nfs42_layouterror_done()
1117 spin_unlock(&inode->i_lock); in nfs42_layouterror_done()
1121 spin_unlock(&inode->i_lock); in nfs42_layouterror_done()
1123 case -NFS4ERR_OLD_STATEID: in nfs42_layouterror_done()
1124 spin_lock(&inode->i_lock); in nfs42_layouterror_done()
1126 nfs4_stateid_match_other(&data->args.errors[0].stateid, in nfs42_layouterror_done()
1127 &lo->plh_stateid)) { in nfs42_layouterror_done()
1129 if (!nfs4_stateid_is_newer(&lo->plh_stateid, in nfs42_layouterror_done()
1130 &data->args.errors[0].stateid)) in nfs42_layouterror_done()
1134 spin_unlock(&inode->i_lock); in nfs42_layouterror_done()
1136 case -ENOTSUPP: in nfs42_layouterror_done()
1137 case -EOPNOTSUPP: in nfs42_layouterror_done()
1138 NFS_SERVER(inode)->caps &= ~NFS_CAP_LAYOUTERROR; in nfs42_layouterror_done()
1141 trace_nfs4_layouterror(inode, &data->args.errors[0].stateid, in nfs42_layouterror_done()
1142 task->tk_status); in nfs42_layouterror_done()
1162 struct inode *inode = lseg->pls_layout->plh_inode; in nfs42_proc_layouterror()
1176 return -EOPNOTSUPP; in nfs42_proc_layouterror()
1178 return -EINVAL; in nfs42_proc_layouterror()
1181 return -ENOMEM; in nfs42_proc_layouterror()
1183 data->args.errors[i] = errors[i]; in nfs42_proc_layouterror()
1184 data->args.num_errors++; in nfs42_proc_layouterror()
1185 data->res.num_errors++; in nfs42_proc_layouterror()
1187 msg.rpc_argp = &data->args; in nfs42_proc_layouterror()
1188 msg.rpc_resp = &data->res; in nfs42_proc_layouterror()
1190 task_setup.rpc_client = NFS_SERVER(inode)->client; in nfs42_proc_layouterror()
1191 nfs4_init_sequence(&data->args.seq_args, &data->res.seq_res, 0, 0); in nfs42_proc_layouterror()
1203 loff_t dst_offset, loff_t count) in _nfs42_proc_clone() argument
1214 .count = count, in _nfs42_proc_clone()
1222 msg->rpc_argp = &args; in _nfs42_proc_clone()
1223 msg->rpc_resp = &res; in _nfs42_proc_clone()
1225 status = nfs4_set_rw_stateid(&args.src_stateid, src_lock->open_context, in _nfs42_proc_clone()
1228 if (status == -EAGAIN) in _nfs42_proc_clone()
1229 status = -NFS4ERR_BAD_STATEID; in _nfs42_proc_clone()
1232 status = nfs4_set_rw_stateid(&args.dst_stateid, dst_lock->open_context, in _nfs42_proc_clone()
1235 if (status == -EAGAIN) in _nfs42_proc_clone()
1236 status = -NFS4ERR_BAD_STATEID; in _nfs42_proc_clone()
1242 return -ENOMEM; in _nfs42_proc_clone()
1244 nfs4_bitmask_set(dst_bitmask, server->cache_consistency_bitmask, in _nfs42_proc_clone()
1247 status = nfs4_call_sync(server->client, server, msg, in _nfs42_proc_clone()
1251 /* a zero-length count means clone to EOF in src */ in _nfs42_proc_clone()
1252 if (count == 0 && res.dst_fattr->valid & NFS_ATTR_FATTR_SIZE) in _nfs42_proc_clone()
1253 count = nfs_size_to_loff_t(res.dst_fattr->size) - dst_offset; in _nfs42_proc_clone()
1254 nfs42_copy_dest_done(dst_inode, dst_offset, count); in _nfs42_proc_clone()
1263 loff_t src_offset, loff_t dst_offset, loff_t count) in nfs42_proc_clone() argument
1277 return -EOPNOTSUPP; in nfs42_proc_clone()
1284 src_exception.state = src_lock->open_context->state; in nfs42_proc_clone()
1293 dst_exception.state = dst_lock->open_context->state; in nfs42_proc_clone()
1297 src_offset, dst_offset, count); in nfs42_proc_clone()
1298 if (err == -ENOTSUPP || err == -EOPNOTSUPP) { in nfs42_proc_clone()
1299 NFS_SERVER(inode)->caps &= ~NFS_CAP_CLONE; in nfs42_proc_clone()
1300 err = -EOPNOTSUPP; in nfs42_proc_clone()
1308 } while (src_exception.retry || dst_exception.retry); in nfs42_proc_clone()
1334 ret = nfs4_call_sync(server->client, server, &msg, &args.seq_args, in _nfs42_proc_removexattr()
1368 if (buflen > server->sxasize) in _nfs42_proc_setxattr()
1369 return -ERANGE; in _nfs42_proc_setxattr()
1373 return -ENOMEM; in _nfs42_proc_setxattr()
1384 nfs4_bitmask_set(bitmask, server->cache_consistency_bitmask, in _nfs42_proc_setxattr()
1387 ret = nfs4_call_sync(server->client, server, &msg, &arg.seq_args, in _nfs42_proc_setxattr()
1391 for (; np > 0; np--) in _nfs42_proc_setxattr()
1392 put_page(pages[np - 1]); in _nfs42_proc_setxattr()
1424 ret = nfs4_call_sync(server->client, server, &msg, &arg.seq_args, in _nfs42_proc_getxattr()
1435 * common query-alloc-retrieve cycle for xattrs. in _nfs42_proc_getxattr()
1444 return -ERANGE; in _nfs42_proc_getxattr()
1474 ret = -ENOMEM; in _nfs42_proc_listxattrs()
1480 if (xdrlen > server->lxasize) in _nfs42_proc_listxattrs()
1481 xdrlen = server->lxasize; in _nfs42_proc_listxattrs()
1494 arg.count = xdrlen; in _nfs42_proc_listxattrs()
1496 ret = nfs4_call_sync(server->client, server, &msg, &arg.seq_args, in _nfs42_proc_listxattrs()
1507 while (--np >= 0) { in _nfs42_proc_listxattrs()
1529 return -ENOMEM; in nfs42_proc_getxattr()
1534 err = -ENOMEM; in nfs42_proc_getxattr()
1543 * There is no downside in using the page-aligned length. It will in nfs42_proc_getxattr()
1545 * caller but still fit in the page-rounded value. in nfs42_proc_getxattr()
1554 } while (exception.retry); in nfs42_proc_getxattr()
1557 while (--i >= 0) in nfs42_proc_getxattr()
1576 } while (exception.retry); in nfs42_proc_setxattr()
1594 } while (exception.retry); in nfs42_proc_listxattrs()
1610 } while (exception.retry); in nfs42_proc_removexattr()