nfsd4_init_copy_res(copy, sync);
                status = nfs_ok;
        }
-
-       if (nfsd4_ssc_is_inter(copy))
-               nfsd4_cleanup_inter_ssc(copy->ss_mnt, copy->nf_src->nf_file,
-                                       copy->nf_dst);
-       else
-               nfsd4_cleanup_intra_ssc(copy->nf_src, copy->nf_dst);
-
        return status;
 }
 
                        nfsd4_interssc_disconnect(copy->ss_mnt);
                        goto do_callback;
                }
+               copy->nfserr = nfsd4_do_copy(copy, 0);
+               nfsd4_cleanup_inter_ssc(copy->ss_mnt, copy->nf_src->nf_file,
+                                       copy->nf_dst);
+       } else {
+               copy->nfserr = nfsd4_do_copy(copy, 0);
+               nfsd4_cleanup_intra_ssc(copy->nf_src, copy->nf_dst);
        }
 
-       copy->nfserr = nfsd4_do_copy(copy, 0);
 do_callback:
        cb_copy = kzalloc(sizeof(struct nfsd4_copy), GFP_KERNEL);
        if (!cb_copy)
                status = nfs_ok;
        } else {
                status = nfsd4_do_copy(copy, 1);
+               nfsd4_cleanup_intra_ssc(copy->nf_src, copy->nf_dst);
        }
 out:
        return status;