[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20160825082109.GB11104@shodan.usersys.redhat.com>
Date: Thu, 25 Aug 2016 10:21:09 +0200
From: Artem Savkov <asavkov@...hat.com>
To: Dave Chinner <david@...morbit.com>
Cc: Eric Sandeen <sandeen@...deen.net>, xfs@....sgi.com,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] Make __xfs_xattr_put_listen preperly report errors.
On Thu, Aug 25, 2016 at 10:24:08AM +1000, Dave Chinner wrote:
> 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:
> > > On Tue, Aug 23, 2016 at 05:54:13PM +0200, Artem Savkov wrote:
> > > > 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.
> >
> > >
> > > 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.
> >
> > > > 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....
LTP doesn't check dmesg for warnings on it's own, so it is ok for the test
to be marked as "PASSED" since we get ERANGE after all. But you should
be able to see the warnings in dmesg.
I'm attaching the config I'm using. With this config I can repdroduce the
issue with both 4.8-rc3 and next-20160825.
--
Regards,
Artem
View attachment ".config.xfscount" of type "text/plain" (118685 bytes)
Powered by blists - more mailing lists