From: Benny Halevy <bhalevy@panasas.com>
To: Fred Isaman <iisaman@netapp.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 07/10] pnfs-submit: avoid race handling return on close
Date: Tue, 15 Jun 2010 13:06:12 -0400 [thread overview]
Message-ID: <4C17B304.4070308@panasas.com> (raw)
In-Reply-To: <1276566375-24566-8-git-send-email-iisaman@netapp.com>
On Jun. 14, 2010, 21:46 -0400, Fred Isaman <iisaman@netapp.com> wrote:
> This prepares for the next patch.
>
> NOTE this doesn't really fix any current race, since
> layout going to NULL is OK. But layout changing from NULL to nonNULL
> is a real race that is not fixed
>
> Signed-off-by: Fred Isaman <iisaman@netapp.com>
> ---
> fs/nfs/nfs4state.c | 5 +++--
> fs/nfs/pnfs.c | 11 +++++++++++
> include/linux/nfs4_pnfs.h | 2 ++
> 3 files changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
> index d5144bd..8a7a64c 100644
> --- a/fs/nfs/nfs4state.c
> +++ b/fs/nfs/nfs4state.c
> @@ -594,11 +594,12 @@ static void __nfs4_close(struct path *path, struct nfs4_state *state,
> } else {
> #ifdef CONFIG_NFS_V4_1
> struct nfs_inode *nfsi = NFS_I(state->inode);
> + int roc = nfs4_roc_iomode(nfsi);
>
> - if (has_layout(nfsi) && nfsi->layout.roc_iomode) {
> + if (roc) {
> struct nfs4_pnfs_layout_segment range;
>
> - range.iomode = nfsi->layout.roc_iomode;
> + range.iomode = roc;
> range.offset = 0;
> range.length = NFS4_MAX_UINT64;
> pnfs_return_layout(state->inode, &range, NULL,
> diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
> index 6def09c..bd11ec7 100644
> --- a/fs/nfs/pnfs.c
> +++ b/fs/nfs/pnfs.c
> @@ -321,6 +321,17 @@ pnfs_unregister_layoutdriver(struct pnfs_layoutdriver_type *ld_type)
> #define BUG_ON_UNLOCKED_LO(lo) do {} while (0)
> #endif /* CONFIG_SMP */
>
> +int nfs4_roc_iomode(struct nfs_inode *nfsi)
> +{
> + int rv = 0;
> +
> + spin_lock(&pnfs_spinlock);
Why take the global lock rather than nfsi->lo_lock?
Benny
> + if (has_layout(nfsi))
> + rv = nfsi->layout.roc_iomode;
> + spin_unlock(&pnfs_spinlock);
> + return rv;
> +}
> +
> static inline void
> get_layout(struct pnfs_layout_type *lo)
> {
> diff --git a/include/linux/nfs4_pnfs.h b/include/linux/nfs4_pnfs.h
> index 0eb9b16..2ea131f 100644
> --- a/include/linux/nfs4_pnfs.h
> +++ b/include/linux/nfs4_pnfs.h
> @@ -86,6 +86,8 @@ layoutcommit_needed(struct nfs_inode *nfsi)
> return test_bit(NFS_INO_LAYOUTCOMMIT, &nfsi->pnfs_layout_state);
> }
>
> +int nfs4_roc_iomode(struct nfs_inode *nfs);
> +
> #else /* CONFIG_NFS_V4_1 */
>
> static inline bool
next prev parent reply other threads:[~2010-06-15 17:06 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-15 1:46 [PATCH 00/10] layout refcounting changes Fred Isaman
2010-06-15 1:46 ` [PATCH 01/10] pnfs-submit: separate locking from get and put of layout Fred Isaman
2010-06-15 1:46 ` [PATCH 02/10] pnfs-submit: split get_layout and grab_current_layout Fred Isaman
2010-06-15 1:46 ` [PATCH 03/10] pnfs-submit: remove list_empty check from put_layout Fred Isaman
2010-06-15 1:46 ` [PATCH 04/10] pnfs-submit: add backpointer to pnfs_layout_type Fred Isaman
2010-06-15 1:46 ` [PATCH 05/10] pnfs-submit: Move pnfs_layout_state and pnfs_layout_suspend back to nfs_inode Fred Isaman
2010-06-15 1:46 ` [PATCH 06/10] pnfs-submit: Add state flag for layoutcommit_needed Fred Isaman
2010-06-15 1:46 ` [PATCH 07/10] pnfs-submit: avoid race handling return on close Fred Isaman
2010-06-15 1:46 ` [PATCH 08/10] pnfs-submit: change nfsi->layout to a pointer Fred Isaman
2010-06-15 1:46 ` [PATCH 09/10] pnfs-submit: API change: alloc_layout returns layout cache head Fred Isaman
2010-06-15 1:46 ` [PATCH 10/10] pnfs-submit: filelayout: adjust to new alloc_layout API Fred Isaman
2010-06-15 17:06 ` Benny Halevy [this message]
2010-06-15 17:32 ` [PATCH 07/10] pnfs-submit: avoid race handling return on close Fred Isaman
[not found] ` <AANLkTilDj2Ua_t77kk5Gj_t0vqEcOJFKlqODAj18KQnm-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-06-15 17:33 ` Trond Myklebust
[not found] ` <1276623230.8767.48.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2010-06-15 17:52 ` Fred Isaman
[not found] ` <AANLkTimScICltrCrtEIz7qw1GzuaTGNwCVTk-ZTsZO4_-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-06-15 18:19 ` Trond Myklebust
[not found] ` <1276625991.2988.1.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2010-06-15 18:47 ` Benny Halevy
2010-06-15 17:00 ` [PATCH 04/10] pnfs-submit: add backpointer to pnfs_layout_type Benny Halevy
2010-06-15 16:56 ` [PATCH 03/10] pnfs-submit: remove list_empty check from put_layout Benny Halevy
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=4C17B304.4070308@panasas.com \
--to=bhalevy@panasas.com \
--cc=iisaman@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 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.