diff options
author | David Chinner <dgc@sgi.com> | 2006-03-13 21:29:16 -0500 |
---|---|---|
committer | Nathan Scott <nathans@sgi.com> | 2006-03-13 21:29:16 -0500 |
commit | 01e1b69cfcdcfdd5b405165eaba29428f8b18a7c (patch) | |
tree | 3ca7e8d0047ff03ca532f39b0fc4cd50381e8ecc /fs/xfs/xfs_mount.h | |
parent | 87cbc49cd4b773a972bce56c5dd09c4717f3285b (diff) |
[XFS] using a spinlock per cpu for superblock counter exclusion results in
a preēmpt counter overflow at 256p and above. Change the exclusion
mechanism to use atomic bit operations and busy wait loops to emulate the
spin lock exclusion mechanism but without the preempt count issues.
SGI-PV: 950027
SGI-Modid: xfs-linux-melb:xfs-kern:25338a
Signed-off-by: David Chinner <dgc@sgi.com>
Signed-off-by: Nathan Scott <nathans@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_mount.h')
-rw-r--r-- | fs/xfs/xfs_mount.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 9d2ffbdc37a9..29cfcf0c11be 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h | |||
@@ -280,9 +280,11 @@ typedef struct xfs_icsb_cnts { | |||
280 | uint64_t icsb_fdblocks; | 280 | uint64_t icsb_fdblocks; |
281 | uint64_t icsb_ifree; | 281 | uint64_t icsb_ifree; |
282 | uint64_t icsb_icount; | 282 | uint64_t icsb_icount; |
283 | spinlock_t icsb_lock; | 283 | unsigned long icsb_flags; |
284 | } xfs_icsb_cnts_t; | 284 | } xfs_icsb_cnts_t; |
285 | 285 | ||
286 | #define XFS_ICSB_FLAG_LOCK (1 << 0) /* counter lock bit */ | ||
287 | |||
286 | #define XFS_ICSB_SB_LOCKED (1 << 0) /* sb already locked */ | 288 | #define XFS_ICSB_SB_LOCKED (1 << 0) /* sb already locked */ |
287 | #define XFS_ICSB_LAZY_COUNT (1 << 1) /* accuracy not needed */ | 289 | #define XFS_ICSB_LAZY_COUNT (1 << 1) /* accuracy not needed */ |
288 | 290 | ||