linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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();


  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).