mirror of https://gitee.com/openkylin/linux.git
NFS: Clean up new multi-segment direct I/O changes
Simplify calling sequence of nfs_direct_{read,write}_schedule(), and rename them to reflect their new role. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
b9148c6b80
commit
02fe494619
|
@ -263,10 +263,14 @@ static const struct rpc_call_ops nfs_read_direct_ops = {
|
||||||
* handled automatically by nfs_direct_read_result(). Otherwise, if
|
* handled automatically by nfs_direct_read_result(). Otherwise, if
|
||||||
* no requests have been sent, just return an error.
|
* no requests have been sent, just return an error.
|
||||||
*/
|
*/
|
||||||
static ssize_t nfs_direct_read_schedule(struct nfs_direct_req *dreq, unsigned long user_addr, size_t count, loff_t pos)
|
static ssize_t nfs_direct_read_schedule_segment(struct nfs_direct_req *dreq,
|
||||||
|
const struct iovec *iov,
|
||||||
|
loff_t pos)
|
||||||
{
|
{
|
||||||
struct nfs_open_context *ctx = dreq->ctx;
|
struct nfs_open_context *ctx = dreq->ctx;
|
||||||
struct inode *inode = ctx->path.dentry->d_inode;
|
struct inode *inode = ctx->path.dentry->d_inode;
|
||||||
|
unsigned long user_addr = (unsigned long)iov->iov_base;
|
||||||
|
size_t count = iov->iov_len;
|
||||||
size_t rsize = NFS_SERVER(inode)->rsize;
|
size_t rsize = NFS_SERVER(inode)->rsize;
|
||||||
unsigned int pgbase;
|
unsigned int pgbase;
|
||||||
int result;
|
int result;
|
||||||
|
@ -363,9 +367,7 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,
|
||||||
|
|
||||||
for (seg = 0; seg < nr_segs; seg++) {
|
for (seg = 0; seg < nr_segs; seg++) {
|
||||||
const struct iovec *vec = &iov[seg];
|
const struct iovec *vec = &iov[seg];
|
||||||
result = nfs_direct_read_schedule(dreq,
|
result = nfs_direct_read_schedule_segment(dreq, vec, pos);
|
||||||
(unsigned long)vec->iov_base,
|
|
||||||
vec->iov_len, pos);
|
|
||||||
if (result < 0)
|
if (result < 0)
|
||||||
break;
|
break;
|
||||||
requested_bytes += result;
|
requested_bytes += result;
|
||||||
|
@ -631,10 +633,14 @@ static const struct rpc_call_ops nfs_write_direct_ops = {
|
||||||
* handled automatically by nfs_direct_write_result(). Otherwise, if
|
* handled automatically by nfs_direct_write_result(). Otherwise, if
|
||||||
* no requests have been sent, just return an error.
|
* no requests have been sent, just return an error.
|
||||||
*/
|
*/
|
||||||
static ssize_t nfs_direct_write_schedule(struct nfs_direct_req *dreq, unsigned long user_addr, size_t count, loff_t pos, int sync)
|
static ssize_t nfs_direct_write_schedule_segment(struct nfs_direct_req *dreq,
|
||||||
|
const struct iovec *iov,
|
||||||
|
loff_t pos, int sync)
|
||||||
{
|
{
|
||||||
struct nfs_open_context *ctx = dreq->ctx;
|
struct nfs_open_context *ctx = dreq->ctx;
|
||||||
struct inode *inode = ctx->path.dentry->d_inode;
|
struct inode *inode = ctx->path.dentry->d_inode;
|
||||||
|
unsigned long user_addr = (unsigned long)iov->iov_base;
|
||||||
|
size_t count = iov->iov_len;
|
||||||
size_t wsize = NFS_SERVER(inode)->wsize;
|
size_t wsize = NFS_SERVER(inode)->wsize;
|
||||||
unsigned int pgbase;
|
unsigned int pgbase;
|
||||||
int result;
|
int result;
|
||||||
|
@ -735,10 +741,8 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,
|
||||||
|
|
||||||
for (seg = 0; seg < nr_segs; seg++) {
|
for (seg = 0; seg < nr_segs; seg++) {
|
||||||
const struct iovec *vec = &iov[seg];
|
const struct iovec *vec = &iov[seg];
|
||||||
result = nfs_direct_write_schedule(dreq,
|
result = nfs_direct_write_schedule_segment(dreq, vec,
|
||||||
(unsigned long)vec->iov_base,
|
pos, sync);
|
||||||
vec->iov_len,
|
|
||||||
pos, sync);
|
|
||||||
if (result < 0)
|
if (result < 0)
|
||||||
break;
|
break;
|
||||||
requested_bytes += result;
|
requested_bytes += result;
|
||||||
|
|
Loading…
Reference in New Issue