diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/linux-2.6/kmem.h | 38 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_aops.c | 4 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_linux.h | 14 | ||||
-rw-r--r-- | fs/xfs/xfs_trans.c | 25 |
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); |