All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benny Halevy <bhalevy@panasas.com>
To: Fred Isaman <iisaman@netapp.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 05/12] RFC: nfs: ask for layouttypes during fsinfo call
Date: Mon, 20 Sep 2010 12:29:50 +0200	[thread overview]
Message-ID: <4C97379E.5050301@panasas.com> (raw)
In-Reply-To: <1284779874-10499-6-git-send-email-iisaman@netapp.com>

On 2010-09-18 05:17, Fred Isaman wrote:
> From: The pNFS Team <linux-nfs@vger.kernel.org>
> 
> This information will be used to determine which layout driver,
> if any, to use for subsequent IO on this filesystem.  Each driver
> is assigned an integer id, with 0 reserved to indicate no driver.
> 
> The server can in theory return multiple ids.  However, our current
> client implementation only notes the first entry and ignores the
> rest.
> 
> Signed-off-by: TBD - melding/reorganization of several patches
> ---
>  fs/nfs/nfs4proc.c       |    2 +-
>  fs/nfs/nfs4xdr.c        |   57 +++++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/nfs_xdr.h |    1 +
>  3 files changed, 59 insertions(+), 1 deletions(-)
> 
> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> index c46e45e..c0d9ff4 100644
> --- a/fs/nfs/nfs4proc.c
> +++ b/fs/nfs/nfs4proc.c
> @@ -129,7 +129,7 @@ const u32 nfs4_fsinfo_bitmap[2] = { FATTR4_WORD0_MAXFILESIZE
>  			| FATTR4_WORD0_MAXREAD
>  			| FATTR4_WORD0_MAXWRITE
>  			| FATTR4_WORD0_LEASE_TIME,
> -			0
> +			FATTR4_WORD1_FS_LAYOUT_TYPES

Note that originally (9170cf5 pnfs_submit: set and unset pnfs layoutdriver modules),
we set this only under CONFIG_NFS_V4_1, but it should be ok to ask for
it anyhow.

Benny

>  };
>  
>  const u32 nfs4_fs_locations_bitmap[2] = {
> diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
> index b0bd7ef..e138237 100644
> --- a/fs/nfs/nfs4xdr.c
> +++ b/fs/nfs/nfs4xdr.c
> @@ -3868,6 +3868,60 @@ xdr_error:
>  	return status;
>  }
>  
> +/*
> + * Decode potentially multiple layout types. Currently we only support
> + * one layout driver per file system.
> + */
> +static int decode_first_pnfs_layout_type(struct xdr_stream *xdr,
> +					 uint32_t *layouttype)
> +{
> +	uint32_t *p;
> +	int num;
> +
> +	p = xdr_inline_decode(xdr, 4);
> +	if (unlikely(!p))
> +		goto out_overflow;
> +	num = be32_to_cpup(p);
> +
> +	/* pNFS is not supported by the underlying file system */
> +	if (num == 0) {
> +		*layouttype = 0;
> +		return 0;
> +	}
> +	if (num > 1)
> +		printk(KERN_INFO "%s: Warning: Multiple pNFS layout drivers "
> +			"per filesystem not supported\n", __func__);
> +
> +	/* Decode and set first layout type, move xdr->p past unused types */
> +	p = xdr_inline_decode(xdr, num * 4);
> +	if (unlikely(!p))
> +		goto out_overflow;
> +	*layouttype = be32_to_cpup(p);
> +	return 0;
> +out_overflow:
> +	print_overflow_msg(__func__, xdr);
> +	return -EIO;
> +}
> +
> +/*
> + * The type of file system exported.
> + * Note we must ensure that layouttype is set in any non-error case.
> + */
> +static int decode_attr_pnfstype(struct xdr_stream *xdr, uint32_t *bitmap,
> +				uint32_t *layouttype)
> +{
> +	int status = 0;
> +
> +	dprintk("%s: bitmap is %x\n", __func__, bitmap[1]);
> +	if (unlikely(bitmap[1] & (FATTR4_WORD1_FS_LAYOUT_TYPES - 1U)))
> +		return -EIO;
> +	if (bitmap[1] & FATTR4_WORD1_FS_LAYOUT_TYPES) {
> +		status = decode_first_pnfs_layout_type(xdr, layouttype);
> +		bitmap[1] &= ~FATTR4_WORD1_FS_LAYOUT_TYPES;
> +	} else
> +		*layouttype = 0;
> +	return status;
> +}
>  
>  static int decode_fsinfo(struct xdr_stream *xdr, struct nfs_fsinfo *fsinfo)
>  {
> @@ -3894,6 +3948,9 @@ static int decode_fsinfo(struct xdr_stream *xdr, struct nfs_fsinfo *fsinfo)
>  	if ((status = decode_attr_maxwrite(xdr, bitmap, &fsinfo->wtmax)) != 0)
>  		goto xdr_error;
>  	fsinfo->wtpref = fsinfo->wtmax;
> +	status = decode_attr_pnfstype(xdr, bitmap, &fsinfo->layouttype);
> +	if (status)
> +		goto xdr_error;
>  
>  	status = verify_attr_len(xdr, savep, attrlen);
>  xdr_error:
> diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
> index 172df83..7d68a5c 100644
> --- a/include/linux/nfs_xdr.h
> +++ b/include/linux/nfs_xdr.h
> @@ -113,6 +113,7 @@ struct nfs_fsinfo {
>  	__u32			dtpref;	/* pref. readdir transfer size */
>  	__u64			maxfilesize;
>  	__u32			lease_time; /* in seconds */
> +	__u32			layouttype; /* supported pnfs layout driver */
>  };
>  
>  struct nfs_fsstat {

  reply	other threads:[~2010-09-20 10:29 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-18  3:17 [PATCH 00/12] RFC: pnfs: LAYOUTGET/DEVINFO submission, v2 Fred Isaman
2010-09-18  3:17 ` [PATCH 01/12] NFSD: remove duplicate NFS4_STATEID_SIZE Fred Isaman
2010-09-18  3:17 ` [PATCH 02/12] SUNRPC: define xdr_decode_opaque_fixed Fred Isaman
2010-09-18  3:17 ` [PATCH 03/12] RFC: pnfsd, pnfs: protocol level pnfs constants Fred Isaman
2010-09-18  3:17 ` [PATCH 04/12] RFC: nfs: change stateid to be a union Fred Isaman
2010-09-18  3:17 ` [PATCH 05/12] RFC: nfs: ask for layouttypes during fsinfo call Fred Isaman
2010-09-20 10:29   ` Benny Halevy [this message]
2010-09-20 13:46     ` Fred Isaman
2010-09-18  3:17 ` [PATCH 06/12] RFC: nfs: set layout driver Fred Isaman
2010-09-20 10:42   ` Benny Halevy
2010-09-20 14:06     ` Fred Isaman
2010-09-20 14:21       ` Benny Halevy
2010-09-20 15:24         ` Fred Isaman
2010-09-20 14:24       ` Benny Halevy
2010-09-20 15:17         ` Fred Isaman
2010-09-20 13:14   ` Benny Halevy
2010-09-20 14:07     ` Fred Isaman
2010-09-18  3:17 ` [PATCH 07/12] RFC: pnfs: full mount/umount infrastructure Fred Isaman
2010-09-20 14:24   ` Benny Halevy
2010-09-20 16:21     ` Fred Isaman
2010-09-20 17:43       ` Benny Halevy
2010-09-18  3:17 ` [PATCH 08/12] RFC: pnfs: filelayout: introduce minimal file layout driver Fred Isaman
2010-09-18  3:17 ` [PATCH 09/12] RFC: nfs: create and destroy inode's layout cache Fred Isaman
2010-09-18  3:17 ` [PATCH 10/12] RFC: nfs: client needs to maintain list of inodes with active layouts Fred Isaman
2010-09-18  3:17 ` [PATCH 11/12] RFC: pnfs: add LAYOUTGET and GETDEVICEINFO infrastructure Fred Isaman
2010-09-19 19:07   ` Boaz Harrosh
2010-09-20 14:56     ` Fred Isaman
2010-09-20 16:20       ` Boaz Harrosh
2010-09-20 18:40         ` Benny Halevy
2010-09-20 19:10           ` Fred Isaman
2010-09-18  3:17 ` [PATCH 12/12] RFC: pnfs: filelayout: add driver's " Fred Isaman
  -- strict thread matches above, loose matches on Subject: below --
2010-09-22 22:04 [PATCH 00/12] RFC: pnfs: LAYOUTGRT/DEVINFO submission, v3 Fred Isaman
2010-09-22 22:05 ` [PATCH 05/12] RFC: nfs: ask for layouttypes during fsinfo call Fred Isaman

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=4C97379E.5050301@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.