Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5053aa56 authored by Fred Isaman's avatar Fred Isaman Committed by Trond Myklebust
Browse files

NFSv4.1: Send lseg down into nfs_write_rpcsetup



We grab the lseg sent in from the doio function and attach it to
each struct nfs_write_data created.  This is how the lseg will be
sent to the layout driver.

Signed-off-by: default avatarFred Isaman <iisaman@netapp.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent b029bc9b
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ void nfs_writedata_free(struct nfs_write_data *p)

static void nfs_writedata_release(struct nfs_write_data *wdata)
{
	put_lseg(wdata->lseg);
	put_nfs_open_context(wdata->args.context);
	nfs_writedata_free(wdata);
}
@@ -840,6 +841,7 @@ static int nfs_write_rpcsetup(struct nfs_page *req,
		struct nfs_write_data *data,
		const struct rpc_call_ops *call_ops,
		unsigned int count, unsigned int offset,
		struct pnfs_layout_segment *lseg,
		int how)
{
	struct inode *inode = req->wb_context->path.dentry->d_inode;
@@ -850,6 +852,7 @@ static int nfs_write_rpcsetup(struct nfs_page *req,
	data->req = req;
	data->inode = inode = req->wb_context->path.dentry->d_inode;
	data->cred = req->wb_context->cred;
	data->lseg = get_lseg(lseg);

	data->args.fh     = NFS_FH(inode);
	data->args.offset = req_offset(req) + offset;
@@ -930,7 +933,7 @@ static int nfs_flush_multi(struct inode *inode, struct list_head *head, unsigned
		if (nbytes < wsize)
			wsize = nbytes;
		ret2 = nfs_write_rpcsetup(req, data, &nfs_write_partial_ops,
				   wsize, offset, how);
					  wsize, offset, lseg, how);
		if (ret == 0)
			ret = ret2;
		offset += wsize;
@@ -978,7 +981,7 @@ static int nfs_flush_one(struct inode *inode, struct list_head *head, unsigned i
	req = nfs_list_entry(data->pages.next);

	/* Set up the argument struct */
	return nfs_write_rpcsetup(req, data, &nfs_write_full_ops, count, 0, how);
	return nfs_write_rpcsetup(req, data, &nfs_write_full_ops, count, 0, lseg, how);
 out_bad:
	while (!list_empty(head)) {
		req = nfs_list_entry(head->next);
+1 −0
Original line number Diff line number Diff line
@@ -1038,6 +1038,7 @@ struct nfs_write_data {
	unsigned int		npages;		/* Max length of pagevec */
	struct nfs_writeargs	args;		/* argument struct */
	struct nfs_writeres	res;		/* result struct */
	struct pnfs_layout_segment *lseg;
	int (*write_done_cb) (struct rpc_task *task, struct nfs_write_data *data);
#ifdef CONFIG_NFS_V4
	unsigned long		timestamp;	/* For lease renewal */