projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
30d161c
)
xfs: fix assertion failure at xfs_setattr_nonsize
author
Jie Liu
<
[email protected]
>
Tue, 26 Nov 2013 13:38:34 +0000
(21:38 +0800)
committer
Ben Myers
<
[email protected]
>
Tue, 17 Dec 2013 15:16:08 +0000
(09:16 -0600)
For CRC enabled v5 super block, change a file's ownership can simply
trigger an ASSERT failure at xfs_setattr_nonsize() if both group and
project quota are enabled, i.e,
[ 305.337609] XFS: Assertion failed: !XFS_IS_PQUOTA_ON(mp), file: fs/xfs/xfs_iops.c, line: 621
[ 305.339250] Kernel BUG at
ffffffffa0a7fa32
[verbose debug info unavailable]
[ 305.383939] Call Trace:
[ 305.385536] [<
ffffffffa0a7d95a
>] xfs_setattr_nonsize+0x69a/0x720 [xfs]
[ 305.387142] [<
ffffffffa0a7dea9
>] xfs_vn_setattr+0x29/0x70 [xfs]
[ 305.388727] [<
ffffffff811ca388
>] notify_change+0x1a8/0x350
[ 305.390298] [<
ffffffff811ac39d
>] chown_common+0xfd/0x110
[ 305.391868] [<
ffffffff811ad6bf
>] SyS_fchownat+0xaf/0x110
[ 305.393440] [<
ffffffff811ad760
>] SyS_lchown+0x20/0x30
[ 305.394995] [<
ffffffff8170f7dd
>] system_call_fastpath+0x1a/0x1f
[ 305.399870] RIP [<
ffffffffa0a7fa32
>] assfail+0x22/0x30 [xfs]
This fix adjust the assertion to check if the super block support both
quota inodes or not.
Signed-off-by: Jie Liu <
[email protected]
>
Reviewed-by: Christoph Hellwig <
[email protected]
>
Signed-off-by: Ben Myers <
[email protected]
>
(cherry picked from commit
5a01dd54f4a7fb513062070c5acef20d13cad980
)
fs/xfs/xfs_iops.c
patch
|
blob
|
history
diff --git
a/fs/xfs/xfs_iops.c
b/fs/xfs/xfs_iops.c
index 27e0e544e9635ba47281279c68670f7e568a7a58..104455b8046c4bd9ea11855c917b7b46c4573361 100644
(file)
--- a/
fs/xfs/xfs_iops.c
+++ b/
fs/xfs/xfs_iops.c
@@
-618,7
+618,8
@@
xfs_setattr_nonsize(
}
if (!gid_eq(igid, gid)) {
if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_GQUOTA_ON(mp)) {
- ASSERT(!XFS_IS_PQUOTA_ON(mp));
+ ASSERT(xfs_sb_version_has_pquotino(&mp->m_sb) ||
+ !XFS_IS_PQUOTA_ON(mp));
ASSERT(mask & ATTR_GID);
ASSERT(gdqp);
olddquot2 = xfs_qm_vop_chown(tp, ip,