From: Benny Halevy <bhalevy@panasas.com>
To: Boaz Harrosh <bharrosh@panasas.com>
Cc: Trond Myklebust <Trond.Myklebust@netapp.com>,
NFS list <linux-nfs@vger.kernel.org>,
open-osd <osd-dev@open-osd.org>
Subject: Re: [PATCH 16/23] pnfs: support for non-rpc layout drivers
Date: Mon, 23 May 2011 02:25:17 +0300 [thread overview]
Message-ID: <4DD99B5D.4050600@panasas.com> (raw)
In-Reply-To: <4DD96697.50800@panasas.com>
On 2011-05-22 22:40, Benny Halevy wrote:
> On 2011-05-22 19:52, Boaz Harrosh wrote:
>> From: Benny Halevy <bhalevy@panasas.com>
>> +int
>> +pnfs_ld_write_done(struct nfs_write_data *data)
>> +{
>> + int status;
>> +
>
>
>> + if (!data->pnfs_error) {
>> + pnfs_set_layoutcommit(data);
>
> We need at least to set data->task.tk_status to 0
>
>> + data->mds_ops->rpc_call_done(&data->task, data);
>> + data->mds_ops->rpc_release(data);
>
> Where's the put_lseg you had in PATCH 10/13?
OK, this is done correctly in the nfs_*data_release
functions.
Benny
>
> Benny
>
>> + return 0;
>> + }
>> +
>> + put_lseg(data->lseg);
>> + data->lseg = NULL;
>> + dprintk("%s: pnfs_error=%d, retry via MDS\n", __func__,
>> + data->pnfs_error);
>> + status = nfs_initiate_write(data, NFS_CLIENT(data->inode),
>> + data->mds_ops, NFS_FILE_SYNC);
>> + return status ? : -EAGAIN;
>> +}
>> +EXPORT_SYMBOL_GPL(pnfs_ld_write_done);
>> +
>> enum pnfs_try_status
>> pnfs_try_to_write_data(struct nfs_write_data *wdata,
>> const struct rpc_call_ops *call_ops, int how)
>> @@ -1084,6 +1109,31 @@ pnfs_try_to_write_data(struct nfs_write_data *wdata,
>> }
>>
>> /*
>> + * Called by non rpc-based layout drivers
>> + */
>> +int
>> +pnfs_ld_read_done(struct nfs_read_data *data)
>> +{
>> + int status;
>> +
>> + if (!data->pnfs_error) {
>> + __nfs4_read_done_cb(data);
>> + data->mds_ops->rpc_call_done(&data->task, data);
>> + data->mds_ops->rpc_release(data);
>> + return 0;
>> + }
>> +
>> + put_lseg(data->lseg);
>> + data->lseg = NULL;
>> + dprintk("%s: pnfs_error=%d, retry via MDS\n", __func__,
>> + data->pnfs_error);
>> + status = nfs_initiate_read(data, NFS_CLIENT(data->inode),
>> + data->mds_ops);
>> + return status ? : -EAGAIN;
>> +}
>> +EXPORT_SYMBOL_GPL(pnfs_ld_read_done);
>> +
>> +/*
>> * Call the appropriate parallel I/O subsystem read function.
>> */
>> enum pnfs_try_status
>> diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
>> index e24c7fb..2f8776b 100644
>> --- a/fs/nfs/pnfs.h
>> +++ b/fs/nfs/pnfs.h
>> @@ -166,6 +166,8 @@ void pnfs_roc_set_barrier(struct inode *ino, u32 barrier);
>> bool pnfs_roc_drain(struct inode *ino, u32 *barrier);
>> void pnfs_set_layoutcommit(struct nfs_write_data *wdata);
>> int pnfs_layoutcommit_inode(struct inode *inode, bool sync);
>> +int pnfs_ld_write_done(struct nfs_write_data *);
>> +int pnfs_ld_read_done(struct nfs_read_data *);
>>
>> static inline int lo_fail_bit(u32 iomode)
>> {
>> diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
>> index 890dce2..39c1e1b 100644
>> --- a/include/linux/nfs_xdr.h
>> +++ b/include/linux/nfs_xdr.h
>> @@ -1086,6 +1086,7 @@ struct nfs_read_data {
>> const struct rpc_call_ops *mds_ops;
>> int (*read_done_cb) (struct rpc_task *task, struct nfs_read_data *data);
>> __u64 mds_offset;
>> + int pnfs_error;
>> struct page *page_array[NFS_PAGEVEC_SIZE];
>> };
>>
>> @@ -1111,6 +1112,7 @@ struct nfs_write_data {
>> unsigned long timestamp; /* For lease renewal */
>> #endif
>> __u64 mds_offset; /* Filelayout dense stripe */
>> + int pnfs_error;
>> struct page *page_array[NFS_PAGEVEC_SIZE];
>> };
>>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2011-05-22 23:25 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-22 16:43 [PATCHSET V4 00/23 boaz] pnfs for 2.6.40 Boaz Harrosh
2011-05-22 16:47 ` [PATCH 01/23] pnfs: CB_NOTIFY_DEVICEID Boaz Harrosh
2011-05-22 16:47 ` [PATCH 02/23] pnfs: Use byte-range for layoutget Boaz Harrosh
2011-05-22 16:47 ` [PATCH 03/23] pnfs: align layoutget requests on page boundaries Boaz Harrosh
2011-05-22 16:48 ` [PATCH 04/23] pnfs: Use byte-range for cb_layoutrecall Boaz Harrosh
2011-05-22 16:48 ` [PATCH 05/23] pnfs: client stats Boaz Harrosh
2011-05-22 16:48 ` [PATCH 06/23] pnfs: resolve header dependency in pnfs.h Boaz Harrosh
2011-05-22 16:49 ` [PATCH 07/23] pnfs-obj: objlayoutdriver module skeleton Boaz Harrosh
2011-05-22 16:49 ` [PATCH 08/23] pnfs-obj: pnfs_osd XDR definitions Boaz Harrosh
2011-05-22 16:49 ` [PATCH 09/23] pnfs-obj: pnfs_osd XDR client implementation Boaz Harrosh
2011-05-22 16:50 ` [PATCH 10/23] pnfs-obj: decode layout, alloc/free lseg Boaz Harrosh
2011-05-22 16:50 ` [PATCH 11/23] pnfs: per mount layout driver private data Boaz Harrosh
2011-05-22 16:50 ` [PATCH 12/23] pnfs-obj: objio_osd device information retrieval and caching Boaz Harrosh
2011-05-22 16:51 ` [PATCH 13/23] pnfs: set/unset layoutdriver Boaz Harrosh
2011-05-22 16:51 ` [PATCH 14/23] pnfs: alloc and free layout_hdr layoutdriver methods Boaz Harrosh
2011-05-22 16:51 ` [PATCH 15/23] pnfs-obj: define per-mount and per-inode private structures Boaz Harrosh
2011-05-22 16:52 ` [PATCH 16/23] pnfs: support for non-rpc layout drivers Boaz Harrosh
2011-05-22 19:40 ` Benny Halevy
2011-05-22 23:25 ` Benny Halevy [this message]
2011-05-23 4:22 ` Boaz Harrosh
2011-05-23 14:54 ` Fred Isaman
2011-05-23 17:56 ` Boaz Harrosh
2011-05-22 16:52 ` [PATCH 17/23] pnfs-obj: osd raid engine read/write implementation Boaz Harrosh
2011-05-22 16:52 ` [PATCH 18/23] pnfs: layoutreturn Boaz Harrosh
2011-05-22 16:52 ` [PATCH 19/23] pnfs: layoutret_on_setattr Boaz Harrosh
2011-05-22 16:53 ` [PATCH 20/23] pnfs: encode_layoutreturn Boaz Harrosh
2011-05-22 16:53 ` [PATCH 21/23] pnfs-obj: report errors and .encode_layoutreturn Implementation Boaz Harrosh
2011-05-22 16:53 ` [PATCH 22/23] pnfs: encode_layoutcommit Boaz Harrosh
2011-05-22 16:54 ` [PATCH 23/23] pnfs-obj: objlayout_encode_layoutcommit implementation Boaz Harrosh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4DD99B5D.4050600@panasas.com \
--to=bhalevy@panasas.com \
--cc=Trond.Myklebust@netapp.com \
--cc=bharrosh@panasas.com \
--cc=linux-nfs@vger.kernel.org \
--cc=osd-dev@open-osd.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.