Commit cc3d2f55 authored by Christoph Hellwig's avatar Christoph Hellwig
Browse files

xfs: reflow xfs_dec_freecounter



Let the successful allocation be the main path through the function
with exception handling in branches to make the code easier to
follow.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
parent 0a1fd780
Loading
Loading
Loading
Loading
+18 −21
Original line number Diff line number Diff line
@@ -1257,7 +1257,6 @@ xfs_dec_freecounter(
	uint64_t		delta,
	bool			rsvd)
{
	int64_t			lcounter;
	uint64_t		set_aside = 0;
	s32			batch;
	bool			has_resv_pool;
@@ -1296,28 +1295,26 @@ xfs_dec_freecounter(
		set_aside = xfs_fdblocks_unavailable(mp);
	percpu_counter_add_batch(counter, -((int64_t)delta), batch);
	if (__percpu_counter_compare(counter, set_aside,
				     XFS_FDBLOCKS_BATCH) >= 0) {
		/* we had space! */
		return 0;
	}

			XFS_FDBLOCKS_BATCH) < 0) {
		/*
	 * lock up the sb for dipping into reserves before releasing the space
	 * that took us to ENOSPC.
		 * Lock up the sb for dipping into reserves before releasing the
		 * space that took us to ENOSPC.
		 */
		spin_lock(&mp->m_sb_lock);
		percpu_counter_add(counter, delta);
	if (!has_resv_pool || !rsvd)
		if (!rsvd)
			goto fdblocks_enospc;

	lcounter = (long long)mp->m_resblks_avail - delta;
	if (lcounter >= 0) {
		mp->m_resblks_avail = lcounter;
		spin_unlock(&mp->m_sb_lock);
		return 0;
	}
		if (delta > mp->m_resblks_avail) {
			xfs_warn_once(mp,
"Reserve blocks depleted! Consider increasing reserve pool size.");
			goto fdblocks_enospc;
		}
		mp->m_resblks_avail -= delta;
		spin_unlock(&mp->m_sb_lock);
	}

	/* we had space! */
	return 0;

fdblocks_enospc:
	spin_unlock(&mp->m_sb_lock);