public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] xfs: don't fill statvfs with project quota for a directory if it was not enabled.
@ 2012-04-01  4:55 Jeff Liu
  2012-04-02 16:39 ` Christoph Hellwig
  2012-04-11 19:59 ` Christoph Hellwig
  0 siblings, 2 replies; 9+ messages in thread
From: Jeff Liu @ 2012-04-01  4:55 UTC (permalink / raw)
  To: xfs; +Cc: Ben Myers

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

[  170.024496] XFS: Assertion failed: XFS_IS_QUOTA_RUNNING(mp), file: fs/xfs/xfs_dquot.c, line: 680
[  170.024534] ------------[ cut here ]------------
[  170.024630] kernel BUG at fs/xfs/xfs_message.c:101!
[  170.024718] invalid opcode: 0000 [#1] SMP DEBUG_PAGEALLOC
[  170.024836] Modules linked in: xfs cryptd aes_i586 aes_generic ....
[  170.026787] Pid: 2082, comm: du Not tainted 3.3.0-dirty #48 LENOVO 7661D43/7661D43
[  170.026950] EIP: 0060:[<f94892c4>] EFLAGS: 00010246 CPU: 1
[  170.027126] EIP is at assfail+0x47/0x57 [xfs]
[  170.027207] EAX: 0000006a EBX: e2031f58 ECX: 00000000 EDX: 00000007
[  170.027319] ESI: 00000000 EDI: e364f000 EBP: e2031e88 ESP: e2031e74
[  170.027432]  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
[  170.027530] Process du (pid: 2082, ti=e2030000 task=e3096a80 task.ti=e2030000)
[  170.027659] Stack:
[  170.027702]  00000000 f9543fbb f95523d2 f955210c 000002a8 e2031ec0 f9521d2c 3432302e
[  170.027912]  5d303834 00000020 e364f0dc 00000001 c13abe66 00000246 e2031eb4 00000246
[  170.028015]  e2031f58 e2031f58 e2b01880 e2031edc f9527edc 00000002 00000000 e2031ed4
[  170.028015] Call Trace:
[  170.028015]  [<f9521d2c>] xfs_qm_dqget+0x4e/0x90d [xfs]
[  170.028015]  [<c13abe66>] ? do_raw_spin_lock+0xdc/0x1fd
[  170.028015]  [<f9527edc>] xfs_qm_statvfs+0x4e/0xa5 [xfs]
[  170.028015]  [<f948a666>] xfs_fs_statfs+0x2b0/0x2c8 [xfs]
[  170.028015]  [<c1263c8b>] statfs_by_dentry+0x82/0xc1
[  170.028015]  [<c1263cee>] vfs_statfs+0x24/0x12a
[  170.028015]  [<c1263ed8>] fd_statfs+0x55/0x81
[  170.028015]  [<c126407b>] sys_fstatfs64+0x3f/0x7a
[  170.028015]  [<c183071c>] syscall_call+0x7/0xb
[  170.028015] Code: 10 89 54 24 0c 89 44 24 08 c7 44 24 04 bb 3f 54 f9 c7 04 24 00 ...
[  170.028015] EIP: [<f94892c4>] assfail+0x47/0x57 [xfs] SS:ESP 0068:e2031e74
[  170.083305] ---[ end trace 76dc24be29466355 ]---

IMHO, we can check if the project quota is running or not before performing xfs_qm_statvfs(), just return if not.

Signed-off-by: Jie Liu <jeff.liu@oracle.com>

---
 fs/xfs/xfs_super.c |   13 +++++++++----
 1 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index ee5b695..dfc3666 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -1059,10 +1059,15 @@ xfs_fs_statfs(
 
 	spin_unlock(&mp->m_sb_lock);
 
-	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);
+	/* don't try to fill statvfs with project quota if it's not running */
+	if (XFS_IS_PQUOTA_RUNNING(mp)) {
+		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);
+		}
+	}
+
 	return 0;
 }
 
-- 
1.7.9

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply related	[flat|nested] 9+ messages in thread
* Re: [PATCH] xfs: don't fill statvfs with project quota for a directory if it was not enabled.
@ 2012-04-12  3:59 sn0wing
  0 siblings, 0 replies; 9+ messages in thread
From: sn0wing @ 2012-04-12  3:59 UTC (permalink / raw)
  To: hch; +Cc: bpm, xfs


[-- Attachment #1.1: Type: text/plain, Size: 1294 bytes --]

Hi Christoph,

I am Jeff Liu, I cannot connect to my Oracle email box, looks it was blocked by the stupid china firewall today. :(
> -	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);
> I thjink the correct fix here is to replace the || between the inode
> flag and quota flag check with and && - we want both the above
> conditions to be true.
Thanks!
> Can you respin the patch by doing that and make
> sure it still passes the test case?  I'd like to send it of to -stable
> ASAP.
It works with your comments, the revised was shown as following:

Signed-off-by: Jie Liu <jeff.liu@oracle.com>

---
 fs/xfs/xfs_super.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index ee5b695..e3871d5 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -1059,7 +1059,7 @@ xfs_fs_statfs(
 
 	spin_unlock(&mp->m_sb_lock);
 
-	if ((ip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) ||
+	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);
-- 
1.7.9
 

[-- Attachment #1.2: Type: text/html, Size: 1739 bytes --]

[-- Attachment #2: Type: text/plain, Size: 121 bytes --]

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2012-04-12  4:09 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
2012-04-11 19:59 ` Christoph Hellwig
  -- strict thread matches above, loose matches on Subject: below --
2012-04-12  3:59 sn0wing

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox