xfsprogs has three copies of a code sequence to initialize an xlog structure from a libxfs_init structure. Factor the code into a helper. Signed-off-by: Christoph Hellwig <hch@xxxxxx> --- include/libxlog.h | 1 + libxlog/util.c | 25 +++++++++++++++++-------- logprint/logprint.c | 25 +++++++++---------------- repair/phase2.c | 23 +---------------------- 4 files changed, 28 insertions(+), 46 deletions(-) diff --git a/include/libxlog.h b/include/libxlog.h index a598a7b3c..657acfe42 100644 --- a/include/libxlog.h +++ b/include/libxlog.h @@ -71,6 +71,7 @@ extern int print_record_header; /* libxfs parameters */ extern libxfs_init_t x; +void xlog_init(struct xfs_mount *mp, struct xlog *log, libxfs_init_t *x); int xlog_is_dirty(struct xfs_mount *mp, struct xlog *log, libxfs_init_t *x); extern struct xfs_buf *xlog_get_bp(struct xlog *, int); diff --git a/libxlog/util.c b/libxlog/util.c index 1022e3378..bc4db478e 100644 --- a/libxlog/util.c +++ b/libxlog/util.c @@ -12,18 +12,12 @@ int print_skip_uuid; int print_record_header; libxfs_init_t x; -/* - * Return 1 for dirty, 0 for clean, -1 for errors - */ -int -xlog_is_dirty( +void +xlog_init( struct xfs_mount *mp, struct xlog *log, libxfs_init_t *x) { - int error; - xfs_daddr_t head_blk, tail_blk; - memset(log, 0, sizeof(*log)); /* We (re-)init members of libxfs_init_t here? really? */ @@ -48,6 +42,21 @@ xlog_is_dirty( ASSERT(mp->m_sb.sb_logsectlog >= BBSHIFT); } log->l_sectbb_mask = (1 << log->l_sectbb_log) - 1; +} + +/* + * Return 1 for dirty, 0 for clean, -1 for errors + */ +int +xlog_is_dirty( + struct xfs_mount *mp, + struct xlog *log, + libxfs_init_t *x) +{ + int error; + xfs_daddr_t head_blk, tail_blk; + + xlog_init(mp, log, x); error = xlog_find_tail(log, &head_blk, &tail_blk); if (error) { diff --git a/logprint/logprint.c b/logprint/logprint.c index 7d51cdd91..c78aeb2f8 100644 --- a/logprint/logprint.c +++ b/logprint/logprint.c @@ -58,7 +58,6 @@ logstat( { int fd; char buf[BBSIZE]; - xfs_sb_t *sb; /* On Linux we always read the superblock of the * filesystem. We need this to get the length of the @@ -77,19 +76,16 @@ logstat( close (fd); if (!x.disfile) { + struct xfs_sb *sb = &mp->m_sb; + /* * Conjure up a mount structure */ - sb = &mp->m_sb; libxfs_sb_from_disk(sb, (struct xfs_dsb *)buf); mp->m_features |= libxfs_sb_version_to_features(&mp->m_sb); mp->m_blkbb_log = sb->sb_blocklog - BBSHIFT; - x.logBBsize = XFS_FSB_TO_BB(mp, sb->sb_logblocks); - x.logBBstart = XFS_FSB_TO_DADDR(mp, sb->sb_logstart); - x.lbsize = BBSIZE; - if (xfs_has_sector(mp)) - x.lbsize <<= (sb->sb_logsectlog - BBSHIFT); + xlog_init(mp, log, &x); if (!x.logname && sb->sb_logstart == 0) { fprintf(stderr, _(" external log device not specified\n\n")); @@ -100,16 +96,13 @@ logstat( struct stat s; stat(x.dname, &s); - x.logBBsize = s.st_size >> 9; - x.logBBstart = 0; - x.lbsize = BBSIZE; - } - log->l_dev = mp->m_logdev_targp; - log->l_logBBstart = x.logBBstart; - log->l_logBBsize = x.logBBsize; - log->l_sectBBsize = BTOBB(x.lbsize); - log->l_mp = mp; + log->l_logBBsize = s.st_size >> 9; + log->l_logBBstart = 0; + log->l_sectBBsize = BTOBB(BBSIZE); + log->l_dev = mp->m_logdev_targp; + log->l_mp = mp; + } if (x.logname && *x.logname) { /* External log */ if ((fd = open(x.logname, O_RDONLY)) == -1) { diff --git a/repair/phase2.c b/repair/phase2.c index 2ada95aef..a9dd77be3 100644 --- a/repair/phase2.c +++ b/repair/phase2.c @@ -30,28 +30,7 @@ zero_log( xfs_daddr_t tail_blk; struct xlog *log = mp->m_log; - memset(log, 0, sizeof(struct xlog)); - x.logBBsize = XFS_FSB_TO_BB(mp, mp->m_sb.sb_logblocks); - x.logBBstart = XFS_FSB_TO_DADDR(mp, mp->m_sb.sb_logstart); - x.lbsize = BBSIZE; - if (xfs_has_sector(mp)) - x.lbsize <<= (mp->m_sb.sb_logsectlog - BBSHIFT); - - log->l_dev = mp->m_logdev_targp; - log->l_logBBsize = x.logBBsize; - log->l_logBBstart = x.logBBstart; - log->l_sectBBsize = BTOBB(x.lbsize); - log->l_mp = mp; - if (xfs_has_sector(mp)) { - log->l_sectbb_log = mp->m_sb.sb_logsectlog - BBSHIFT; - ASSERT(log->l_sectbb_log <= mp->m_sectbb_log); - /* for larger sector sizes, must have v2 or external log */ - ASSERT(log->l_sectbb_log == 0 || - log->l_logBBstart == 0 || - xfs_has_logv2(mp)); - ASSERT(mp->m_sb.sb_logsectlog >= BBSHIFT); - } - log->l_sectbb_mask = (1 << log->l_sectbb_log) - 1; + xlog_init(mp, mp->m_log, &x); /* * Find the log head and tail and alert the user to the situation if the -- 2.39.2