aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2010-03-22 20:47:38 -0400
committerAlex Elder <aelder@sgi.com>2010-05-19 10:58:10 -0400
commite6b1f27370fc67ac9868b2dbe2c22bc26952900e (patch)
tree69485365ff6b9f22a56bcfc4814b27b45622d6e9
parent55b66332d0921146a914d5d75a7b870a65dc4938 (diff)
xfs: clean up xlog_write_adv_cnt
Replace the awkward xlog_write_adv_cnt with an inline helper that makes it more obvious that it's modifying it's paramters, and replace the use of an integer type for "ptr" with a real void pointer. Also move xlog_write_adv_cnt to xfs_log_priv.h as it will be used outside of xfs_log.c in the delayed logging series. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com>
-rw-r--r--fs/xfs/xfs_log.c46
-rw-r--r--fs/xfs/xfs_log_priv.h8
2 files changed, 27 insertions, 27 deletions
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
index 2e6f3b82e4b7..9edbd67b5a9d 100644
--- a/fs/xfs/xfs_log.c
+++ b/fs/xfs/xfs_log.c
@@ -44,11 +44,6 @@
44 44
45kmem_zone_t *xfs_log_ticket_zone; 45kmem_zone_t *xfs_log_ticket_zone;
46 46
47#define xlog_write_adv_cnt(ptr, len, off, bytes) \
48 { (ptr) += (bytes); \
49 (len) -= (bytes); \
50 (off) += (bytes);}
51
52/* Local miscellaneous function prototypes */ 47/* Local miscellaneous function prototypes */
53STATIC int xlog_commit_record(struct log *log, struct xlog_ticket *ticket, 48STATIC int xlog_commit_record(struct log *log, struct xlog_ticket *ticket,
54 xlog_in_core_t **, xfs_lsn_t *); 49 xlog_in_core_t **, xfs_lsn_t *);
@@ -100,7 +95,7 @@ STATIC xlog_ticket_t *xlog_ticket_alloc(xlog_t *log,
100 uint flags); 95 uint flags);
101 96
102#if defined(DEBUG) 97#if defined(DEBUG)
103STATIC void xlog_verify_dest_ptr(xlog_t *log, __psint_t ptr); 98STATIC void xlog_verify_dest_ptr(xlog_t *log, char *ptr);
104STATIC void xlog_verify_grant_head(xlog_t *log, int equals); 99STATIC void xlog_verify_grant_head(xlog_t *log, int equals);
105STATIC void xlog_verify_iclog(xlog_t *log, xlog_in_core_t *iclog, 100STATIC void xlog_verify_iclog(xlog_t *log, xlog_in_core_t *iclog,
106 int count, boolean_t syncing); 101 int count, boolean_t syncing);
@@ -1683,11 +1678,9 @@ xlog_write_calc_vec_length(
1683 */ 1678 */
1684static int 1679static int
1685xlog_write_start_rec( 1680xlog_write_start_rec(
1686 __psint_t ptr, 1681 struct xlog_op_header *ophdr,
1687 struct xlog_ticket *ticket) 1682 struct xlog_ticket *ticket)
1688{ 1683{
1689 struct xlog_op_header *ophdr = (struct xlog_op_header *)ptr;
1690
1691 if (!(ticket->t_flags & XLOG_TIC_INITED)) 1684 if (!(ticket->t_flags & XLOG_TIC_INITED))
1692 return 0; 1685 return 0;
1693 1686
@@ -1705,12 +1698,10 @@ xlog_write_start_rec(
1705static xlog_op_header_t * 1698static xlog_op_header_t *
1706xlog_write_setup_ophdr( 1699xlog_write_setup_ophdr(
1707 struct log *log, 1700 struct log *log,
1708 __psint_t ptr, 1701 struct xlog_op_header *ophdr,
1709 struct xlog_ticket *ticket, 1702 struct xlog_ticket *ticket,
1710 uint flags) 1703 uint flags)
1711{ 1704{
1712 struct xlog_op_header *ophdr = (struct xlog_op_header *)ptr;
1713
1714 ophdr->oh_tid = cpu_to_be32(ticket->t_tid); 1705 ophdr->oh_tid = cpu_to_be32(ticket->t_tid);
1715 ophdr->oh_clientid = ticket->t_clientid; 1706 ophdr->oh_clientid = ticket->t_clientid;
1716 ophdr->oh_res2 = 0; 1707 ophdr->oh_res2 = 0;
@@ -1917,7 +1908,7 @@ xlog_write(
1917 lv = log_vector; 1908 lv = log_vector;
1918 vecp = lv->lv_iovecp; 1909 vecp = lv->lv_iovecp;
1919 while (lv && index < lv->lv_niovecs) { 1910 while (lv && index < lv->lv_niovecs) {
1920 __psint_t ptr; 1911 void *ptr;
1921 int log_offset; 1912 int log_offset;
1922 1913
1923 error = xlog_state_get_iclog_space(log, len, &iclog, ticket, 1914 error = xlog_state_get_iclog_space(log, len, &iclog, ticket,
@@ -1926,7 +1917,7 @@ xlog_write(
1926 return error; 1917 return error;
1927 1918
1928 ASSERT(log_offset <= iclog->ic_size - 1); 1919 ASSERT(log_offset <= iclog->ic_size - 1);
1929 ptr = (__psint_t)((char *)iclog->ic_datap + log_offset); 1920 ptr = iclog->ic_datap + log_offset;
1930 1921
1931 /* start_lsn is the first lsn written to. That's all we need. */ 1922 /* start_lsn is the first lsn written to. That's all we need. */
1932 if (!*start_lsn) 1923 if (!*start_lsn)
@@ -1944,12 +1935,12 @@ xlog_write(
1944 int copy_off; 1935 int copy_off;
1945 1936
1946 ASSERT(reg->i_len % sizeof(__int32_t) == 0); 1937 ASSERT(reg->i_len % sizeof(__int32_t) == 0);
1947 ASSERT((__psint_t)ptr % sizeof(__int32_t) == 0); 1938 ASSERT((unsigned long)ptr % sizeof(__int32_t) == 0);
1948 1939
1949 start_rec_copy = xlog_write_start_rec(ptr, ticket); 1940 start_rec_copy = xlog_write_start_rec(ptr, ticket);
1950 if (start_rec_copy) { 1941 if (start_rec_copy) {
1951 record_cnt++; 1942 record_cnt++;
1952 xlog_write_adv_cnt(ptr, len, log_offset, 1943 xlog_write_adv_cnt(&ptr, &len, &log_offset,
1953 start_rec_copy); 1944 start_rec_copy);
1954 } 1945 }
1955 1946
@@ -1957,7 +1948,7 @@ xlog_write(
1957 if (!ophdr) 1948 if (!ophdr)
1958 return XFS_ERROR(EIO); 1949 return XFS_ERROR(EIO);
1959 1950
1960 xlog_write_adv_cnt(ptr, len, log_offset, 1951 xlog_write_adv_cnt(&ptr, &len, &log_offset,
1961 sizeof(struct xlog_op_header)); 1952 sizeof(struct xlog_op_header));
1962 1953
1963 len += xlog_write_setup_copy(ticket, ophdr, 1954 len += xlog_write_setup_copy(ticket, ophdr,
@@ -1970,9 +1961,8 @@ xlog_write(
1970 1961
1971 /* copy region */ 1962 /* copy region */
1972 ASSERT(copy_len >= 0); 1963 ASSERT(copy_len >= 0);
1973 memcpy((xfs_caddr_t)ptr, reg->i_addr + copy_off, 1964 memcpy(ptr, reg->i_addr + copy_off, copy_len);
1974 copy_len); 1965 xlog_write_adv_cnt(&ptr, &len, &log_offset, copy_len);
1975 xlog_write_adv_cnt(ptr, len, log_offset, copy_len);
1976 1966
1977 copy_len += start_rec_copy + sizeof(xlog_op_header_t); 1967 copy_len += start_rec_copy + sizeof(xlog_op_header_t);
1978 record_cnt++; 1968 record_cnt++;
@@ -3454,20 +3444,22 @@ xlog_ticket_alloc(
3454 * part of the log in case we trash the log structure. 3444 * part of the log in case we trash the log structure.
3455 */ 3445 */
3456void 3446void
3457xlog_verify_dest_ptr(xlog_t *log, 3447xlog_verify_dest_ptr(
3458 __psint_t ptr) 3448 struct log *log,
3449 char *ptr)
3459{ 3450{
3460 int i; 3451 int i;
3461 int good_ptr = 0; 3452 int good_ptr = 0;
3462 3453
3463 for (i=0; i < log->l_iclog_bufs; i++) { 3454 for (i = 0; i < log->l_iclog_bufs; i++) {
3464 if (ptr >= (__psint_t)log->l_iclog_bak[i] && 3455 if (ptr >= log->l_iclog_bak[i] &&
3465 ptr <= (__psint_t)log->l_iclog_bak[i]+log->l_iclog_size) 3456 ptr <= log->l_iclog_bak[i] + log->l_iclog_size)
3466 good_ptr++; 3457 good_ptr++;
3467 } 3458 }
3468 if (! good_ptr) 3459
3460 if (!good_ptr)
3469 xlog_panic("xlog_verify_dest_ptr: invalid ptr"); 3461 xlog_panic("xlog_verify_dest_ptr: invalid ptr");
3470} /* xlog_verify_dest_ptr */ 3462}
3471 3463
3472STATIC void 3464STATIC void
3473xlog_verify_grant_head(xlog_t *log, int equals) 3465xlog_verify_grant_head(xlog_t *log, int equals)
diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h
index fd02a18facd5..2f2b5ca2a00a 100644
--- a/fs/xfs/xfs_log_priv.h
+++ b/fs/xfs/xfs_log_priv.h
@@ -449,6 +449,14 @@ extern void xlog_pack_data(xlog_t *log, xlog_in_core_t *iclog, int);
449 449
450extern kmem_zone_t *xfs_log_ticket_zone; 450extern kmem_zone_t *xfs_log_ticket_zone;
451 451
452static inline void
453xlog_write_adv_cnt(void **ptr, int *len, int *off, size_t bytes)
454{
455 *ptr += bytes;
456 *len -= bytes;
457 *off += bytes;
458}
459
452/* 460/*
453 * Unmount record type is used as a pseudo transaction type for the ticket. 461 * Unmount record type is used as a pseudo transaction type for the ticket.
454 * It's value must be outside the range of XFS_TRANS_* values. 462 * It's value must be outside the range of XFS_TRANS_* values.