Lines Matching refs:copy
1105 void nfs4_put_copy(struct nfsd4_copy *copy) in nfs4_put_copy() argument
1107 if (!refcount_dec_and_test(©->refcount)) in nfs4_put_copy()
1109 kfree(copy); in nfs4_put_copy()
1113 check_and_set_stop_copy(struct nfsd4_copy *copy) in check_and_set_stop_copy() argument
1117 spin_lock(©->cp_clp->async_lock); in check_and_set_stop_copy()
1118 value = copy->stopped; in check_and_set_stop_copy()
1119 if (!copy->stopped) in check_and_set_stop_copy()
1120 copy->stopped = true; in check_and_set_stop_copy()
1121 spin_unlock(©->cp_clp->async_lock); in check_and_set_stop_copy()
1125 static void nfsd4_stop_copy(struct nfsd4_copy *copy) in nfsd4_stop_copy() argument
1128 if (!check_and_set_stop_copy(copy)) in nfsd4_stop_copy()
1129 kthread_stop(copy->copy_task); in nfsd4_stop_copy()
1130 nfs4_put_copy(copy); in nfsd4_stop_copy()
1135 struct nfsd4_copy *copy = NULL; in nfsd4_get_copy() local
1139 copy = list_first_entry(&clp->async_copies, struct nfsd4_copy, in nfsd4_get_copy()
1141 refcount_inc(©->refcount); in nfsd4_get_copy()
1144 return copy; in nfsd4_get_copy()
1149 struct nfsd4_copy *copy; in nfsd4_shutdown_copy() local
1151 while ((copy = nfsd4_get_copy(clp)) != NULL) in nfsd4_shutdown_copy()
1152 nfsd4_stop_copy(copy); in nfsd4_shutdown_copy()
1267 struct nfsd4_copy *copy, struct vfsmount **mount) in nfsd4_setup_inter_ssc() argument
1270 stateid_t *s_stid = ©->cp_src_stateid; in nfsd4_setup_inter_ssc()
1275 ©->cp_dst_stateid, in nfsd4_setup_inter_ssc()
1276 WR_STATE, ©->nf_dst, NULL); in nfsd4_setup_inter_ssc()
1280 status = nfsd4_interssc_connect(©->cp_src, rqstp, mount); in nfsd4_setup_inter_ssc()
1286 copy->c_fh.size = s_fh->fh_handle.fh_size; in nfsd4_setup_inter_ssc()
1287 memcpy(copy->c_fh.data, &s_fh->fh_handle.fh_base, copy->c_fh.size); in nfsd4_setup_inter_ssc()
1288 copy->stateid.seqid = cpu_to_be32(s_stid->si_generation); in nfsd4_setup_inter_ssc()
1289 memcpy(copy->stateid.other, (void *)&s_stid->si_opaque, in nfsd4_setup_inter_ssc()
1312 struct nfsd4_copy *copy, in nfsd4_setup_inter_ssc() argument
1341 struct nfsd4_copy *copy) in nfsd4_setup_intra_ssc() argument
1343 return nfsd4_verify_copy(rqstp, cstate, ©->cp_src_stateid, in nfsd4_setup_intra_ssc()
1344 ©->nf_src, ©->cp_dst_stateid, in nfsd4_setup_intra_ssc()
1345 ©->nf_dst); in nfsd4_setup_intra_ssc()
1357 struct nfsd4_copy *copy = container_of(cb, struct nfsd4_copy, cp_cb); in nfsd4_cb_offload_release() local
1359 nfs4_put_copy(copy); in nfsd4_cb_offload_release()
1373 static void nfsd4_init_copy_res(struct nfsd4_copy *copy, bool sync) in nfsd4_init_copy_res() argument
1375 copy->cp_res.wr_stable_how = NFS_UNSTABLE; in nfsd4_init_copy_res()
1376 copy->cp_synchronous = sync; in nfsd4_init_copy_res()
1377 gen_boot_verifier(©->cp_res.wr_verifier, copy->cp_clp->net); in nfsd4_init_copy_res()
1380 static ssize_t _nfsd_copy_file_range(struct nfsd4_copy *copy) in _nfsd_copy_file_range() argument
1383 size_t bytes_total = copy->cp_count; in _nfsd_copy_file_range()
1384 u64 src_pos = copy->cp_src_pos; in _nfsd_copy_file_range()
1385 u64 dst_pos = copy->cp_dst_pos; in _nfsd_copy_file_range()
1390 bytes_copied = nfsd_copy_file_range(copy->nf_src->nf_file, in _nfsd_copy_file_range()
1391 src_pos, copy->nf_dst->nf_file, dst_pos, in _nfsd_copy_file_range()
1396 copy->cp_res.wr_bytes_written += bytes_copied; in _nfsd_copy_file_range()
1399 } while (bytes_total > 0 && !copy->cp_synchronous); in _nfsd_copy_file_range()
1403 static __be32 nfsd4_do_copy(struct nfsd4_copy *copy, bool sync) in nfsd4_do_copy() argument
1408 bytes = _nfsd_copy_file_range(copy); in nfsd4_do_copy()
1412 if (bytes < 0 && !copy->cp_res.wr_bytes_written) in nfsd4_do_copy()
1415 nfsd4_init_copy_res(copy, sync); in nfsd4_do_copy()
1419 if (!copy->cp_intra) /* Inter server SSC */ in nfsd4_do_copy()
1420 nfsd4_cleanup_inter_ssc(copy->ss_mnt, copy->nf_src, in nfsd4_do_copy()
1421 copy->nf_dst); in nfsd4_do_copy()
1423 nfsd4_cleanup_intra_ssc(copy->nf_src, copy->nf_dst); in nfsd4_do_copy()
1451 static void cleanup_async_copy(struct nfsd4_copy *copy) in cleanup_async_copy() argument
1453 nfs4_free_copy_state(copy); in cleanup_async_copy()
1454 nfsd_file_put(copy->nf_dst); in cleanup_async_copy()
1455 if (copy->cp_intra) in cleanup_async_copy()
1456 nfsd_file_put(copy->nf_src); in cleanup_async_copy()
1457 spin_lock(©->cp_clp->async_lock); in cleanup_async_copy()
1458 list_del(©->copies); in cleanup_async_copy()
1459 spin_unlock(©->cp_clp->async_lock); in cleanup_async_copy()
1460 nfs4_put_copy(copy); in cleanup_async_copy()
1465 struct nfsd4_copy *copy = (struct nfsd4_copy *)data; in nfsd4_do_async_copy() local
1468 if (!copy->cp_intra) { /* Inter server SSC */ in nfsd4_do_async_copy()
1469 copy->nf_src = kzalloc(sizeof(struct nfsd_file), GFP_KERNEL); in nfsd4_do_async_copy()
1470 if (!copy->nf_src) { in nfsd4_do_async_copy()
1471 copy->nfserr = nfserr_serverfault; in nfsd4_do_async_copy()
1472 nfsd4_interssc_disconnect(copy->ss_mnt); in nfsd4_do_async_copy()
1475 copy->nf_src->nf_file = nfs42_ssc_open(copy->ss_mnt, ©->c_fh, in nfsd4_do_async_copy()
1476 ©->stateid); in nfsd4_do_async_copy()
1477 if (IS_ERR(copy->nf_src->nf_file)) { in nfsd4_do_async_copy()
1478 copy->nfserr = nfserr_offload_denied; in nfsd4_do_async_copy()
1479 nfsd4_interssc_disconnect(copy->ss_mnt); in nfsd4_do_async_copy()
1484 copy->nfserr = nfsd4_do_copy(copy, 0); in nfsd4_do_async_copy()
1490 memcpy(&cb_copy->cp_res, ©->cp_res, sizeof(copy->cp_res)); in nfsd4_do_async_copy()
1491 cb_copy->cp_clp = copy->cp_clp; in nfsd4_do_async_copy()
1492 cb_copy->nfserr = copy->nfserr; in nfsd4_do_async_copy()
1493 memcpy(&cb_copy->fh, ©->fh, sizeof(copy->fh)); in nfsd4_do_async_copy()
1498 if (!copy->cp_intra) in nfsd4_do_async_copy()
1499 kfree(copy->nf_src); in nfsd4_do_async_copy()
1500 cleanup_async_copy(copy); in nfsd4_do_async_copy()
1508 struct nfsd4_copy *copy = &u->copy; in nfsd4_copy() local
1512 if (!copy->cp_intra) { /* Inter server SSC */ in nfsd4_copy()
1513 if (!inter_copy_offload_enable || copy->cp_synchronous) { in nfsd4_copy()
1517 status = nfsd4_setup_inter_ssc(rqstp, cstate, copy, in nfsd4_copy()
1518 ©->ss_mnt); in nfsd4_copy()
1522 status = nfsd4_setup_intra_ssc(rqstp, cstate, copy); in nfsd4_copy()
1527 copy->cp_clp = cstate->clp; in nfsd4_copy()
1528 memcpy(©->fh, &cstate->current_fh.fh_handle, in nfsd4_copy()
1530 if (!copy->cp_synchronous) { in nfsd4_copy()
1537 if (!nfs4_init_copy_state(nn, copy)) in nfsd4_copy()
1540 memcpy(©->cp_res.cb_stateid, ©->cp_stateid, in nfsd4_copy()
1541 sizeof(copy->cp_stateid)); in nfsd4_copy()
1542 status = dup_copy_fields(copy, async_copy); in nfsd4_copy()
1556 status = nfsd4_do_copy(copy, 1); in nfsd4_copy()
1564 if (!copy->cp_intra) in nfsd4_copy()
1565 nfsd4_interssc_disconnect(copy->ss_mnt); in nfsd4_copy()
1572 struct nfsd4_copy *copy; in find_async_copy() local
1575 list_for_each_entry(copy, &clp->async_copies, copies) { in find_async_copy()
1576 if (memcmp(©->cp_stateid.stid, stateid, NFS4_STATEID_SIZE)) in find_async_copy()
1578 refcount_inc(©->refcount); in find_async_copy()
1580 return copy; in find_async_copy()
1592 struct nfsd4_copy *copy; in nfsd4_offload_cancel() local
1595 copy = find_async_copy(clp, &os->stateid); in nfsd4_offload_cancel()
1596 if (!copy) { in nfsd4_offload_cancel()
1601 nfsd4_stop_copy(copy); in nfsd4_offload_cancel()
1679 struct nfsd4_copy *copy; in nfsd4_offload_status() local
1682 copy = find_async_copy(clp, &os->stateid); in nfsd4_offload_status()
1683 if (copy) { in nfsd4_offload_status()
1684 os->count = copy->cp_res.wr_bytes_written; in nfsd4_offload_status()
1685 nfs4_put_copy(copy); in nfsd4_offload_status()
2290 struct nfsd4_copy *copy; in check_if_stalefh_allowed() local
2306 copy = (struct nfsd4_copy *)&op->u; in check_if_stalefh_allowed()
2312 if (!copy->cp_intra) in check_if_stalefh_allowed()