From: Benny Halevy <bhalevy@panasas.com>
To: andros@netapp.com
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 09/16] SQUASHME pnfs-submit: pnfs_update_layout always references the lseg
Date: Mon, 12 Jul 2010 12:13:04 +0300 [thread overview]
Message-ID: <4C3ADCA0.4060904@panasas.com> (raw)
In-Reply-To: <1278542063-4009-10-git-send-email-andros@netapp.com>
On Jul. 08, 2010, 1:34 +0300, andros@netapp.com wrote:
> From: Andy Adamson <andros@netapp.com>
>
> So remove test_ref
>
> Signed-off-by: Andy Adamson <andros@netapp.com>
OK, but this has to be reintroduced in post submit for
better synchronization with parallel layout gets and returns.
Benny
> ---
> fs/nfs/pnfs.c | 30 ++++++++++--------------------
> 1 files changed, 10 insertions(+), 20 deletions(-)
>
> diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
> index 118d34c..d4ffd1c 100644
> --- a/fs/nfs/pnfs.c
> +++ b/fs/nfs/pnfs.c
> @@ -997,9 +997,7 @@ has_matching_lseg(struct pnfs_layout_segment *lseg,
> */
> static struct pnfs_layout_segment *
> pnfs_has_layout(struct pnfs_layout_type *lo,
> - struct nfs4_pnfs_layout_segment *range,
> - bool take_ref,
> - bool only_valid)
> + struct nfs4_pnfs_layout_segment *range)
> {
> struct pnfs_layout_segment *lseg, *ret = NULL;
>
> @@ -1007,28 +1005,24 @@ pnfs_has_layout(struct pnfs_layout_type *lo,
>
> BUG_ON_UNLOCKED_LO(lo);
> list_for_each_entry (lseg, &lo->segs, fi_list) {
> - if (has_matching_lseg(lseg, range) &&
> - (lseg->valid || !only_valid)) {
> + if (has_matching_lseg(lseg, range)) {
> ret = lseg;
> - if (take_ref)
> - get_lseg(ret);
> + get_lseg(ret);
> break;
> }
> if (cmp_layout(range, &lseg->range) > 0)
> break;
> }
>
> - dprintk("%s:Return lseg %p take_ref %d ref %d valid %d\n",
> - __func__, ret, take_ref,
> - ret ? atomic_read(&ret->kref.refcount) : 0,
> + dprintk("%s:Return lseg %p ref %d valid %d\n",
> + __func__, ret, ret ? atomic_read(&ret->kref.refcount) : 0,
> ret ? ret->valid : 0);
> return ret;
> }
>
> /* Update the file's layout for the given range and iomode.
> * Layout is retreived from the server if needed.
> - * If lsegpp is given, the appropriate layout segment is referenced and
> - * returned to the caller.
> + * The appropriate layout segment is referenced and returned to the caller.
> */
> void
> _pnfs_update_layout(struct inode *ino,
> @@ -1046,10 +1040,8 @@ _pnfs_update_layout(struct inode *ino,
> struct nfs_inode *nfsi = NFS_I(ino);
> struct pnfs_layout_type *lo;
> struct pnfs_layout_segment *lseg = NULL;
> - bool take_ref = (lsegpp != NULL);
>
> - if (take_ref)
> - *lsegpp = NULL;
> + *lsegpp = NULL;
> lo = nfs_lock_alloc_layout(ino);
> if (lo == NULL) {
> dprintk("%s ERROR: can't get pnfs_layout_type\n", __func__);
> @@ -1057,10 +1049,9 @@ _pnfs_update_layout(struct inode *ino,
> }
>
> /* Check to see if the layout for the given range already exists */
> - lseg = pnfs_has_layout(lo, &arg, take_ref, !take_ref);
> + lseg = pnfs_has_layout(lo, &arg);
> if (lseg && !lseg->valid) {
> - if (take_ref)
> - put_lseg_locked(lseg);
> + put_lseg_locked(lseg);
> /* someone is cleaning the layout */
> lseg = NULL;
> goto out_unlock;
> @@ -1099,8 +1090,7 @@ out:
> nfsi->layout->pnfs_layout_state, lseg);
> return;
> out_unlock:
> - if (lsegpp)
> - *lsegpp = lseg;
> + *lsegpp = lseg;
> spin_unlock(&ino->i_lock);
> goto out;
> }
next prev parent reply other threads:[~2010-07-12 9:13 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-07 22:34 [PATCH 0/16] pnfs-submit fix layout allocation and reference counting andros
2010-07-07 22:34 ` [PATCH 01/16] SQUASHME pnfs-submit: add state flag for layoutcommit_needed andros
2010-07-07 22:34 ` [PATCH 02/16] SQUASHME: pnfs-submit: move pnfs_layout_suspend back to nfs_inode andros
2010-07-07 22:34 ` [PATCH 03/16] SQUASHME pnfs-submit embed pnfs_layout_type andros
2010-07-07 22:34 ` [PATCH 04/16] SQUASHME pnfs-submit: filelayout: use new alloc/free_layout API andros
2010-07-07 22:34 ` [PATCH 05/16] SQUASHME pnfs-submit: rewrite layout allocation andros
2010-07-07 22:34 ` [PATCH 06/16] SQUASHME pnfs-submit; fix pnfs_update_layout reference counting andros
2010-07-07 22:34 ` [PATCH 07/16] SQUASHME pnfs_submit: don't get a reference on boundary calculation andros
2010-07-07 22:34 ` [PATCH 08/16] SQUASHME pnfs-submit: don't reference the layout in init_lseg andros
2010-07-07 22:34 ` [PATCH 09/16] SQUASHME pnfs-submit: pnfs_update_layout always references the lseg andros
2010-07-07 22:34 ` [PATCH 10/16] SQUASHME pnfs-submit: reference the layout when inserted into segs list andros
2010-07-07 22:34 ` [PATCH 11/16] SQUASHME pnfs-submit: rename put_layout to put_layout_locked andros
2010-07-07 22:34 ` [PATCH 12/16] SQUASHME pnfs-submit: reference layout across layoutcommit andros
2010-07-07 22:34 ` [PATCH 13/16] SQUASHME pnfs-submit: reference layout for layoutreturn andros
2010-07-07 22:34 ` [PATCH 14/16] SQUASHME pnfs-submit: remove put_layout from pnfs_free_layout andros
2010-07-07 22:34 ` [PATCH 15/16] SQUASHME pnfs-submit: do not reference a layout in destroy_layout andros
2010-07-07 22:34 ` [PATCH 16/16] SQUASHME pnfs-submit: remove grab_current_layout andros
2010-07-12 17:19 ` [PATCH 12/16] SQUASHME pnfs-submit: reference layout across layoutcommit Benny Halevy
2010-07-12 18:27 ` William A. (Andy) Adamson
[not found] ` <AANLkTil1wUQUTht0QP7_Ttaagw0-LXef2J8wU6wSFUWG-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-07-12 18:29 ` Benny Halevy
2010-07-13 13:50 ` William A. (Andy) Adamson
2010-07-12 17:25 ` Boaz Harrosh
2010-07-12 18:09 ` William A. (Andy) Adamson
[not found] ` <AANLkTilWfV86wpO7vFho3FmL9y9Y6Sx9_-knKq7T-snu-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-07-12 18:27 ` Benny Halevy
2010-07-12 18:28 ` William A. (Andy) Adamson
[not found] ` <AANLkTilrcKirEQLe5mhtYNAnaJBSn6q4edC3TlXJd1rm-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-07-12 19:54 ` Benny Halevy
2010-07-12 9:13 ` Benny Halevy [this message]
2010-07-12 8:30 ` [PATCH 05/16] SQUASHME pnfs-submit: rewrite layout allocation Benny Halevy
2010-07-13 13:39 ` William A. (Andy) Adamson
[not found] ` <AANLkTilb6ePL7s6H4TbhGfJt05Yw7Gc24V0C8cPHC22K-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-07-13 14:04 ` Benny Halevy
2010-07-12 16:32 ` [PATCH 04/16] SQUASHME pnfs-submit: filelayout: use new alloc/free_layout API Boaz Harrosh
2010-07-12 16:29 ` [PATCH 03/16] SQUASHME pnfs-submit embed pnfs_layout_type Boaz Harrosh
2010-07-12 17:05 ` Benny Halevy
2010-07-12 17:38 ` William A. (Andy) Adamson
2010-07-12 17:34 ` William A. (Andy) Adamson
[not found] ` <AANLkTikTMLQJwj1PeW2Y0dfmRcVFdNr6sasxJtaAiMg4-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-07-12 17:43 ` Boaz Harrosh
2010-07-12 18:33 ` William A. (Andy) Adamson
2010-07-07 22:57 ` [PATCH 0/16] pnfs-submit fix layout allocation and reference counting Gilliam, PaulX J
2010-07-08 10:16 ` Boaz Harrosh
2010-07-08 16:14 ` William A. (Andy) Adamson
2010-07-12 15:33 ` 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=4C3ADCA0.4060904@panasas.com \
--to=bhalevy@panasas.com \
--cc=andros@netapp.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).