Patch "xfs: only update mount/resv fields on success in __xfs_ag_resv_init" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
xfs: only update mount/resv fields on success in __xfs_ag_resv_init
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
xfs-only-update-mount-resv-fields-on-success-in-__xfs_ag_resv_init.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
4dfa2b84118fd6c95202ae87e62adf5000ccd4d0Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <[email protected]>
Date: Wed, 25 Jan 2017 07:49:34 -0800
Subject: xfs: only update mount/resv fields on success in __xfs_ag_resv_init
From: Christoph Hellwig <[email protected]>
commit 4dfa2b84118fd6c95202ae87e62adf5000ccd4d0 upstream.
Try to reserve the blocks first and only then update the fields in or hanging off the mount structure. This way we can call __xfs_ag_resv_init again after a previous failure.
--- fs/xfs/libxfs/xfs_ag_resv.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-)
fs/xfs/libxfs/xfs_ag_resv.c +14 -9
@@ -200,22 +200,27 @@ __xfs_ag_resv_init(struct xfs_mount *mp = pag->pag_mount;struct xfs_ag_resv *resv;int error; +xfs_extlen_t reserved; - resv =xfs_perag_resv (pag, type);if (used > ask) ask = used; - resv->ar_asked = ask; - resv->ar_reserved = resv->ar_orig_reserved = ask - used; - mp->m_ag_max_usable -= ask; + reserved = ask - used; -trace_xfs_ag_resv_init (pag, type, ask); - - error =xfs_mod_fdblocks (mp, -(int64_t )resv->ar_reserved, true); -if (error) + error =xfs_mod_fdblocks (mp, -(int64_t )reserved, true); +if (error) {trace_xfs_ag_resv_init_error (pag->pag_mount, pag->pag_agno, error, _RET_IP_); +return error; + } -return error; + mp->m_ag_max_usable -= ask; + + resv =xfs_perag_resv (pag, type); + resv->ar_asked = ask; + resv->ar_reserved = resv->ar_orig_reserved = reserved; + +trace_xfs_ag_resv_init (pag, type, ask); +return 0 ; }/* Create a per-AG block reservation. */
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/xfs-sync-eofblocks-scans-under-iolock-are-livelock-prone.patch queue-4.9/xfs-use-per-ag-reservations-for-the-finobt.patch queue-4.9/xfs-pull-up-iolock-from-xfs_free_eofblocks.patch queue-4.9/xfs-only-update-mount-resv-fields-on-success-in-__xfs_ag_resv_init.patch