patch-2.4.20 linux-2.4.20/fs/nfs/write.c
Next file: linux-2.4.20/fs/nfsd/export.c
Previous file: linux-2.4.20/fs/nfs/unlink.c
Back to the patch index
Back to the overall index
- Lines: 108
- Date:
Thu Nov 28 15:53:15 2002
- Orig file:
linux-2.4.19/fs/nfs/write.c
- Orig date:
Fri Aug 2 17:39:45 2002
diff -urN linux-2.4.19/fs/nfs/write.c linux-2.4.20/fs/nfs/write.c
@@ -77,6 +77,7 @@
struct nfs_fattr fattr;
struct nfs_writeverf verf;
struct list_head pages; /* Coalesced requests we wish to flush */
+ struct page *pagevec[NFS_WRITE_MAXIOV];
};
/*
@@ -105,6 +106,7 @@
if (p) {
memset(p, 0, sizeof(*p));
INIT_LIST_HEAD(&p->pages);
+ p->args.pages = p->pagevec;
}
return p;
}
@@ -163,7 +165,6 @@
inode->i_dev, (long long)NFS_FILEID(inode),
count, (long long)(page_offset(page) + offset));
- buffer = kmap(page) + offset;
base = page_offset(page) + offset;
flags = ((IS_SWAPFILE(inode)) ? NFS_RW_SWAP : 0) | NFS_RW_SYNC;
@@ -173,7 +174,7 @@
wsize = count;
result = NFS_PROTO(inode)->write(inode, cred, &fattr, flags,
- base, wsize, buffer, &verf);
+ offset, wsize, page, &verf);
nfs_write_attributes(inode, &fattr);
if (result < 0) {
@@ -186,7 +187,8 @@
wsize, result);
refresh = 1;
buffer += wsize;
- base += wsize;
+ base += wsize;
+ offset += wsize;
written += wsize;
count -= wsize;
/*
@@ -201,7 +203,6 @@
ClearPageError(page);
io_error:
- kunmap(page);
if (cred)
put_rpccred(cred);
@@ -861,29 +862,27 @@
nfs_write_rpcsetup(struct list_head *head, struct nfs_write_data *data)
{
struct nfs_page *req;
- struct iovec *iov;
+ struct page **pages;
unsigned int count;
/* Set up the RPC argument and reply structs
* NB: take care not to mess about with data->commit et al. */
- iov = data->args.iov;
+ pages = data->args.pages;
count = 0;
while (!list_empty(head)) {
struct nfs_page *req = nfs_list_entry(head->next);
nfs_list_remove_request(req);
nfs_list_add_request(req, &data->pages);
- iov->iov_base = kmap(req->wb_page) + req->wb_offset;
- iov->iov_len = req->wb_bytes;
+ *pages++ = req->wb_page;
count += req->wb_bytes;
- iov++;
- data->args.nriov++;
}
req = nfs_list_entry(data->pages.next);
data->inode = req->wb_inode;
data->cred = req->wb_cred;
data->args.fh = NFS_FH(req->wb_inode);
data->args.offset = page_offset(req->wb_page) + req->wb_offset;
+ data->args.pgbase = req->wb_offset;
data->args.count = count;
data->res.fattr = &data->fattr;
data->res.count = count;
@@ -948,11 +947,11 @@
msg.rpc_resp = &data->res;
msg.rpc_cred = data->cred;
- dprintk("NFS: %4d initiated write call (req %x/%Ld count %d nriov %d)\n",
+ dprintk("NFS: %4d initiated write call (req %x/%Ld count %u)\n",
task->tk_pid,
inode->i_dev,
(long long)NFS_FILEID(inode),
- data->args.count, data->args.nriov);
+ data->args.count);
rpc_clnt_sigmask(clnt, &oldset);
rpc_call_setup(task, &msg, 0);
@@ -1064,8 +1063,6 @@
nfs_list_remove_request(req);
page = req->wb_page;
- kunmap(page);
-
dprintk("NFS: write (%x/%Ld %d@%Ld)",
req->wb_inode->i_dev,
(long long)NFS_FILEID(req->wb_inode),
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)