diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/quota/xfs_dquot.c | 6 | ||||
-rw-r--r-- | fs/xfs/xfs_inode.c | 17 | ||||
-rw-r--r-- | fs/xfs/xfs_trans_priv.h | 23 |
3 files changed, 32 insertions, 14 deletions
diff --git a/fs/xfs/quota/xfs_dquot.c b/fs/xfs/quota/xfs_dquot.c index 1e6bf3925645..59c1081412ec 100644 --- a/fs/xfs/quota/xfs_dquot.c +++ b/fs/xfs/quota/xfs_dquot.c | |||
@@ -1272,10 +1272,8 @@ xfs_qm_dqflush( | |||
1272 | dqp->dq_flags &= ~(XFS_DQ_DIRTY); | 1272 | dqp->dq_flags &= ~(XFS_DQ_DIRTY); |
1273 | mp = dqp->q_mount; | 1273 | mp = dqp->q_mount; |
1274 | 1274 | ||
1275 | /* lsn is 64 bits */ | 1275 | xfs_trans_ail_copy_lsn(mp->m_ail, &dqp->q_logitem.qli_flush_lsn, |
1276 | spin_lock(&mp->m_ail_lock); | 1276 | &dqp->q_logitem.qli_item.li_lsn); |
1277 | dqp->q_logitem.qli_flush_lsn = dqp->q_logitem.qli_item.li_lsn; | ||
1278 | spin_unlock(&mp->m_ail_lock); | ||
1279 | 1277 | ||
1280 | /* | 1278 | /* |
1281 | * Attach an iodone routine so that we can remove this dquot from the | 1279 | * Attach an iodone routine so that we can remove this dquot from the |
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 4eb629f0513e..2951ffd83066 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
@@ -2214,9 +2214,9 @@ xfs_ifree_cluster( | |||
2214 | iip = (xfs_inode_log_item_t *)lip; | 2214 | iip = (xfs_inode_log_item_t *)lip; |
2215 | ASSERT(iip->ili_logged == 1); | 2215 | ASSERT(iip->ili_logged == 1); |
2216 | lip->li_cb = (void(*)(xfs_buf_t*,xfs_log_item_t*)) xfs_istale_done; | 2216 | lip->li_cb = (void(*)(xfs_buf_t*,xfs_log_item_t*)) xfs_istale_done; |
2217 | spin_lock(&mp->m_ail_lock); | 2217 | xfs_trans_ail_copy_lsn(mp->m_ail, |
2218 | iip->ili_flush_lsn = iip->ili_item.li_lsn; | 2218 | &iip->ili_flush_lsn, |
2219 | spin_unlock(&mp->m_ail_lock); | 2219 | &iip->ili_item.li_lsn); |
2220 | xfs_iflags_set(iip->ili_inode, XFS_ISTALE); | 2220 | xfs_iflags_set(iip->ili_inode, XFS_ISTALE); |
2221 | pre_flushed++; | 2221 | pre_flushed++; |
2222 | } | 2222 | } |
@@ -2237,9 +2237,8 @@ xfs_ifree_cluster( | |||
2237 | iip->ili_last_fields = iip->ili_format.ilf_fields; | 2237 | iip->ili_last_fields = iip->ili_format.ilf_fields; |
2238 | iip->ili_format.ilf_fields = 0; | 2238 | iip->ili_format.ilf_fields = 0; |
2239 | iip->ili_logged = 1; | 2239 | iip->ili_logged = 1; |
2240 | spin_lock(&mp->m_ail_lock); | 2240 | xfs_trans_ail_copy_lsn(mp->m_ail, &iip->ili_flush_lsn, |
2241 | iip->ili_flush_lsn = iip->ili_item.li_lsn; | 2241 | &iip->ili_item.li_lsn); |
2242 | spin_unlock(&mp->m_ail_lock); | ||
2243 | 2242 | ||
2244 | xfs_buf_attach_iodone(bp, | 2243 | xfs_buf_attach_iodone(bp, |
2245 | (void(*)(xfs_buf_t*,xfs_log_item_t*)) | 2244 | (void(*)(xfs_buf_t*,xfs_log_item_t*)) |
@@ -3476,10 +3475,8 @@ xfs_iflush_int( | |||
3476 | iip->ili_format.ilf_fields = 0; | 3475 | iip->ili_format.ilf_fields = 0; |
3477 | iip->ili_logged = 1; | 3476 | iip->ili_logged = 1; |
3478 | 3477 | ||
3479 | ASSERT(sizeof(xfs_lsn_t) == 8); /* don't lock if it shrinks */ | 3478 | xfs_trans_ail_copy_lsn(mp->m_ail, &iip->ili_flush_lsn, |
3480 | spin_lock(&mp->m_ail_lock); | 3479 | &iip->ili_item.li_lsn); |
3481 | iip->ili_flush_lsn = iip->ili_item.li_lsn; | ||
3482 | spin_unlock(&mp->m_ail_lock); | ||
3483 | 3480 | ||
3484 | /* | 3481 | /* |
3485 | * Attach the function xfs_iflush_done to the inode's | 3482 | * Attach the function xfs_iflush_done to the inode's |
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); | |||
106 | int xfsaild_start(struct xfs_ail *); | 106 | int xfsaild_start(struct xfs_ail *); |
107 | void xfsaild_stop(struct xfs_ail *); | 107 | void xfsaild_stop(struct xfs_ail *); |
108 | 108 | ||
109 | #if BITS_PER_LONG != 64 | ||
110 | static inline void | ||
111 | xfs_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 | ||
122 | static inline void | ||
123 | xfs_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__ */ |