aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2010-05-14 07:41:46 -0400
committerAlex Elder <aelder@sgi.com>2010-05-24 11:33:52 -0400
commit955833cf2ad0aa39b336e853cad212d867199984 (patch)
tree301c224647dea71852e36929932321bccabd1dc4
parent169a7b078eaa765e6bd09865c985298ee9084a89 (diff)
xfs: make the log ticket ID available outside the log infrastructure
The ticket ID is needed to uniquely identify transactions when doing busy extent matching. Delayed logging changes the lifecycle of busy extents with respect to the transaction structure lifecycle. Hence we can no longer use the transaction structure as a means of determining the owner of the busy extent as it may be freed and reused while the busy extent is still active. This commit provides the infrastructure to access the xlog_tid_t held in the ticket from a transaction handle. This avoids the need for callers to peek into the transaction and log structures to find this out. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Alex Elder <aelder@sgi.com>
-rw-r--r--fs/xfs/xfs_log.c7
-rw-r--r--fs/xfs/xfs_log.h4
-rw-r--r--fs/xfs/xfs_log_priv.h2
-rw-r--r--fs/xfs/xfs_types.h2
4 files changed, 12 insertions, 3 deletions
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
index 1efb303d3aaf..19d0c5f73e24 100644
--- a/fs/xfs/xfs_log.c
+++ b/fs/xfs/xfs_log.c
@@ -3312,6 +3312,13 @@ xfs_log_ticket_get(
3312 return ticket; 3312 return ticket;
3313} 3313}
3314 3314
3315xlog_tid_t
3316xfs_log_get_trans_ident(
3317 struct xfs_trans *tp)
3318{
3319 return tp->t_ticket->t_tid;
3320}
3321
3315/* 3322/*
3316 * Allocate and initialise a new log ticket. 3323 * Allocate and initialise a new log ticket.
3317 */ 3324 */
diff --git a/fs/xfs/xfs_log.h b/fs/xfs/xfs_log.h
index 229d1f36ba9a..05f205aac913 100644
--- a/fs/xfs/xfs_log.h
+++ b/fs/xfs/xfs_log.h
@@ -19,7 +19,6 @@
19#define __XFS_LOG_H__ 19#define __XFS_LOG_H__
20 20
21/* get lsn fields */ 21/* get lsn fields */
22
23#define CYCLE_LSN(lsn) ((uint)((lsn)>>32)) 22#define CYCLE_LSN(lsn) ((uint)((lsn)>>32))
24#define BLOCK_LSN(lsn) ((uint)(lsn)) 23#define BLOCK_LSN(lsn) ((uint)(lsn))
25 24
@@ -134,6 +133,7 @@ struct xlog_in_core;
134struct xlog_ticket; 133struct xlog_ticket;
135struct xfs_log_item; 134struct xfs_log_item;
136struct xfs_item_ops; 135struct xfs_item_ops;
136struct xfs_trans;
137 137
138void xfs_log_item_init(struct xfs_mount *mp, 138void xfs_log_item_init(struct xfs_mount *mp,
139 struct xfs_log_item *item, 139 struct xfs_log_item *item,
@@ -190,6 +190,8 @@ void xlog_iodone(struct xfs_buf *);
190struct xlog_ticket * xfs_log_ticket_get(struct xlog_ticket *ticket); 190struct xlog_ticket * xfs_log_ticket_get(struct xlog_ticket *ticket);
191void xfs_log_ticket_put(struct xlog_ticket *ticket); 191void xfs_log_ticket_put(struct xlog_ticket *ticket);
192 192
193xlog_tid_t xfs_log_get_trans_ident(struct xfs_trans *tp);
194
193#endif 195#endif
194 196
195 197
diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h
index 9cf695154451..ac97bddcadba 100644
--- a/fs/xfs/xfs_log_priv.h
+++ b/fs/xfs/xfs_log_priv.h
@@ -152,8 +152,6 @@ static inline uint xlog_get_client_id(__be32 i)
152#define XLOG_RECOVERY_NEEDED 0x4 /* log was recovered */ 152#define XLOG_RECOVERY_NEEDED 0x4 /* log was recovered */
153#define XLOG_IO_ERROR 0x8 /* log hit an I/O error, and being 153#define XLOG_IO_ERROR 0x8 /* log hit an I/O error, and being
154 shutdown */ 154 shutdown */
155typedef __uint32_t xlog_tid_t;
156
157 155
158#ifdef __KERNEL__ 156#ifdef __KERNEL__
159/* 157/*
diff --git a/fs/xfs/xfs_types.h b/fs/xfs/xfs_types.h
index b09904555d07..320775295e32 100644
--- a/fs/xfs/xfs_types.h
+++ b/fs/xfs/xfs_types.h
@@ -75,6 +75,8 @@ typedef __uint32_t xfs_dahash_t; /* dir/attr hash value */
75 75
76typedef __uint16_t xfs_prid_t; /* prid_t truncated to 16bits in XFS */ 76typedef __uint16_t xfs_prid_t; /* prid_t truncated to 16bits in XFS */
77 77
78typedef __uint32_t xlog_tid_t; /* transaction ID type */
79
78/* 80/*
79 * These types are 64 bits on disk but are either 32 or 64 bits in memory. 81 * These types are 64 bits on disk but are either 32 or 64 bits in memory.
80 * Disk based types: 82 * Disk based types: