On Tue, May 21, 2013 at 10:00:09AM -0400, Brian Foster wrote:
> 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)
Yup, good catch.
Cheers,
Dave.
--
Dave Chinner
david@xxxxxxxxxxxxx
|