xfs: make quota metadata truncation behavior consistent to user space
authorJie Liu <jeff.liu@oracle.com>
Fri, 22 Nov 2013 06:04:00 +0000 (14:04 +0800)
committerBen Myers <bpm@sgi.com>
Fri, 6 Dec 2013 20:06:15 +0000 (14:06 -0600)
In xfs_qm_scall_trunc_qfiles(), we ignore the error if failed to remove
the users quota metadata and proceed to remove groups and projects if
they are being there.  However, in user space, the remove operation will
break and return if failed to remove any kind of quota.
Also for v5 super block, we can enabled both group and project quota at
the same time, in this case the current error handling will cover the
group error with projects but they might failed due to different reasons.

It seems we'd better the error handling consistent to the user space and
don't trying to remove another kind of quota metadata if the previous
operation is failed.

Signed-off-by: Jie Liu <jeff.liu@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Ben Myers <bpm@sgi.com>
fs/xfs/xfs_qm_syscalls.c

index 437c9198031a49a940aecaa441dc305de0e9a145..3daf5ea1eb8d73989a4e199aaee4dd2364a98290 100644 (file)
@@ -278,7 +278,7 @@ xfs_qm_scall_trunc_qfiles(
        xfs_mount_t     *mp,
        uint            flags)
 {
-       int             error = 0, error2 = 0;
+       int             error;
 
        if (!xfs_sb_version_hasquota(&mp->m_sb) || flags == 0) {
                xfs_debug(mp, "%s: flags=%x m_qflags=%x",
@@ -286,14 +286,20 @@ xfs_qm_scall_trunc_qfiles(
                return XFS_ERROR(EINVAL);
        }
 
-       if (flags & XFS_DQ_USER)
+       if (flags & XFS_DQ_USER) {
                error = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_uquotino);
-       if (flags & XFS_DQ_GROUP)
-               error2 = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_gquotino);
+               if (error)
+                       return error;
+       }
+       if (flags & XFS_DQ_GROUP) {
+               error = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_gquotino);
+               if (error)
+                       return error;
+       }
        if (flags & XFS_DQ_PROJ)
-               error2 = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_pquotino);
+               error = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_pquotino);
 
-       return error ? error : error2;
+       return error;
 }
 
 /*
This page took 0.025506 seconds and 5 git commands to generate.