vfs.c (a2f4c3fa4db94ba44d32a72201927cfd132a8e82) | vfs.c (3988a57885eeac05ef89f0ab4d7e47b52fbcf630) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * File operations used by nfsd. Some of these have been ripped from 4 * other parts of the kernel because they weren't exported, others 5 * are partial duplicates with added or changed functionality. 6 * 7 * Note that several functions dget() the dentry upon which they want 8 * to act, most notably those that create directory entries. Response --- 545 unchanged lines hidden (view full) --- 554 status = commit_inode_metadata(file_inode(src)); 555 if (status < 0) { 556 trace_nfsd_clone_file_range_err(rqstp, 557 &nfsd4_get_cstate(rqstp)->save_fh, 558 src_pos, 559 &nfsd4_get_cstate(rqstp)->current_fh, 560 dst_pos, 561 count, status); | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * File operations used by nfsd. Some of these have been ripped from 4 * other parts of the kernel because they weren't exported, others 5 * are partial duplicates with added or changed functionality. 6 * 7 * Note that several functions dget() the dentry upon which they want 8 * to act, most notably those that create directory entries. Response --- 545 unchanged lines hidden (view full) --- 554 status = commit_inode_metadata(file_inode(src)); 555 if (status < 0) { 556 trace_nfsd_clone_file_range_err(rqstp, 557 &nfsd4_get_cstate(rqstp)->save_fh, 558 src_pos, 559 &nfsd4_get_cstate(rqstp)->current_fh, 560 dst_pos, 561 count, status); |
562 nfsd_reset_boot_verifier(net_generic(nf_dst->nf_net, 563 nfsd_net_id)); | 562 nfsd_reset_write_verifier(net_generic(nf_dst->nf_net, 563 nfsd_net_id)); |
564 ret = nfserrno(status); 565 } 566 } 567out_err: 568 return ret; 569} 570 571ssize_t nfsd_copy_file_range(struct file *src, u64 src_pos, struct file *dst, --- 436 unchanged lines hidden (view full) --- 1008 stable = NFS_UNSTABLE; 1009 1010 if (stable && !use_wgather) 1011 flags |= RWF_SYNC; 1012 1013 iov_iter_kvec(&iter, WRITE, vec, vlen, *cnt); 1014 since = READ_ONCE(file->f_wb_err); 1015 if (verf) | 564 ret = nfserrno(status); 565 } 566 } 567out_err: 568 return ret; 569} 570 571ssize_t nfsd_copy_file_range(struct file *src, u64 src_pos, struct file *dst, --- 436 unchanged lines hidden (view full) --- 1008 stable = NFS_UNSTABLE; 1009 1010 if (stable && !use_wgather) 1011 flags |= RWF_SYNC; 1012 1013 iov_iter_kvec(&iter, WRITE, vec, vlen, *cnt); 1014 since = READ_ONCE(file->f_wb_err); 1015 if (verf) |
1016 nfsd_copy_boot_verifier(verf, nn); | 1016 nfsd_copy_write_verifier(verf, nn); |
1017 host_err = vfs_iter_write(file, &iter, &pos, flags); 1018 if (host_err < 0) { | 1017 host_err = vfs_iter_write(file, &iter, &pos, flags); 1018 if (host_err < 0) { |
1019 nfsd_reset_boot_verifier(nn); | 1019 nfsd_reset_write_verifier(nn); |
1020 goto out_nfserr; 1021 } 1022 *cnt = host_err; 1023 nfsd_stats_io_write_add(exp, *cnt); 1024 fsnotify_modify(file); 1025 host_err = filemap_check_wb_err(file->f_mapping, since); 1026 if (host_err < 0) 1027 goto out_nfserr; 1028 1029 if (stable && use_wgather) { 1030 host_err = wait_for_concurrent_writes(file); 1031 if (host_err < 0) | 1020 goto out_nfserr; 1021 } 1022 *cnt = host_err; 1023 nfsd_stats_io_write_add(exp, *cnt); 1024 fsnotify_modify(file); 1025 host_err = filemap_check_wb_err(file->f_mapping, since); 1026 if (host_err < 0) 1027 goto out_nfserr; 1028 1029 if (stable && use_wgather) { 1030 host_err = wait_for_concurrent_writes(file); 1031 if (host_err < 0) |
1032 nfsd_reset_boot_verifier(nn); | 1032 nfsd_reset_write_verifier(nn); |
1033 } 1034 1035out_nfserr: 1036 if (host_err >= 0) { 1037 trace_nfsd_write_io_done(rqstp, fhp, offset, *cnt); 1038 nfserr = nfs_ok; 1039 } else { 1040 trace_nfsd_write_err(rqstp, fhp, offset, host_err); --- 96 unchanged lines hidden (view full) --- 1137 nn = net_generic(nf->nf_net, nfsd_net_id); 1138 if (EX_ISSYNC(fhp->fh_export)) { 1139 errseq_t since = READ_ONCE(nf->nf_file->f_wb_err); 1140 int err2; 1141 1142 err2 = vfs_fsync_range(nf->nf_file, offset, end, 0); 1143 switch (err2) { 1144 case 0: | 1033 } 1034 1035out_nfserr: 1036 if (host_err >= 0) { 1037 trace_nfsd_write_io_done(rqstp, fhp, offset, *cnt); 1038 nfserr = nfs_ok; 1039 } else { 1040 trace_nfsd_write_err(rqstp, fhp, offset, host_err); --- 96 unchanged lines hidden (view full) --- 1137 nn = net_generic(nf->nf_net, nfsd_net_id); 1138 if (EX_ISSYNC(fhp->fh_export)) { 1139 errseq_t since = READ_ONCE(nf->nf_file->f_wb_err); 1140 int err2; 1141 1142 err2 = vfs_fsync_range(nf->nf_file, offset, end, 0); 1143 switch (err2) { 1144 case 0: |
1145 nfsd_copy_boot_verifier(verf, nn); | 1145 nfsd_copy_write_verifier(verf, nn); |
1146 err2 = filemap_check_wb_err(nf->nf_file->f_mapping, 1147 since); 1148 break; 1149 case -EINVAL: 1150 err = nfserr_notsupp; 1151 break; 1152 default: | 1146 err2 = filemap_check_wb_err(nf->nf_file->f_mapping, 1147 since); 1148 break; 1149 case -EINVAL: 1150 err = nfserr_notsupp; 1151 break; 1152 default: |
1153 nfsd_reset_boot_verifier(nn); | 1153 nfsd_reset_write_verifier(nn); |
1154 } 1155 err = nfserrno(err2); 1156 } else | 1154 } 1155 err = nfserrno(err2); 1156 } else |
1157 nfsd_copy_boot_verifier(verf, nn); | 1157 nfsd_copy_write_verifier(verf, nn); |
1158 1159 nfsd_file_put(nf); 1160out: 1161 return err; 1162} 1163#endif /* CONFIG_NFSD_V3 */ 1164 1165static __be32 --- 1241 unchanged lines hidden --- | 1158 1159 nfsd_file_put(nf); 1160out: 1161 return err; 1162} 1163#endif /* CONFIG_NFSD_V3 */ 1164 1165static __be32 --- 1241 unchanged lines hidden --- |