Lines Matching refs:copy
1106 void nfs4_put_copy(struct nfsd4_copy *copy) in nfs4_put_copy() argument
1108 if (!refcount_dec_and_test(©->refcount)) in nfs4_put_copy()
1110 kfree(copy); in nfs4_put_copy()
1114 check_and_set_stop_copy(struct nfsd4_copy *copy) in check_and_set_stop_copy() argument
1118 spin_lock(©->cp_clp->async_lock); in check_and_set_stop_copy()
1119 value = copy->stopped; in check_and_set_stop_copy()
1120 if (!copy->stopped) in check_and_set_stop_copy()
1121 copy->stopped = true; in check_and_set_stop_copy()
1122 spin_unlock(©->cp_clp->async_lock); in check_and_set_stop_copy()
1126 static void nfsd4_stop_copy(struct nfsd4_copy *copy) in nfsd4_stop_copy() argument
1129 if (!check_and_set_stop_copy(copy)) in nfsd4_stop_copy()
1130 kthread_stop(copy->copy_task); in nfsd4_stop_copy()
1131 nfs4_put_copy(copy); in nfsd4_stop_copy()
1136 struct nfsd4_copy *copy = NULL; in nfsd4_get_copy() local
1140 copy = list_first_entry(&clp->async_copies, struct nfsd4_copy, in nfsd4_get_copy()
1142 refcount_inc(©->refcount); in nfsd4_get_copy()
1145 return copy; in nfsd4_get_copy()
1150 struct nfsd4_copy *copy; in nfsd4_shutdown_copy() local
1152 while ((copy = nfsd4_get_copy(clp)) != NULL) in nfsd4_shutdown_copy()
1153 nfsd4_stop_copy(copy); in nfsd4_shutdown_copy()
1268 struct nfsd4_copy *copy, struct vfsmount **mount) in nfsd4_setup_inter_ssc() argument
1271 stateid_t *s_stid = ©->cp_src_stateid; in nfsd4_setup_inter_ssc()
1276 ©->cp_dst_stateid, in nfsd4_setup_inter_ssc()
1277 WR_STATE, ©->nf_dst, NULL); in nfsd4_setup_inter_ssc()
1281 status = nfsd4_interssc_connect(©->cp_src, rqstp, mount); in nfsd4_setup_inter_ssc()
1287 copy->c_fh.size = s_fh->fh_handle.fh_size; in nfsd4_setup_inter_ssc()
1288 memcpy(copy->c_fh.data, &s_fh->fh_handle.fh_base, copy->c_fh.size); in nfsd4_setup_inter_ssc()
1289 copy->stateid.seqid = cpu_to_be32(s_stid->si_generation); in nfsd4_setup_inter_ssc()
1290 memcpy(copy->stateid.other, (void *)&s_stid->si_opaque, in nfsd4_setup_inter_ssc()
1313 struct nfsd4_copy *copy, in nfsd4_setup_inter_ssc() argument
1342 struct nfsd4_copy *copy) in nfsd4_setup_intra_ssc() argument
1344 return nfsd4_verify_copy(rqstp, cstate, ©->cp_src_stateid, in nfsd4_setup_intra_ssc()
1345 ©->nf_src, ©->cp_dst_stateid, in nfsd4_setup_intra_ssc()
1346 ©->nf_dst); in nfsd4_setup_intra_ssc()
1358 struct nfsd4_copy *copy = container_of(cb, struct nfsd4_copy, cp_cb); in nfsd4_cb_offload_release() local
1360 nfs4_put_copy(copy); in nfsd4_cb_offload_release()
1374 static void nfsd4_init_copy_res(struct nfsd4_copy *copy, bool sync) in nfsd4_init_copy_res() argument
1376 copy->cp_res.wr_stable_how = NFS_UNSTABLE; in nfsd4_init_copy_res()
1377 copy->cp_synchronous = sync; in nfsd4_init_copy_res()
1378 gen_boot_verifier(©->cp_res.wr_verifier, copy->cp_clp->net); in nfsd4_init_copy_res()
1381 static ssize_t _nfsd_copy_file_range(struct nfsd4_copy *copy) in _nfsd_copy_file_range() argument
1383 struct file *dst = copy->nf_dst->nf_file; in _nfsd_copy_file_range()
1384 struct file *src = copy->nf_src->nf_file; in _nfsd_copy_file_range()
1386 size_t bytes_total = copy->cp_count; in _nfsd_copy_file_range()
1387 u64 src_pos = copy->cp_src_pos; in _nfsd_copy_file_range()
1388 u64 dst_pos = copy->cp_dst_pos; in _nfsd_copy_file_range()
1398 copy->cp_res.wr_bytes_written += bytes_copied; in _nfsd_copy_file_range()
1401 } while (bytes_total > 0 && !copy->cp_synchronous); in _nfsd_copy_file_range()
1405 static __be32 nfsd4_do_copy(struct nfsd4_copy *copy, bool sync) in nfsd4_do_copy() argument
1410 bytes = _nfsd_copy_file_range(copy); in nfsd4_do_copy()
1414 if (bytes < 0 && !copy->cp_res.wr_bytes_written) in nfsd4_do_copy()
1417 nfsd4_init_copy_res(copy, sync); in nfsd4_do_copy()
1421 if (!copy->cp_intra) /* Inter server SSC */ in nfsd4_do_copy()
1422 nfsd4_cleanup_inter_ssc(copy->ss_mnt, copy->nf_src, in nfsd4_do_copy()
1423 copy->nf_dst); in nfsd4_do_copy()
1425 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.stid, in nfsd4_copy()
1541 sizeof(copy->cp_res.cb_stateid)); in nfsd4_copy()
1542 dup_copy_fields(copy, async_copy); in nfsd4_copy()
1554 status = nfsd4_do_copy(copy, 1); in nfsd4_copy()
1562 if (!copy->cp_intra) in nfsd4_copy()
1563 nfsd4_interssc_disconnect(copy->ss_mnt); in nfsd4_copy()
1570 struct nfsd4_copy *copy; in find_async_copy() local
1573 list_for_each_entry(copy, &clp->async_copies, copies) { in find_async_copy()
1574 if (memcmp(©->cp_stateid.stid, stateid, NFS4_STATEID_SIZE)) in find_async_copy()
1576 refcount_inc(©->refcount); in find_async_copy()
1578 return copy; in find_async_copy()
1590 struct nfsd4_copy *copy; in nfsd4_offload_cancel() local
1593 copy = find_async_copy(clp, &os->stateid); in nfsd4_offload_cancel()
1594 if (!copy) { in nfsd4_offload_cancel()
1599 nfsd4_stop_copy(copy); in nfsd4_offload_cancel()
1677 struct nfsd4_copy *copy; in nfsd4_offload_status() local
1680 copy = find_async_copy(clp, &os->stateid); in nfsd4_offload_status()
1681 if (copy) { in nfsd4_offload_status()
1682 os->count = copy->cp_res.wr_bytes_written; in nfsd4_offload_status()
1683 nfs4_put_copy(copy); in nfsd4_offload_status()
2288 struct nfsd4_copy *copy; in check_if_stalefh_allowed() local
2304 copy = (struct nfsd4_copy *)&op->u; in check_if_stalefh_allowed()
2310 if (!copy->cp_intra) in check_if_stalefh_allowed()