linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Carlos Maiolino <cmaiolino@redhat.com>
Cc: linux-fsdevel@vger.kernel.org
Subject: Re: Common error in case of running out of the number of ACL entries
Date: Sat, 14 Dec 2013 10:51:41 +1100	[thread overview]
Message-ID: <20131213235141.GN31386@dastard> (raw)
In-Reply-To: <20131213161653.GA9046@orion.maiolino.org>

On Fri, Dec 13, 2013 at 02:16:54PM -0200, Carlos Maiolino wrote:
> Hi,
> 
> > Hi Folks,
> > 
> > While looking into the behaviour of XFS in case of running out of the
> > maximum number of supported acl entries, I observed that we would
> > return various different errors in this situation.  As per Christoph's
> > suggestion, I gathered up them from some common file systems with a
> > simple tests which were shown as following:
> > 
> > Btrfs: No space left on device (ENOSPC)
> > Ext3: No space left on device (ENOSPC)
> > Ext4: No space left oo long (E2BIG)
> > F2fs: Numerical result out of range (ERANGE)
> > OCFS2: Argument list too long (E2BIG)
> > XFS: Invalid argument (EINVAL)
> > 
> > It seems that return either above error would mislead the end user, though
> > Eric's Sandeen once pointed out that ENOSPC should be used in this case in
> > terms of the setxattr(2) man page.
> > <quote>
> >        If there is insufficient space remaining to store the extended attribute,
> >        errno is set to either ENOSPC, or EDQUOT if quota enforcement was the cause.
> > 
> > However, the "insufficient space" is obscure, it might be the file system
> > space or no more space in metadata blocks, etc...
> > 
> > Hence, should we consolidate this scenario to figure out a more clearer
> > common error?
> > 
> > 
> Consolidate the erros here would make things much more easier for
> users/applications which has a heavy usage of xattrs, for example, glusterfs.
> But, I still think that -ENOSPC or -EDQUOT are the best and easier approaches
> here. Whether it's FS space or metadata blocks, both of them are lack of space,
> which properly describes why a tentative to add a new xattr failed.
> At least for me, this looks much easier than add a new error flag and make all
> applications using xattrs to change their code to fit new behavior (or maybe
> they'll need to change it anyway to fit -ENOSPC :).

This isn't an "out-of-space" error where there are no more
resources available to create the ACL. Therefore, ENOSPC is not an
appropriate error.

What we are hitting a maximum size limit defined by XATTR
implemenation used to store the ACLs. Hence the error is equivalent
to a user trying to set an xattr of larger than XATTR_SIZE_MAX. In
that case, we have:

	setxattr: E2BIG
	getxattr: E2BIG
	xfs_attrmulti_attr_get: EINVAL
	xfs_attrmulti_attr_set: EINVAL

So, what we see here is that XFS returning EINVAL for too many ACLs
is internally consistent with it's ioctl-based xattr interfaces, but
only JFS and OCFS2 are internally consistent with the VFS xattr
code.

Hence, IMO, the correct thing to do here is make everything
consistent with the VFS [gs]etxattr calls and return E2BIG when the
xattr that holds the ACLs grows too large to fit within the size
limits bounded by the xattr implementation....

Cheers,

Dave.

> 
> -- 
> Carlos
> --
> To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

-- 
Dave Chinner
david@fromorbit.com

  reply	other threads:[~2013-12-13 23:52 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-13 14:43 Common error in case of running out of the number of ACL entries Jeff Liu
2013-12-13 15:02 ` Jeff Liu
2013-12-13 16:16 ` Carlos Maiolino
2013-12-13 23:51   ` Dave Chinner [this message]
2013-12-14  8:52     ` Jeff Liu

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=20131213235141.GN31386@dastard \
    --to=david@fromorbit.com \
    --cc=cmaiolino@redhat.com \
    --cc=linux-fsdevel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).