xfs
[Top] [All Lists]

Re: [PATCH 11/11] xfs: increase number of ACL entries for V5 superblocks

To: Dave Chinner <david@xxxxxxxxxxxxx>
Subject: Re: [PATCH 11/11] xfs: increase number of ACL entries for V5 superblocks
From: Brian Foster <bfoster@xxxxxxxxxx>
Date: Tue, 21 May 2013 10:00:09 -0400
Cc: xfs@xxxxxxxxxxx, bpm@xxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1369123330-9579-12-git-send-email-david@xxxxxxxxxxxxx>
References: <1369123330-9579-1-git-send-email-david@xxxxxxxxxxxxx> <1369123330-9579-12-git-send-email-david@xxxxxxxxxxxxx>
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6
On 05/21/2013 04:02 AM, Dave Chinner wrote:
> From: Dave Chinner <dchinner@xxxxxxxxxx>
> 
> The limit of 25 ACL entries is arbitrary, but baked into the on-disk
> format.  For version 5 superblocks, increase it to the maximum nuber
> of ACLs that can fit into a single xattr.
> 
> Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
> ---
>  fs/xfs/xfs_acl.c |   31 ++++++++++++++++++-------------
>  fs/xfs/xfs_acl.h |   30 +++++++++++++++++++++++-------
>  2 files changed, 41 insertions(+), 20 deletions(-)
> 
...
> diff --git a/fs/xfs/xfs_acl.h b/fs/xfs/xfs_acl.h
> index 39632d9..5310a52 100644
> --- a/fs/xfs/xfs_acl.h
> +++ b/fs/xfs/xfs_acl.h
> @@ -22,19 +22,35 @@ struct inode;
>  struct posix_acl;
>  struct xfs_inode;
>  
> -#define XFS_ACL_MAX_ENTRIES 25
>  #define XFS_ACL_NOT_PRESENT (-1)
>  
>  /* On-disk XFS access control list structure */
> +struct xfs_acl_entry {
> +     __be32  ae_tag;
> +     __be32  ae_id;
> +     __be16  ae_perm;
> +     __be16  ae_pad;         /* fill the implicit hole in the structure */
> +};
> +
>  struct xfs_acl {
> -     __be32          acl_cnt;
> -     struct xfs_acl_entry {
> -             __be32  ae_tag;
> -             __be32  ae_id;
> -             __be16  ae_perm;
> -     } acl_entry[XFS_ACL_MAX_ENTRIES];
> +     __be32                  acl_cnt;
> +     struct xfs_acl_entry    acl_entry[0];
>  };
>  
> +/*
> + * The number of ACL entries allowed is defined by the on-disk format.
> + * For v4 superblocks, that is limited to 25 entries. For v5 superblocks, it 
> is
> + * limited only by the maximum size of the xattr that stores the information.
> + */
> +#define XFS_ACL_MAX_ENTRIES(mp)      \
> +     (xfs_sb_version_hascrc(&mp->m_sb) \
> +        ?  (XATTR_SIZE_MAX - sizeof(__be32) / sizeof(struct xfs_acl_entry)) \
                                        
It looks like this should be:

        (XATTR_SIZE_MAX - sizeof(__be32)) / sizeof(struct xfs_acl_entry)

(i.e., misplaced parens)

Brian

> +        : 25)
> +
> +#define XFS_ACL_SIZE(mp) \
> +     (sizeof(struct xfs_acl) + \
> +             sizeof(struct xfs_acl_entry) * XFS_ACL_MAX_ENTRIES((mp)))
> +
>  /* On-disk XFS extended attribute names */
>  #define SGI_ACL_FILE         (unsigned char *)"SGI_ACL_FILE"
>  #define SGI_ACL_DEFAULT              (unsigned char *)"SGI_ACL_DEFAULT"
> 

<Prev in Thread] Current Thread [Next in Thread>