xfs: fix error gotos in xfs_setattr_nonsize
PATCH 1/1 xfs: fix error gotos in xfs_setattr_nonsize
As the code stands today, if xfs_trans_reserve() fails, we goto out_dqrele, which does not free the allocated transaction.
Fix up the goto targets to undo everything properly.
Addresses-Coverity-Id: 145571
---
Full disclosure: build tested only, as these are error paths which we don't easily fail...
fs/xfs/xfs_iops.c +4 -4
@@ -609,7 +609,7 @@ xfs_setattr_nonsize( tp =xfs_trans_alloc (mp,XFS_TRANS_SETATTR_NOT_SIZE ); error =xfs_trans_reserve (tp, &M_RES (mp)->tr_ichange,0 ,0 );if (error) - goto out_dqrele; + goto out_trans_cancel;xfs_ilock (ip,XFS_ILOCK_EXCL );
@@ -640,7 +640,7 @@ xfs_setattr_nonsize(NULL ,capable (CAP_FOWNER ) ? XFS_QMOPT_FORCE_RES : 0);if (error)/* out of quota */ - goto out_trans_cancel; + goto out_unlock; } }
@@ -729,10 +729,10 @@ xfs_setattr_nonsize(return 0 ; +out_unlock: +xfs_iunlock (ip,XFS_ILOCK_EXCL ); out_trans_cancel:xfs_trans_cancel (tp); -xfs_iunlock (ip,XFS_ILOCK_EXCL ); -out_dqrele:xfs_qm_dqrele (udqp);xfs_qm_dqrele (gdqp);return error;
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Quoted 8 lines · Eric Sandeen
As the code stands today, if
xfs_trans_reserve()fails, we gotoout_dqrele, which does not free the allocated transaction.Fix up the goto targets to undo everything properly.
Addresses-Coverity-Id: 145571
Signed-off-by Eric Sandeen <[email protected]>---
Quoted 40 lines
Full disclosure: build tested only, as these are error paths which we don't easily fail...
fs/xfs/xfs_iops.c +4
-4@@ -609,7 +609,7 @@ xfs_setattr_nonsize( tp =xfs_trans_alloc (mp,XFS_TRANS_SETATTR_NOT_SIZE ); error =xfs_trans_reserve (tp, &M_RES (mp)->tr_ichange,0 ,0 );if (error) - goto out_dqrele; + goto out_trans_cancel;xfs_ilock (ip,XFS_ILOCK_EXCL );@@ -640,7 +640,7 @@ xfs_setattr_nonsize(NULL ,capable (CAP_FOWNER ) ? XFS_QMOPT_FORCE_RES : 0);if (error)/* out of quota */ - goto out_trans_cancel; + goto out_unlock; } }@@ -729,10 +729,10 @@ xfs_setattr_nonsize(return 0 ; +out_unlock: +xfs_iunlock (ip,XFS_ILOCK_EXCL ); out_trans_cancel:xfs_trans_cancel (tp); -xfs_iunlock (ip,XFS_ILOCK_EXCL ); -out_dqrele:xfs_qm_dqrele (udqp);xfs_qm_dqrele (gdqp);return error;
Quoted 4 lines
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs