aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/xfs/linux-2.6/kmem.h38
-rw-r--r--fs/xfs/linux-2.6/xfs_aops.c4
-rw-r--r--fs/xfs/linux-2.6/xfs_linux.h14
-rw-r--r--fs/xfs/xfs_trans.c25
4 files changed, 24 insertions, 57 deletions
diff --git a/fs/xfs/linux-2.6/kmem.h b/fs/xfs/linux-2.6/kmem.h
index 2cfd33d4d8aa..939bd84bc7ee 100644
--- a/fs/xfs/linux-2.6/kmem.h
+++ b/fs/xfs/linux-2.6/kmem.h
@@ -23,42 +23,6 @@
23#include <linux/mm.h> 23#include <linux/mm.h>
24 24
25/* 25/*
26 * Process flags handling
27 */
28
29#define PFLAGS_TEST_NOIO() (current->flags & PF_NOIO)
30#define PFLAGS_TEST_FSTRANS() (current->flags & PF_FSTRANS)
31
32#define PFLAGS_SET_NOIO() do { \
33 current->flags |= PF_NOIO; \
34} while (0)
35
36#define PFLAGS_CLEAR_NOIO() do { \
37 current->flags &= ~PF_NOIO; \
38} while (0)
39
40/* these could be nested, so we save state */
41#define PFLAGS_SET_FSTRANS(STATEP) do { \
42 *(STATEP) = current->flags; \
43 current->flags |= PF_FSTRANS; \
44} while (0)
45
46#define PFLAGS_CLEAR_FSTRANS(STATEP) do { \
47 *(STATEP) = current->flags; \
48 current->flags &= ~PF_FSTRANS; \
49} while (0)
50
51/* Restore the PF_FSTRANS state to what was saved in STATEP */
52#define PFLAGS_RESTORE_FSTRANS(STATEP) do { \
53 current->flags = ((current->flags & ~PF_FSTRANS) | \
54 (*(STATEP) & PF_FSTRANS)); \
55} while (0)
56
57#define PFLAGS_DUP(OSTATEP, NSTATEP) do { \
58 *(NSTATEP) = *(OSTATEP); \
59} while (0)
60
61/*
62 * General memory allocation interfaces 26 * General memory allocation interfaces
63 */ 27 */
64 28
@@ -83,7 +47,7 @@ kmem_flags_convert(unsigned int __nocast flags)
83 lflags = GFP_ATOMIC | __GFP_NOWARN; 47 lflags = GFP_ATOMIC | __GFP_NOWARN;
84 } else { 48 } else {
85 lflags = GFP_KERNEL | __GFP_NOWARN; 49 lflags = GFP_KERNEL | __GFP_NOWARN;
86 if (PFLAGS_TEST_FSTRANS() || (flags & KM_NOFS)) 50 if ((current->flags & PF_FSTRANS) || (flags & KM_NOFS))
87 lflags &= ~__GFP_FS; 51 lflags &= ~__GFP_FS;
88 } 52 }
89 return lflags; 53 return lflags;
diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c
index 1fcdc0abda6e..5835e699a7fc 100644
--- a/fs/xfs/linux-2.6/xfs_aops.c
+++ b/fs/xfs/linux-2.6/xfs_aops.c
@@ -1126,7 +1126,7 @@ xfs_vm_writepage(
1126 * then mark the page dirty again and leave the page 1126 * then mark the page dirty again and leave the page
1127 * as is. 1127 * as is.
1128 */ 1128 */
1129 if (PFLAGS_TEST_FSTRANS() && need_trans) 1129 if (current_test_flags(PF_FSTRANS) && need_trans)
1130 goto out_fail; 1130 goto out_fail;
1131 1131
1132 /* 1132 /*
@@ -1203,7 +1203,7 @@ xfs_vm_releasepage(
1203 /* If we are already inside a transaction or the thread cannot 1203 /* If we are already inside a transaction or the thread cannot
1204 * do I/O, we cannot release this page. 1204 * do I/O, we cannot release this page.
1205 */ 1205 */
1206 if (PFLAGS_TEST_FSTRANS()) 1206 if (current_test_flags(PF_FSTRANS))
1207 return 0; 1207 return 0;
1208 1208
1209 /* 1209 /*
diff --git a/fs/xfs/linux-2.6/xfs_linux.h b/fs/xfs/linux-2.6/xfs_linux.h
index 7d15cb910275..e92853954111 100644
--- a/fs/xfs/linux-2.6/xfs_linux.h
+++ b/fs/xfs/linux-2.6/xfs_linux.h
@@ -136,13 +136,19 @@ BUFFER_FNS(PrivateStart, unwritten);
136#define xfs_rotorstep xfs_params.rotorstep.val 136#define xfs_rotorstep xfs_params.rotorstep.val
137#define xfs_inherit_nodefrag xfs_params.inherit_nodfrg.val 137#define xfs_inherit_nodefrag xfs_params.inherit_nodfrg.val
138 138
139#ifndef raw_smp_processor_id 139#define current_cpu() (raw_smp_processor_id())
140#define raw_smp_processor_id() smp_processor_id()
141#endif
142#define current_cpu() raw_smp_processor_id()
143#define current_pid() (current->pid) 140#define current_pid() (current->pid)
144#define current_fsuid(cred) (current->fsuid) 141#define current_fsuid(cred) (current->fsuid)
145#define current_fsgid(cred) (current->fsgid) 142#define current_fsgid(cred) (current->fsgid)
143#define current_set_flags(f) (current->flags |= (f))
144#define current_test_flags(f) (current->flags & (f))
145#define current_clear_flags(f) (current->flags & ~(f))
146#define current_set_flags_nested(sp, f) \
147 (*(sp) = current->flags, current->flags |= (f))
148#define current_clear_flags_nested(sp, f) \
149 (*(sp) = current->flags, current->flags &= ~(f))
150#define current_restore_flags_nested(sp, f) \
151 (current->flags = ((current->flags & ~(f)) | (*(sp) & (f))))
146 152
147#define NBPP PAGE_SIZE 153#define NBPP PAGE_SIZE
148#define DPPSHFT (PAGE_SHIFT - 9) 154#define DPPSHFT (PAGE_SHIFT - 9)
diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c
index c05da5871a51..7a99ed3b187f 100644
--- a/fs/xfs/xfs_trans.c
+++ b/fs/xfs/xfs_trans.c
@@ -303,7 +303,7 @@ xfs_trans_dup(
303 tp->t_blk_res = tp->t_blk_res_used; 303 tp->t_blk_res = tp->t_blk_res_used;
304 ntp->t_rtx_res = tp->t_rtx_res - tp->t_rtx_res_used; 304 ntp->t_rtx_res = tp->t_rtx_res - tp->t_rtx_res_used;
305 tp->t_rtx_res = tp->t_rtx_res_used; 305 tp->t_rtx_res = tp->t_rtx_res_used;
306 PFLAGS_DUP(&tp->t_pflags, &ntp->t_pflags); 306 ntp->t_pflags = tp->t_pflags;
307 307
308 XFS_TRANS_DUP_DQINFO(tp->t_mountp, tp, ntp); 308 XFS_TRANS_DUP_DQINFO(tp->t_mountp, tp, ntp);
309 309
@@ -335,14 +335,11 @@ xfs_trans_reserve(
335 uint logcount) 335 uint logcount)
336{ 336{
337 int log_flags; 337 int log_flags;
338 int error; 338 int error = 0;
339 int rsvd; 339 int rsvd = (tp->t_flags & XFS_TRANS_RESERVE) != 0;
340
341 error = 0;
342 rsvd = (tp->t_flags & XFS_TRANS_RESERVE) != 0;
343 340
344 /* Mark this thread as being in a transaction */ 341 /* Mark this thread as being in a transaction */
345 PFLAGS_SET_FSTRANS(&tp->t_pflags); 342 current_set_flags_nested(&tp->t_pflags, PF_FSTRANS);
346 343
347 /* 344 /*
348 * Attempt to reserve the needed disk blocks by decrementing 345 * Attempt to reserve the needed disk blocks by decrementing
@@ -353,7 +350,7 @@ xfs_trans_reserve(
353 error = xfs_mod_incore_sb(tp->t_mountp, XFS_SBS_FDBLOCKS, 350 error = xfs_mod_incore_sb(tp->t_mountp, XFS_SBS_FDBLOCKS,
354 -blocks, rsvd); 351 -blocks, rsvd);
355 if (error != 0) { 352 if (error != 0) {
356 PFLAGS_RESTORE_FSTRANS(&tp->t_pflags); 353 current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);
357 return (XFS_ERROR(ENOSPC)); 354 return (XFS_ERROR(ENOSPC));
358 } 355 }
359 tp->t_blk_res += blocks; 356 tp->t_blk_res += blocks;
@@ -426,9 +423,9 @@ undo_blocks:
426 tp->t_blk_res = 0; 423 tp->t_blk_res = 0;
427 } 424 }
428 425
429 PFLAGS_RESTORE_FSTRANS(&tp->t_pflags); 426 current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);
430 427
431 return (error); 428 return error;
432} 429}
433 430
434 431
@@ -819,7 +816,7 @@ shut_us_down:
819 if (commit_lsn == -1 && !shutdown) 816 if (commit_lsn == -1 && !shutdown)
820 shutdown = XFS_ERROR(EIO); 817 shutdown = XFS_ERROR(EIO);
821 } 818 }
822 PFLAGS_RESTORE_FSTRANS(&tp->t_pflags); 819 current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);
823 xfs_trans_free_items(tp, shutdown? XFS_TRANS_ABORT : 0); 820 xfs_trans_free_items(tp, shutdown? XFS_TRANS_ABORT : 0);
824 xfs_trans_free_busy(tp); 821 xfs_trans_free_busy(tp);
825 xfs_trans_free(tp); 822 xfs_trans_free(tp);
@@ -884,7 +881,7 @@ shut_us_down:
884 * had pinned, clean up, free trans structure, and return error. 881 * had pinned, clean up, free trans structure, and return error.
885 */ 882 */
886 if (error || commit_lsn == -1) { 883 if (error || commit_lsn == -1) {
887 PFLAGS_RESTORE_FSTRANS(&tp->t_pflags); 884 current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);
888 xfs_trans_uncommit(tp, flags|XFS_TRANS_ABORT); 885 xfs_trans_uncommit(tp, flags|XFS_TRANS_ABORT);
889 return XFS_ERROR(EIO); 886 return XFS_ERROR(EIO);
890 } 887 }
@@ -926,7 +923,7 @@ shut_us_down:
926 /* 923 /*
927 * Mark this thread as no longer being in a transaction 924 * Mark this thread as no longer being in a transaction
928 */ 925 */
929 PFLAGS_RESTORE_FSTRANS(&tp->t_pflags); 926 current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);
930 927
931 /* 928 /*
932 * Once all the items of the transaction have been copied 929 * Once all the items of the transaction have been copied
@@ -1182,7 +1179,7 @@ xfs_trans_cancel(
1182 } 1179 }
1183 1180
1184 /* mark this thread as no longer being in a transaction */ 1181 /* mark this thread as no longer being in a transaction */
1185 PFLAGS_RESTORE_FSTRANS(&tp->t_pflags); 1182 current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);
1186 1183
1187 xfs_trans_free_items(tp, flags); 1184 xfs_trans_free_items(tp, flags);
1188 xfs_trans_free_busy(tp); 1185 xfs_trans_free_busy(tp);