From: Benny Halevy <bhalevy@panasas.com>
To: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: linux-nfs@vger.kernel.org, Boaz Harrosh <bharrosh@panasas.com>
Subject: Re: [PATCH v6 01/26] NFSv4.1: use struct nfs_client to qualify deviceid
Date: Mon, 23 May 2011 20:33:02 +0300 [thread overview]
Message-ID: <4DDA9A4E.4090500@panasas.com> (raw)
In-Reply-To: <1306168454-10905-1-git-send-email-bhalevy@panasas.com>
On 2011-05-23 19:34, Benny Halevy wrote:
> deviceids are unique per server, per layout type.
> Therefore, in the global cache in the files layout driver
> deviceids from different servers may clash so we need
> to qualify them with a struct nfs_client that represents
> the nfs server that returned the deviceid.
>
> Introduced in 2.6.39 commit ea8eecdd
> "NFSv4.1 move deviceid cache to filelayout driver"
Note this is required for stable 2.6.39
Benny
>
> Signed-off-by: Benny Halevy <bhalevy@panasas.com>
> ---
> fs/nfs/nfs4filelayout.c | 2 +-
> fs/nfs/nfs4filelayout.h | 3 ++-
> fs/nfs/nfs4filelayoutdev.c | 9 ++++-----
> 3 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
> index be79dc9..ff47fdf 100644
> --- a/fs/nfs/nfs4filelayout.c
> +++ b/fs/nfs/nfs4filelayout.c
> @@ -440,7 +440,7 @@ filelayout_check_layout(struct pnfs_layout_hdr *lo,
> }
>
> /* find and reference the deviceid */
> - dsaddr = nfs4_fl_find_get_deviceid(id);
> + dsaddr = nfs4_fl_find_get_deviceid(NFS_SERVER(lo->plh_inode)->nfs_client, id);
> if (dsaddr == NULL) {
> dsaddr = get_device_info(lo->plh_inode, id, gfp_flags);
> if (dsaddr == NULL)
> diff --git a/fs/nfs/nfs4filelayout.h b/fs/nfs/nfs4filelayout.h
> index 2b461d7..301b955 100644
> --- a/fs/nfs/nfs4filelayout.h
> +++ b/fs/nfs/nfs4filelayout.h
> @@ -60,6 +60,7 @@ struct nfs4_pnfs_ds {
>
> struct nfs4_file_layout_dsaddr {
> struct hlist_node node;
> + struct nfs_client *nfs_client;
> struct nfs4_deviceid deviceid;
> atomic_t ref;
> unsigned long flags;
> @@ -101,7 +102,7 @@ u32 nfs4_fl_calc_ds_index(struct pnfs_layout_segment *lseg, u32 j);
> struct nfs4_pnfs_ds *nfs4_fl_prepare_ds(struct pnfs_layout_segment *lseg,
> u32 ds_idx);
> extern struct nfs4_file_layout_dsaddr *
> -nfs4_fl_find_get_deviceid(struct nfs4_deviceid *dev_id);
> +nfs4_fl_find_get_deviceid(struct nfs_client *, struct nfs4_deviceid *dev_id);
> extern void nfs4_fl_put_deviceid(struct nfs4_file_layout_dsaddr *dsaddr);
> struct nfs4_file_layout_dsaddr *
> get_device_info(struct inode *inode, struct nfs4_deviceid *dev_id, gfp_t gfp_flags);
> diff --git a/fs/nfs/nfs4filelayoutdev.c b/fs/nfs/nfs4filelayoutdev.c
> index db07c7a..42e3266 100644
> --- a/fs/nfs/nfs4filelayoutdev.c
> +++ b/fs/nfs/nfs4filelayoutdev.c
> @@ -431,7 +431,7 @@ decode_device(struct inode *ino, struct pnfs_device *pdev, gfp_t gfp_flags)
> dsaddr->stripe_indices = stripe_indices;
> stripe_indices = NULL;
> dsaddr->ds_num = num;
> -
> + dsaddr->nfs_client = NFS_SERVER(ino)->nfs_client;
> memcpy(&dsaddr->deviceid, &pdev->dev_id, sizeof(pdev->dev_id));
>
> for (i = 0; i < dsaddr->ds_num; i++) {
> @@ -516,7 +516,7 @@ decode_and_add_device(struct inode *inode, struct pnfs_device *dev, gfp_t gfp_fl
> }
>
> spin_lock(&filelayout_deviceid_lock);
> - d = nfs4_fl_find_get_deviceid(&new->deviceid);
> + d = nfs4_fl_find_get_deviceid(new->nfs_client, &new->deviceid);
> if (d) {
> spin_unlock(&filelayout_deviceid_lock);
> nfs4_fl_free_deviceid(new);
> @@ -610,16 +610,15 @@ nfs4_fl_put_deviceid(struct nfs4_file_layout_dsaddr *dsaddr)
> }
>
> struct nfs4_file_layout_dsaddr *
> -nfs4_fl_find_get_deviceid(struct nfs4_deviceid *id)
> +nfs4_fl_find_get_deviceid(struct nfs_client *clp, struct nfs4_deviceid *id)
> {
> struct nfs4_file_layout_dsaddr *d;
> struct hlist_node *n;
> long hash = nfs4_fl_deviceid_hash(id);
>
> -
> rcu_read_lock();
> hlist_for_each_entry_rcu(d, n, &filelayout_deviceid_cache[hash], node) {
> - if (!memcmp(&d->deviceid, id, sizeof(*id))) {
> + if (d->nfs_client == clp && !memcmp(&d->deviceid, id, sizeof(*id))) {
> if (!atomic_inc_not_zero(&d->ref))
> goto fail;
> rcu_read_unlock();
next prev parent reply other threads:[~2011-05-23 17:33 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-23 16:33 [PATCHSET v6 0/26] pnfs for 2.6.40 Benny Halevy
2011-05-23 16:34 ` [PATCH v6 01/26] NFSv4.1: use struct nfs_client to qualify deviceid Benny Halevy
2011-05-23 17:33 ` Benny Halevy [this message]
2011-05-23 16:34 ` [PATCH v6 02/26] pnfs: resolve header dependency in pnfs.h Benny Halevy
2011-05-23 16:34 ` [PATCH v6 03/26] NFSv4.1: make deviceid cache global Benny Halevy
2011-05-23 16:34 ` [PATCH v6 04/26] NFSv4.1: purge deviceid cache on nfs_free_client Benny Halevy
2011-05-23 17:21 ` Benny Halevy
2011-05-23 16:35 ` [PATCH v6 05/26] pnfs: CB_NOTIFY_DEVICEID Benny Halevy
2011-05-23 16:35 ` [PATCH v6 06/26] SUNRPC: introduce xdr_init_decode_pages Benny Halevy
2011-05-23 16:35 ` [PATCH v6 07/26] pnfs: Use byte-range for layoutget Benny Halevy
2011-05-23 16:35 ` [PATCH v6 08/26] pnfs: align layoutget requests on page boundaries Benny Halevy
2011-05-23 16:35 ` [PATCH v6 09/26] pnfs: Use byte-range for cb_layoutrecall Benny Halevy
2011-05-23 16:36 ` [PATCH v6 10/26] pnfs: client stats Benny Halevy
2011-05-23 16:36 ` [PATCH v6 11/26] pnfs-obj: objlayoutdriver module skeleton Benny Halevy
2011-05-23 16:36 ` [PATCH v6 12/26] pnfs-obj: pnfs_osd XDR definitions Benny Halevy
2011-05-23 16:36 ` [PATCH v6 13/26] pnfs-obj: pnfs_osd XDR client implementation Benny Halevy
2011-05-23 19:46 ` [PATCH] SQUASHME: pnf-obj xdr_cli: Wrong type in comments Boaz Harrosh
2011-05-23 16:37 ` [PATCH v6 14/26] pnfs-obj: decode layout, alloc/free lseg Benny Halevy
2011-05-23 19:45 ` [PATCH] SQUASHME: objio read/write patch: Bugs fixes Boaz Harrosh
2011-05-24 13:10 ` Benny Halevy
2011-05-24 14:37 ` Boaz Harrosh
2011-05-24 15:57 ` Benny Halevy
2011-05-24 16:04 ` Boaz Harrosh
2011-05-23 16:37 ` [PATCH v6 15/26] pnfs-obj: objio_osd device information retrieval and caching Benny Halevy
2011-05-23 16:37 ` [PATCH v6 16/26] NFSv4.1: use layout driver in global device cache Benny Halevy
2011-05-23 16:37 ` [PATCH v6 17/26] pnfs: alloc and free layout_hdr layoutdriver methods Benny Halevy
2011-05-23 16:37 ` [PATCH v6 18/26] pnfs-obj: define per-inode private structure Benny Halevy
2011-05-23 16:38 ` [PATCH v6 19/26] pnfs: support for non-rpc layout drivers Benny Halevy
2011-05-23 18:10 ` Boaz Harrosh
2011-05-23 19:22 ` Benny Halevy
2011-05-23 19:43 ` [PATCH] SQUASHME: into pnfs: pnfs: support for non-rpc layout drivers: de-ref not needed Boaz Harrosh
2011-05-23 16:38 ` [PATCH v6 20/26] pnfs-obj: osd raid engine read/write implementation Benny Halevy
2011-05-25 13:39 ` Boaz Harrosh
2011-05-25 13:41 ` [PATCH] SQUASHME: pnfs-obj: pg_test check for max_io_size Boaz Harrosh
2011-05-25 16:57 ` Benny Halevy
2011-05-23 16:38 ` [PATCH v6 21/26] pnfs: layoutreturn Benny Halevy
2011-05-25 16:07 ` [PATCH] SQUASHME: pnfs: Fix NULL dereference in the -ENOMEM path Boaz Harrosh
2011-05-25 16:12 ` Boaz Harrosh
2011-05-25 16:19 ` [PATCH V2] SQUASHME: pnfs: Fix NULL dereference and leak " Boaz Harrosh
2011-05-25 16:37 ` Boaz Harrosh
2011-05-25 16:47 ` Benny Halevy
2011-05-25 16:40 ` [PATCH V3] " Boaz Harrosh
2011-05-25 16:55 ` Benny Halevy
2011-05-23 16:38 ` [PATCH v6 22/26] pnfs: layoutret_on_setattr Benny Halevy
2011-05-23 16:38 ` [PATCH v6 23/26] pnfs: encode_layoutreturn Benny Halevy
2011-05-23 16:39 ` [PATCH v6 24/26] pnfs-obj: report errors and .encode_layoutreturn Implementation Benny Halevy
2011-05-23 16:39 ` [PATCH v6 25/26] pnfs: encode_layoutcommit Benny Halevy
2011-05-23 16:39 ` [PATCH v6 26/26] pnfs-obj: objlayout_encode_layoutcommit implementation Benny Halevy
2011-05-23 18:20 ` [PATCHSET v6 0/26] pnfs for 2.6.40 Boaz Harrosh
2011-05-23 18:50 ` Boaz Harrosh
2011-05-24 15:16 ` Benny Halevy
[not found] ` <2E1EB2CF9ED1CB4AA966F0EB76EAB443080D6E54@SACMVEXC2-PRD.hq.netapp.com>
2011-05-24 15:49 ` Benny Halevy
2011-05-24 17:07 ` Fred Isaman
2011-05-24 15:56 ` Boaz Harrosh
2011-05-24 16:21 ` Trond Myklebust
2011-05-24 16:58 ` Boaz Harrosh
2011-05-24 17:05 ` Trond Myklebust
2011-05-24 17:07 ` 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=4DDA9A4E.4090500@panasas.com \
--to=bhalevy@panasas.com \
--cc=Trond.Myklebust@netapp.com \
--cc=bharrosh@panasas.com \
--cc=linux-nfs@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).