hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/fs/nfsd/nfs4proc.c
....@@ -881,8 +881,8 @@
881881 rename->rn_tname, rename->rn_tnamelen);
882882 if (status)
883883 return status;
884
- set_change_info(&rename->rn_sinfo, &cstate->current_fh);
885
- set_change_info(&rename->rn_tinfo, &cstate->save_fh);
884
+ set_change_info(&rename->rn_sinfo, &cstate->save_fh);
885
+ set_change_info(&rename->rn_tinfo, &cstate->current_fh);
886886 return nfs_ok;
887887 }
888888
....@@ -1075,8 +1075,10 @@
10751075 return status;
10761076 out_put_dst:
10771077 nfsd_file_put(*dst);
1078
+ *dst = NULL;
10781079 out_put_src:
10791080 nfsd_file_put(*src);
1081
+ *src = NULL;
10801082 goto out;
10811083 }
10821084
....@@ -1246,13 +1248,6 @@
12461248 return status;
12471249 }
12481250
1249
-static void
1250
-nfsd4_interssc_disconnect(struct vfsmount *ss_mnt)
1251
-{
1252
- nfs_do_sb_deactive(ss_mnt->mnt_sb);
1253
- mntput(ss_mnt);
1254
-}
1255
-
12561251 /*
12571252 * Verify COPY destination stateid.
12581253 *
....@@ -1320,11 +1315,6 @@
13201315 static void
13211316 nfsd4_cleanup_inter_ssc(struct vfsmount *ss_mnt, struct nfsd_file *src,
13221317 struct nfsd_file *dst)
1323
-{
1324
-}
1325
-
1326
-static void
1327
-nfsd4_interssc_disconnect(struct vfsmount *ss_mnt)
13281318 {
13291319 }
13301320
....@@ -1469,14 +1459,14 @@
14691459 copy->nf_src = kzalloc(sizeof(struct nfsd_file), GFP_KERNEL);
14701460 if (!copy->nf_src) {
14711461 copy->nfserr = nfserr_serverfault;
1472
- nfsd4_interssc_disconnect(copy->ss_mnt);
1462
+ /* ss_mnt will be unmounted by the laundromat */
14731463 goto do_callback;
14741464 }
14751465 copy->nf_src->nf_file = nfs42_ssc_open(copy->ss_mnt, &copy->c_fh,
14761466 &copy->stateid);
14771467 if (IS_ERR(copy->nf_src->nf_file)) {
14781468 copy->nfserr = nfserr_offload_denied;
1479
- nfsd4_interssc_disconnect(copy->ss_mnt);
1469
+ /* ss_mnt will be unmounted by the laundromat */
14801470 goto do_callback;
14811471 }
14821472 }
....@@ -1559,8 +1549,10 @@
15591549 if (async_copy)
15601550 cleanup_async_copy(async_copy);
15611551 status = nfserrno(-ENOMEM);
1562
- if (!copy->cp_intra)
1563
- nfsd4_interssc_disconnect(copy->ss_mnt);
1552
+ /*
1553
+ * source's vfsmount of inter-copy will be unmounted
1554
+ * by the laundromat
1555
+ */
15641556 goto out;
15651557 }
15661558