mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
NFS Cleanup: move call to generic_write_checks() into fs/nfs/direct.c
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
parent
2f3c7d87a3
commit
89698b24d2
@ -988,6 +988,7 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,
|
||||
ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
|
||||
{
|
||||
ssize_t result = -EINVAL;
|
||||
size_t count;
|
||||
struct file *file = iocb->ki_filp;
|
||||
struct address_space *mapping = file->f_mapping;
|
||||
struct inode *inode = mapping->host;
|
||||
@ -998,8 +999,11 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
|
||||
dfprintk(FILE, "NFS: direct write(%pD2, %zd@%Ld)\n",
|
||||
file, iov_iter_count(iter), (long long) iocb->ki_pos);
|
||||
|
||||
nfs_add_stats(mapping->host, NFSIOS_DIRECTWRITTENBYTES,
|
||||
iov_iter_count(iter));
|
||||
result = generic_write_checks(iocb, iter);
|
||||
if (result <= 0)
|
||||
return result;
|
||||
count = result;
|
||||
nfs_add_stats(mapping->host, NFSIOS_DIRECTWRITTENBYTES, count);
|
||||
|
||||
pos = iocb->ki_pos;
|
||||
end = (pos + iov_iter_count(iter) - 1) >> PAGE_SHIFT;
|
||||
@ -1017,7 +1021,7 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
task_io_account_write(iov_iter_count(iter));
|
||||
task_io_account_write(count);
|
||||
|
||||
result = -ENOMEM;
|
||||
dreq = nfs_direct_req_alloc();
|
||||
@ -1025,7 +1029,7 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
|
||||
goto out_unlock;
|
||||
|
||||
dreq->inode = inode;
|
||||
dreq->bytes_left = dreq->max_count = iov_iter_count(iter);
|
||||
dreq->bytes_left = dreq->max_count = count;
|
||||
dreq->io_start = pos;
|
||||
dreq->ctx = get_nfs_open_context(nfs_file_open_context(iocb->ki_filp));
|
||||
l_ctx = nfs_get_lock_context(dreq->ctx);
|
||||
|
@ -629,12 +629,8 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from)
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
if (iocb->ki_flags & IOCB_DIRECT) {
|
||||
result = generic_write_checks(iocb, from);
|
||||
if (result <= 0)
|
||||
return result;
|
||||
if (iocb->ki_flags & IOCB_DIRECT)
|
||||
return nfs_file_direct_write(iocb, from);
|
||||
}
|
||||
|
||||
dprintk("NFS: write(%pD2, %zu@%Ld)\n",
|
||||
file, count, (long long) iocb->ki_pos);
|
||||
|
Loading…
Reference in New Issue
Block a user