Skip to content

Commit a8483b9

Browse files
committed
NFSD: Record status of async copy operation in struct nfsd4_copy
After a client has started an asynchronous COPY operation, a subsequent OFFLOAD_STATUS operation will need to report the status code once that COPY operation has completed. The recorded status record will be used by a subsequent patch. Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
1 parent f2ad13a commit a8483b9

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

fs/nfsd/nfs4proc.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1737,7 +1737,7 @@ static void cleanup_async_copy(struct nfsd4_copy *copy)
17371737
nfs4_put_copy(copy);
17381738
}
17391739

1740-
static void nfsd4_send_cb_offload(struct nfsd4_copy *copy, __be32 nfserr)
1740+
static void nfsd4_send_cb_offload(struct nfsd4_copy *copy)
17411741
{
17421742
struct nfsd4_cb_offload *cbo;
17431743

@@ -1747,12 +1747,12 @@ static void nfsd4_send_cb_offload(struct nfsd4_copy *copy, __be32 nfserr)
17471747

17481748
memcpy(&cbo->co_res, &copy->cp_res, sizeof(copy->cp_res));
17491749
memcpy(&cbo->co_fh, &copy->fh, sizeof(copy->fh));
1750-
cbo->co_nfserr = nfserr;
1750+
cbo->co_nfserr = copy->nfserr;
17511751

17521752
nfsd4_init_cb(&cbo->co_cb, copy->cp_clp, &nfsd4_cb_offload_ops,
17531753
NFSPROC4_CLNT_CB_OFFLOAD);
17541754
trace_nfsd_cb_offload(copy->cp_clp, &cbo->co_res.cb_stateid,
1755-
&cbo->co_fh, copy->cp_count, nfserr);
1755+
&cbo->co_fh, copy->cp_count, copy->nfserr);
17561756
nfsd4_run_cb(&cbo->co_cb);
17571757
}
17581758

@@ -1766,7 +1766,6 @@ static void nfsd4_send_cb_offload(struct nfsd4_copy *copy, __be32 nfserr)
17661766
static int nfsd4_do_async_copy(void *data)
17671767
{
17681768
struct nfsd4_copy *copy = (struct nfsd4_copy *)data;
1769-
__be32 nfserr;
17701769

17711770
trace_nfsd_copy_do_async(copy);
17721771
if (nfsd4_ssc_is_inter(copy)) {
@@ -1777,24 +1776,24 @@ static int nfsd4_do_async_copy(void *data)
17771776
if (IS_ERR(filp)) {
17781777
switch (PTR_ERR(filp)) {
17791778
case -EBADF:
1780-
nfserr = nfserr_wrong_type;
1779+
copy->nfserr = nfserr_wrong_type;
17811780
break;
17821781
default:
1783-
nfserr = nfserr_offload_denied;
1782+
copy->nfserr = nfserr_offload_denied;
17841783
}
17851784
/* ss_mnt will be unmounted by the laundromat */
17861785
goto do_callback;
17871786
}
1788-
nfserr = nfsd4_do_copy(copy, filp, copy->nf_dst->nf_file,
1789-
false);
1787+
copy->nfserr = nfsd4_do_copy(copy, filp, copy->nf_dst->nf_file,
1788+
false);
17901789
nfsd4_cleanup_inter_ssc(copy->ss_nsui, filp, copy->nf_dst);
17911790
} else {
1792-
nfserr = nfsd4_do_copy(copy, copy->nf_src->nf_file,
1793-
copy->nf_dst->nf_file, false);
1791+
copy->nfserr = nfsd4_do_copy(copy, copy->nf_src->nf_file,
1792+
copy->nf_dst->nf_file, false);
17941793
}
17951794

17961795
do_callback:
1797-
nfsd4_send_cb_offload(copy, nfserr);
1796+
nfsd4_send_cb_offload(copy);
17981797
cleanup_async_copy(copy);
17991798
return 0;
18001799
}

fs/nfsd/xdr4.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,7 @@ struct nfsd4_copy {
694694
#define NFSD4_COPY_F_COMMITTED (3)
695695

696696
/* response */
697+
__be32 nfserr;
697698
struct nfsd42_write_res cp_res;
698699
struct knfsd_fh fh;
699700

0 commit comments

Comments
 (0)