From: Jeff Liu <jeff.liu@oracle.com>
To: Chandra Seetharaman <sekharan@us.ibm.com>
Cc: Christoph Hellwig <hch@infradead.org>, Ben Myers <bpm@sgi.com>,
xfs@oss.sgi.com
Subject: Re: [PATCH] xfs: don't fill statvfs with project quota for a directory if it was not enabled.
Date: Thu, 05 Apr 2012 15:31:13 +0800 [thread overview]
Message-ID: <4F7D4A41.5010201@oracle.com> (raw)
In-Reply-To: <4F7D2AC3.50204@oracle.com>
On 04/05/2012 01:16 PM, Jeff Liu wrote:
> Hi Chandra,
> On 04/05/2012 12:48 AM, Chandra Seetharaman wrote:
>
>> I tried the steps in latest xfs tree and on mainline 3.3.0. Unable to
>> reproduce the problem.
>>
>> Jeff, how big was the FS and how full was it ?
It is irrelevant to the FS space status, looks this is an old issue since I can reproduce it on kernel-2.6.39 too:
Apr 5 13:50:36 pibroch kernel: [ 144.667978] XFS: Assertion failed: XFS_IS_QUOTA_RUNNING(mp), file: fs/xfs/quota/xfs_dquot.c, line: 819
Apr 5 13:50:36 pibroch kernel: [ 144.668119] ------------[ cut here ]------------
Apr 5 13:50:36 pibroch kernel: [ 144.668208] kernel BUG at fs/xfs/linux-2.6/xfs_message.c:119!
Apr 5 13:50:37 pibroch kernel: [ 144.668298] invalid opcode: 0000 [#1] SMP
Apr 5 13:50:37 pibroch kernel: [ 144.668383] last sysfs file: /sys/devices/virtual/block/loop0/queue/rotational
Apr 5 13:50:37 pibroch kernel: [ 144.668492] Modules linked in: xfs cryptd ...
Apr 5 13:50:37 pibroch kernel: [ 144.670132]
Apr 5 13:50:37 pibroch kernel: [ 144.670164] Pid: 2711, comm: du Not tainted 2.6.39 #1 LENOVO 7661D43/7661D43
Apr 5 13:50:37 pibroch kernel: [ 144.670293] EIP: 0060:[<fa8b9b57>] EFLAGS: 00010246 CPU: 0
Apr 5 13:50:37 pibroch kernel: [ 144.670444] EIP is at assfail+0x47/0x60 [xfs]
Apr 5 13:50:37 pibroch kernel: [ 144.670512] EAX: 00000070 EBX: f29a6800 ECX: f1a65960 EDX: 00000000
Apr 5 13:50:37 pibroch kernel: [ 144.670605] ESI: 00000000 EDI: ffffffff EBP: f233de80 ESP: f233de6c
Apr 5 13:50:37 pibroch kernel: [ 144.670701] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
Apr 5 13:50:37 pibroch kernel: [ 144.670787] Process du (pid: 2711, ti=f233c000 task=f1a65960 task.ti=f233c000)
Apr 5 13:50:37 pibroch kernel: [ 144.670894] Stack:
Apr 5 13:50:37 pibroch kernel: [ 144.670929] 00000000 fa8da474 fa8dcc2e fa8dcad4 00000333 f233dec8 fa7d677f f233df58
Apr 5 13:50:37 pibroch kernel: [ 144.671100] f233dec8 c1431e4b 00000246 00000000 00000002 00000000 00000000 fa8b9d81
Apr 5 13:50:37 pibroch kernel: [ 144.671271] 00000001 00000246 00000000 00000246 f233df58 f233df58 ffffffff f233dee4
Apr 5 13:50:37 pibroch kernel: [ 144.671443] Call Trace:
Apr 5 13:50:37 pibroch kernel: [ 144.671542] [<fa7d677f>] xfs_qm_dqget+0x4f/0xa20 [xfs]
Apr 5 13:50:37 pibroch kernel: [ 144.671632] [<c1431e4b>] ? do_raw_spin_lock+0x5b/0x230
Apr 5 13:50:37 pibroch kernel: [ 144.671777] [<fa8b9d81>] ? xfs_fs_statfs+0x91/0x2d0 [xfs]
Apr 5 13:50:37 pibroch kernel: [ 144.671915] [<fa7de68e>] xfs_qm_statvfs+0x4e/0xb0 [xfs]
Apr 5 13:50:37 pibroch kernel: [ 144.672003] [<c196f66c>] ? _raw_spin_unlock+0x4c/0x60
Apr 5 13:50:37 pibroch kernel: [ 144.672020] [<fa8b9f5a>] xfs_fs_statfs+0x26a/0x2d0 [xfs]
Apr 5 13:50:37 pibroch kernel: [ 144.672020] [<c12b6a1b>] statfs_by_dentry+0x8b/0xf0
Apr 5 13:50:37 pibroch kernel: [ 144.672020] [<c12b6aa4>] vfs_statfs+0x24/0x140
Apr 5 13:50:37 pibroch kernel: [ 144.672020] [<c12b6cbc>] fd_statfs+0x5c/0xa0
Apr 5 13:50:37 pibroch kernel: [ 144.672020] [<c12b6e9a>] sys_fstatfs64+0x2a/0x90
Apr 5 13:50:37 pibroch kernel: [ 144.672020] [<c19703a4>] syscall_call+0x7/0xb
Apr 5 13:50:37 pibroch kernel: [ 144.672020] Code: 10 89 54 24 0c 89 44 24 08 c7 44 24 04 74 a4 8d fa c7 04 24 00 00 00 00 ...
Apr 5 13:50:37 pibroch kernel: [ 144.672020] EIP: [<fa8b9b57>] assfail+0x47/0x60 [xfs] SS:ESP 0068:f233de6c
Apr 5 13:50:37 pibroch kernel: [ 144.801094] ---[ end trace ae19ce1ca9446f05 ]---
At xfs_ioctl_setattr(), xfs_set_diflags() enabled the XFS_DIFLAG_PROJINHERIT flag of an inode if the given mask has FSX_XFLAGS no matter "PQUOTA is RUNNING or ON".
if (mask & FSX_XFLAGS) {
xfs_set_diflags(ip, fa->fsx_xflags);
xfs_diflags_to_linux(ip);
}
In this case, the following condition became always true at xfs_fs_statfs():
if ((ip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) ||
((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD))) ==
(XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD))
xfs_qm_statvfs(ip, statp);
Hence xfs_qm_statvfs()->xfs_qm_dqget()->ASSERT(XFS_IS_QUOTA_RUNNING(mp)) will failed, that's why I proposed to check
if XFS_IS_QUOTA_RUNNING(mp) or not before doing it.
Thanks,
-Jeff
>
> Sorry, I have missed one major step to reproduce this issue previously.
> Could you try to create a file under the project directory before setting it up?
>
> Steps:
> 1. echo "1:/xfs" > /etc/projects; echo "project1:1" > /etc/projid
> 2. echo "test" > /xfs/testme
> 3. xfs_quota -x -c 'project -s project1' /xfs
> 4. du -sh /xfs
>
> I have posted a test to xfstest at below link, it can help reproducing this issue.
> http://www.spinics.net/lists/xfs/msg10744.html
>
> Thanks,
> -Jeff
>
>>
>> Christoph, BTW, 3.3.0 does not have my changes. Ben pushed it for
>> 3.4-rc1
>>
>> Here is my results with 3.3.0
>> -------------------
>> -bash-4.1$ uname -r
>> 3.3.0
>> bash-4.1$ mount | grep xfs
>> /dev/sdb1 on /xfs type xfs (rw)
>> bash-4.1$ cat /etc/projects
>> 1:/xfs
>> bash-4.1$ cat /etc/projid
>> project1:1
>> bash-4.1$ sudo xfs_quota -x -c 'project -s project1' /xfs
>> [sudo] password for chandra:
>> Setting up project project1 (path /xfs)...
>> Processed 1 (/etc/projects and cmdline) paths for project project1 with
>> recursion depth infinite (-1).
>> bash-4.1$ du -sh /xfs
>> 0 /xfs
>> bash-4.1$ exit
>> ------------------
>>
>> Chandra
>>
>> On Mon, 2012-04-02 at 12:39 -0400, Christoph Hellwig wrote:
>>> On Sun, Apr 01, 2012 at 12:55:55PM +0800, Jeff Liu wrote:
>>>> Hello,
>>>>
>>>> I can trigger a BUG() at fs/xfs/xfs_dquot.c on vanilla kernel 3.3.0 by the following steps:
>>>>
>>>> 1. mount a XFS partition without 'pquota' option.
>>>> /dev/sda7 on /xfs type xfs (rw)
>>>>
>>>> 2. setup project1 on it.
>>>> $ cat /etc/projects
>>>> 1:/xfs
>>>> $ cat /etc/projid
>>>> project1:1
>>>> $ sudo xfs_quota -x -c 'project -s project1' /xfs
>>>>
>>>> 3. du -sh /xfs
>>>
>>> Can you wire this up as a test case for xfstests?
>>>
>>>> + ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD))) ==
>>>> + (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD)) {
>>>
>>> This check is supposed to return false. I guess Chandras separate
>>> project quota inode preparations somehow broke it.
>>>
>>> Chandra, can you look into this issue?
>>>
>>
>>
>
>
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2012-04-05 7:33 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-01 4:55 [PATCH] xfs: don't fill statvfs with project quota for a directory if it was not enabled Jeff Liu
2012-04-02 16:39 ` Christoph Hellwig
2012-04-02 18:36 ` Chandra Seetharaman
2012-04-04 8:02 ` Jeff Liu
2012-04-04 16:48 ` Chandra Seetharaman
2012-04-05 5:16 ` Jeff Liu
2012-04-05 7:31 ` Jeff Liu [this message]
2012-04-11 19:59 ` Christoph Hellwig
-- strict thread matches above, loose matches on Subject: below --
2012-04-12 3:59 sn0wing
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=4F7D4A41.5010201@oracle.com \
--to=jeff.liu@oracle.com \
--cc=bpm@sgi.com \
--cc=hch@infradead.org \
--cc=sekharan@us.ibm.com \
--cc=xfs@oss.sgi.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.