Thread (10 messages) 10 messages, 3 authors, 2016-08-29

Re: [PATCH] Make __xfs_xattr_put_listen preperly report errors.

From: Dave Chinner <david@fromorbit.com>
Date: 2016-08-25 07:54:28
Also in: lkml

On Wed, Aug 24, 2016 at 10:08:33AM +0200, Artem Savkov wrote:
On Wed, Aug 24, 2016 at 11:55:51AM +1000, Dave Chinner wrote:
quoted
On Tue, Aug 23, 2016 at 05:54:13PM +0200, Artem Savkov wrote:
quoted
Commit "xfs: only return -errno or success from attr ->put_listent" changes the
Please quote commits in --oneline format in changelogs - it makes it
much easier to find the change you are refering to if there is both
a commit ID and the text string in the commit message. (i.e. text
string confirms the commit id is the one you meant to quote).
Noted, thanks.
quoted
commit 2a6fba6 ("xfs: only return -errno or success from attr
->put_listent") is the one you are refering to here, right?
Yes, that is the one.
quoted
quoted
returnvalue of __xfs_xattr_put_listen to 0 in case when there is insufficient
space in the buffer assuming that setting context->count to -1 would be enough,
but all of the ->put_listent callers only check seen_enough. This results in
a failed assertion:
XFS: Assertion failed: context->count >= 0, file: fs/xfs/xfs_xattr.c, line: 175
in insufficient buffer size case.
You have a test case? Can you turn it into an xfstest? We really
need regression tests that cover issues like this....
llistxattr02 test from LTP reliably hits this, I'll see how this can be
ported to xfstest.
So, after battling the obtuse, completely useless ltp install
documentation and having to resort to reverse engineering a working
configuration using strace, I finally got this running, I think, on
an XFS filesystem:

/mnt/scratch/ltp$ sudo ./runltp -b /dev/pmem1 -B xfs -z /dev/vdc -Z xfs -q -p -s llistxattr -I 100
....
Summary:
passed   1
failed   0
skipped  0
warnings 0
tst_test.c:756: INFO: Timeout per run is 0h 05m 00s
llistxattr02.c:76: PASS: llistxattr() failed as expected: ERANGE
llistxattr02.c:76: PASS: llistxattr() failed as expected: ENOENT
llistxattr02.c:76: PASS: llistxattr() failed as expected: EFAULT
....

And it doesn't fail. strace output:

24833 lsetxattr("symlink", "security.ltptest", "test", 4, XATTR_CREATE) = 0
24833 llistxattr("symlink", 0x7ffe312356b0, 1) = -1 ERANGE (Numerical result out of range)
24833 llistxattr("", 0x7ffe312356a0, 20) = -1 ENOENT (No such file or directory)
24833 llistxattr(0xffffffffffffffff, 0x7ffe312356a0, 20) = -1 EFAULT (Bad address)

I'm assuming from your description that it is the first one of these
that fails for you as it is the "buffer too small" test case. So,
not as obvious as it first seems - ltp doesn't appear to be a
reliable reproducer of the problem, so we are going to need a custom
test to exercise it....

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help