diff options
Diffstat (limited to 'fs/xfs/xfs_log.h')
-rw-r--r-- | fs/xfs/xfs_log.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/fs/xfs/xfs_log.h b/fs/xfs/xfs_log.h index e148719e0a5d..b0f4ef77fa70 100644 --- a/fs/xfs/xfs_log.h +++ b/fs/xfs/xfs_log.h | |||
@@ -30,6 +30,52 @@ struct xfs_log_vec { | |||
30 | 30 | ||
31 | #define XFS_LOG_VEC_ORDERED (-1) | 31 | #define XFS_LOG_VEC_ORDERED (-1) |
32 | 32 | ||
33 | static inline void * | ||
34 | xlog_prepare_iovec(struct xfs_log_vec *lv, struct xfs_log_iovec **vecp, | ||
35 | uint type) | ||
36 | { | ||
37 | struct xfs_log_iovec *vec = *vecp; | ||
38 | |||
39 | if (vec) { | ||
40 | ASSERT(vec - lv->lv_iovecp < lv->lv_niovecs); | ||
41 | vec++; | ||
42 | } else { | ||
43 | vec = &lv->lv_iovecp[0]; | ||
44 | } | ||
45 | |||
46 | vec->i_type = type; | ||
47 | vec->i_addr = lv->lv_buf + lv->lv_buf_len; | ||
48 | |||
49 | ASSERT(IS_ALIGNED((unsigned long)vec->i_addr, sizeof(uint64_t))); | ||
50 | |||
51 | *vecp = vec; | ||
52 | return vec->i_addr; | ||
53 | } | ||
54 | |||
55 | static inline void | ||
56 | xlog_finish_iovec(struct xfs_log_vec *lv, struct xfs_log_iovec *vec, int len) | ||
57 | { | ||
58 | /* | ||
59 | * We need to make sure the next buffer is naturally aligned for the | ||
60 | * biggest basic data type we put into it. We already accounted for | ||
61 | * this when sizing the buffer. | ||
62 | */ | ||
63 | lv->lv_buf_len += round_up(len, sizeof(uint64_t)); | ||
64 | vec->i_len = len; | ||
65 | } | ||
66 | |||
67 | static inline void * | ||
68 | xlog_copy_iovec(struct xfs_log_vec *lv, struct xfs_log_iovec **vecp, | ||
69 | uint type, void *data, int len) | ||
70 | { | ||
71 | void *buf; | ||
72 | |||
73 | buf = xlog_prepare_iovec(lv, vecp, type); | ||
74 | memcpy(buf, data, len); | ||
75 | xlog_finish_iovec(lv, *vecp, len); | ||
76 | return buf; | ||
77 | } | ||
78 | |||
33 | /* | 79 | /* |
34 | * Structure used to pass callback function and the function's argument | 80 | * Structure used to pass callback function and the function's argument |
35 | * to the log manager. | 81 | * to the log manager. |