aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_trans_priv.h
diff options
context:
space:
mode:
authorDavid Chinner <david@fromorbit.com>2008-10-30 02:39:12 -0400
committerLachlan McIlroy <lachlan@sgi.com>2008-10-30 02:39:12 -0400
commit7b2e2a31f5c23b5f028af8c895137b4c512cc1c8 (patch)
treec37aa7117a16ebcd01d0ac2687b944e5dd8a7361 /fs/xfs/xfs_trans_priv.h
parent5b00f14fbd60d42441f78c0e414a539cbfba5cb9 (diff)
[XFS] Allow 64 bit machines to avoid the AIL lock during flushes
When copying lsn's from the log item to the inode or dquot flush lsn, we currently grab the AIL lock. We do this because the LSN is a 64 bit quantity and it needs to be read atomically. The lock is used to guarantee atomicity for 32 bit platforms. Make the LSN copying a small function, and make the function used conditional on BITS_PER_LONG so that 64 bit machines don't need to take the AIL lock in these places. SGI-PV: 988143 SGI-Modid: xfs-linux-melb:xfs-kern:32349a Signed-off-by: David Chinner <david@fromorbit.com> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com> Signed-off-by: Christoph Hellwig <hch@infradead.org>
Diffstat (limited to 'fs/xfs/xfs_trans_priv.h')
-rw-r--r--fs/xfs/xfs_trans_priv.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/fs/xfs/xfs_trans_priv.h b/fs/xfs/xfs_trans_priv.h
index aa5853502529..708cff72d209 100644
--- a/fs/xfs/xfs_trans_priv.h
+++ b/fs/xfs/xfs_trans_priv.h
@@ -106,4 +106,27 @@ void xfsaild_wakeup(struct xfs_ail *, xfs_lsn_t);
106int xfsaild_start(struct xfs_ail *); 106int xfsaild_start(struct xfs_ail *);
107void xfsaild_stop(struct xfs_ail *); 107void xfsaild_stop(struct xfs_ail *);
108 108
109#if BITS_PER_LONG != 64
110static inline void
111xfs_trans_ail_copy_lsn(
112 struct xfs_ail *ailp,
113 xfs_lsn_t *dst,
114 xfs_lsn_t *src)
115{
116 ASSERT(sizeof(xfs_lsn_t) == 8); /* don't lock if it shrinks */
117 spin_lock(&ailp->xa_mount->m_ail_lock);
118 *dst = *src;
119 spin_unlock(&ailp->xa_mount->m_ail_lock);
120}
121#else
122static inline void
123xfs_trans_ail_copy_lsn(
124 struct xfs_ail *ailp,
125 xfs_lsn_t *dst,
126 xfs_lsn_t *src)
127{
128 ASSERT(sizeof(xfs_lsn_t) == 8);
129 *dst = *src;
130}
131#endif
109#endif /* __XFS_TRANS_PRIV_H__ */ 132#endif /* __XFS_TRANS_PRIV_H__ */