Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 59c1b082 authored by Nathan Scott's avatar Nathan Scott
Browse files

[XFS] Make the pflags test/set wrappers more legible for us mere humans.



SGI-PV: 953338
SGI-Modid: xfs-linux-melb:xfs-kern:26099a

Signed-off-by: default avatarNathan Scott <nathans@sgi.com>
parent e1090074
Loading
Loading
Loading
Loading
+1 −37
Original line number Diff line number Diff line
@@ -22,42 +22,6 @@
#include <linux/sched.h>
#include <linux/mm.h>

/*
 * Process flags handling
 */

#define PFLAGS_TEST_NOIO()              (current->flags & PF_NOIO)
#define PFLAGS_TEST_FSTRANS()           (current->flags & PF_FSTRANS)

#define PFLAGS_SET_NOIO() do {		\
	current->flags |= PF_NOIO;	\
} while (0)

#define PFLAGS_CLEAR_NOIO() do {	\
	current->flags &= ~PF_NOIO;	\
} while (0)

/* these could be nested, so we save state */
#define PFLAGS_SET_FSTRANS(STATEP) do {	\
	*(STATEP) = current->flags;	\
	current->flags |= PF_FSTRANS;	\
} while (0)

#define PFLAGS_CLEAR_FSTRANS(STATEP) do { \
	*(STATEP) = current->flags;	\
	current->flags &= ~PF_FSTRANS;	\
} while (0)

/* Restore the PF_FSTRANS state to what was saved in STATEP */
#define PFLAGS_RESTORE_FSTRANS(STATEP) do {     		\
	current->flags = ((current->flags & ~PF_FSTRANS) |	\
			  (*(STATEP) & PF_FSTRANS));		\
} while (0)

#define PFLAGS_DUP(OSTATEP, NSTATEP) do { \
	*(NSTATEP) = *(OSTATEP);	\
} while (0)

/*
 * General memory allocation interfaces
 */
@@ -83,7 +47,7 @@ kmem_flags_convert(unsigned int __nocast flags)
		lflags = GFP_ATOMIC | __GFP_NOWARN;
	} else {
		lflags = GFP_KERNEL | __GFP_NOWARN;
		if (PFLAGS_TEST_FSTRANS() || (flags & KM_NOFS))
		if ((current->flags & PF_FSTRANS) || (flags & KM_NOFS))
			lflags &= ~__GFP_FS;
	}
	return lflags;
+2 −2
Original line number Diff line number Diff line
@@ -1126,7 +1126,7 @@ xfs_vm_writepage(
	 * then mark the page dirty again and leave the page
	 * as is.
	 */
	if (PFLAGS_TEST_FSTRANS() && need_trans)
	if (current_test_flags(PF_FSTRANS) && need_trans)
		goto out_fail;

	/*
@@ -1203,7 +1203,7 @@ xfs_vm_releasepage(
	/* If we are already inside a transaction or the thread cannot
	 * do I/O, we cannot release this page.
	 */
	if (PFLAGS_TEST_FSTRANS())
	if (current_test_flags(PF_FSTRANS))
		return 0;

	/*
+10 −4
Original line number Diff line number Diff line
@@ -136,13 +136,19 @@ BUFFER_FNS(PrivateStart, unwritten);
#define xfs_rotorstep		xfs_params.rotorstep.val
#define xfs_inherit_nodefrag	xfs_params.inherit_nodfrg.val

#ifndef raw_smp_processor_id
#define raw_smp_processor_id()	smp_processor_id()
#endif
#define current_cpu()		raw_smp_processor_id()
#define current_cpu()		(raw_smp_processor_id())
#define current_pid()		(current->pid)
#define current_fsuid(cred)	(current->fsuid)
#define current_fsgid(cred)	(current->fsgid)
#define current_set_flags(f)	(current->flags |= (f))
#define current_test_flags(f)	(current->flags & (f))
#define current_clear_flags(f)	(current->flags & ~(f))
#define current_set_flags_nested(sp, f)		\
		(*(sp) = current->flags, current->flags |= (f))
#define current_clear_flags_nested(sp, f)	\
		(*(sp) = current->flags, current->flags &= ~(f))
#define current_restore_flags_nested(sp, f)	\
		(current->flags = ((current->flags & ~(f)) | (*(sp) & (f))))

#define NBPP		PAGE_SIZE
#define DPPSHFT		(PAGE_SHIFT - 9)
+11 −14
Original line number Diff line number Diff line
@@ -303,7 +303,7 @@ xfs_trans_dup(
	tp->t_blk_res = tp->t_blk_res_used;
	ntp->t_rtx_res = tp->t_rtx_res - tp->t_rtx_res_used;
	tp->t_rtx_res = tp->t_rtx_res_used;
	PFLAGS_DUP(&tp->t_pflags, &ntp->t_pflags);
	ntp->t_pflags = tp->t_pflags;

	XFS_TRANS_DUP_DQINFO(tp->t_mountp, tp, ntp);

@@ -335,14 +335,11 @@ xfs_trans_reserve(
	uint		logcount)
{
	int		log_flags;
	int		error;
	int	rsvd;

	error = 0;
	rsvd = (tp->t_flags & XFS_TRANS_RESERVE) != 0;
	int		error = 0;
	int		rsvd = (tp->t_flags & XFS_TRANS_RESERVE) != 0;

	/* Mark this thread as being in a transaction */
        PFLAGS_SET_FSTRANS(&tp->t_pflags);
	current_set_flags_nested(&tp->t_pflags, PF_FSTRANS);

	/*
	 * Attempt to reserve the needed disk blocks by decrementing
@@ -353,7 +350,7 @@ xfs_trans_reserve(
		error = xfs_mod_incore_sb(tp->t_mountp, XFS_SBS_FDBLOCKS,
					  -blocks, rsvd);
		if (error != 0) {
                        PFLAGS_RESTORE_FSTRANS(&tp->t_pflags);
			current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);
			return (XFS_ERROR(ENOSPC));
		}
		tp->t_blk_res += blocks;
@@ -426,9 +423,9 @@ undo_blocks:
		tp->t_blk_res = 0;
	}

        PFLAGS_RESTORE_FSTRANS(&tp->t_pflags);
	current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);

	return (error);
	return error;
}


@@ -819,7 +816,7 @@ shut_us_down:
			if (commit_lsn == -1 && !shutdown)
				shutdown = XFS_ERROR(EIO);
		}
                PFLAGS_RESTORE_FSTRANS(&tp->t_pflags);
		current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);
		xfs_trans_free_items(tp, shutdown? XFS_TRANS_ABORT : 0);
		xfs_trans_free_busy(tp);
		xfs_trans_free(tp);
@@ -884,7 +881,7 @@ shut_us_down:
	 * had pinned, clean up, free trans structure, and return error.
	 */
	if (error || commit_lsn == -1) {
                PFLAGS_RESTORE_FSTRANS(&tp->t_pflags);
		current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);
		xfs_trans_uncommit(tp, flags|XFS_TRANS_ABORT);
		return XFS_ERROR(EIO);
	}
@@ -926,7 +923,7 @@ shut_us_down:
	/*
	 * Mark this thread as no longer being in a transaction
	 */
	PFLAGS_RESTORE_FSTRANS(&tp->t_pflags);
	current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);

	/*
	 * Once all the items of the transaction have been copied
@@ -1182,7 +1179,7 @@ xfs_trans_cancel(
	}

	/* mark this thread as no longer being in a transaction */
        PFLAGS_RESTORE_FSTRANS(&tp->t_pflags);
	current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);

	xfs_trans_free_items(tp, flags);
	xfs_trans_free_busy(tp);