[pnfs] [PATCH 1/1] pnfs: Ensure file layout stripe_unit multiple of page size

Benny Halevy bhalevy at panasas.com
Tue May 20 06:12:55 EDT 2008


Applied to the pnfs branch.

Thanks,

Benny

On May. 16, 2008, 21:22 +0300, Dean Hildebrand <seattleplus at gmail.com> wrote:
> Signed-off-by: Dean Hildebrand <dhildeb at us.ibm.com>
> ---
>  fs/nfs/nfs4filelayout.c |   13 +++++++++++++
>  1 files changed, 13 insertions(+), 0 deletions(-)
> 
> diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
> index c7d043b..27d5b17 100644
> --- a/fs/nfs/nfs4filelayout.c
> +++ b/fs/nfs/nfs4filelayout.c
> @@ -412,6 +412,7 @@ filelayout_free_layout(struct pnfs_layout_type *layoutid)
>   *    is wrong.
>   * 2) pattern_offset is ignored and must == 0 which is wrong;
>   * 3) the pattern_offset needs to be a mutliple of the stripe unit.
> + * 4) stripe unit is multiple of page size
>  */
>  
>  static int
> @@ -421,6 +422,7 @@ filelayout_check_layout(struct pnfs_layout_type *lo,
>  	struct nfs4_filelayout_segment *fl = LSEG_LD_DATA(lseg);
>  	struct nfs4_pnfs_dev_item *dev;
>  	int status = -EINVAL;
> +	struct nfs_server *nfss = NFS_SERVER(PNFS_INODE(lo));
>  
>  	dprintk("--> %s\n", __func__);
>  	dev = nfs4_pnfs_device_item_get(FILE_MT(lo->inode), NFS_FH(lo->inode),
> @@ -444,6 +446,17 @@ filelayout_check_layout(struct pnfs_layout_type *lo,
>  				__func__, fl->pattern_offset);
>  		goto out;
>  	}
> +
> +	if (fl->stripe_unit % PAGE_SIZE) {
> +		dprintk("%s Stripe unit (%u) not page aligned\n",
> +			__func__, fl->stripe_unit);
> +		goto out;
> +	}
> +
> +	if (fl->stripe_unit % nfss->ds_rsize || fl->stripe_unit % nfss->ds_wsize) {
> +		dprintk("%s Stripe unit (%u) not aligned with rsize %u wsize %u\n",
> +			__func__, fl->stripe_unit, nfss->ds_rsize, nfss->ds_wsize);
> +	}
>  	status = 0;
>  out:
>  	dprintk("--> %s returns %d\n", __func__, status);



More information about the pNFS mailing list