forked from luck/tmp_suning_uos_patched
[XFS] kill xfs_ialloc_log_di
xfs_ialloc_log_di is only used to log the full inode core + di_next_unlinked. That means all the offset magic is not nessecary and we can simply use xfs_trans_log_buf directly. Also add a comment describing what we should do here instead. (First sent on October 7th) Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Niv Sardi <xaiki@sgi.com>
This commit is contained in:
parent
b28708d6a0
commit
d42f08f61c
@ -105,40 +105,6 @@ typedef struct xfs_dinode
|
||||
#define XFS_MAXLINK ((1U << 31) - 1U)
|
||||
#define XFS_MAXLINK_1 65535U
|
||||
|
||||
/*
|
||||
* Bit names for logging disk inodes only
|
||||
*/
|
||||
#define XFS_DI_MAGIC 0x0000001
|
||||
#define XFS_DI_MODE 0x0000002
|
||||
#define XFS_DI_VERSION 0x0000004
|
||||
#define XFS_DI_FORMAT 0x0000008
|
||||
#define XFS_DI_ONLINK 0x0000010
|
||||
#define XFS_DI_UID 0x0000020
|
||||
#define XFS_DI_GID 0x0000040
|
||||
#define XFS_DI_NLINK 0x0000080
|
||||
#define XFS_DI_PROJID 0x0000100
|
||||
#define XFS_DI_PAD 0x0000200
|
||||
#define XFS_DI_ATIME 0x0000400
|
||||
#define XFS_DI_MTIME 0x0000800
|
||||
#define XFS_DI_CTIME 0x0001000
|
||||
#define XFS_DI_SIZE 0x0002000
|
||||
#define XFS_DI_NBLOCKS 0x0004000
|
||||
#define XFS_DI_EXTSIZE 0x0008000
|
||||
#define XFS_DI_NEXTENTS 0x0010000
|
||||
#define XFS_DI_NAEXTENTS 0x0020000
|
||||
#define XFS_DI_FORKOFF 0x0040000
|
||||
#define XFS_DI_AFORMAT 0x0080000
|
||||
#define XFS_DI_DMEVMASK 0x0100000
|
||||
#define XFS_DI_DMSTATE 0x0200000
|
||||
#define XFS_DI_FLAGS 0x0400000
|
||||
#define XFS_DI_GEN 0x0800000
|
||||
#define XFS_DI_NEXT_UNLINKED 0x1000000
|
||||
#define XFS_DI_U 0x2000000
|
||||
#define XFS_DI_A 0x4000000
|
||||
#define XFS_DI_NUM_BITS 27
|
||||
#define XFS_DI_ALL_BITS ((1 << XFS_DI_NUM_BITS) - 1)
|
||||
#define XFS_DI_CORE_BITS (XFS_DI_ALL_BITS & ~(XFS_DI_U|XFS_DI_A))
|
||||
|
||||
/*
|
||||
* Values for di_format
|
||||
*/
|
||||
|
@ -41,68 +41,6 @@
|
||||
#include "xfs_error.h"
|
||||
#include "xfs_bmap.h"
|
||||
|
||||
/*
|
||||
* Log specified fields for the inode given by bp and off.
|
||||
*/
|
||||
STATIC void
|
||||
xfs_ialloc_log_di(
|
||||
xfs_trans_t *tp, /* transaction pointer */
|
||||
xfs_buf_t *bp, /* inode buffer */
|
||||
int off, /* index of inode in buffer */
|
||||
int fields) /* bitmask of fields to log */
|
||||
{
|
||||
int first; /* first byte number */
|
||||
int ioffset; /* off in bytes */
|
||||
int last; /* last byte number */
|
||||
xfs_mount_t *mp; /* mount point structure */
|
||||
static const short offsets[] = { /* field offsets */
|
||||
/* keep in sync with bits */
|
||||
offsetof(xfs_dinode_core_t, di_magic),
|
||||
offsetof(xfs_dinode_core_t, di_mode),
|
||||
offsetof(xfs_dinode_core_t, di_version),
|
||||
offsetof(xfs_dinode_core_t, di_format),
|
||||
offsetof(xfs_dinode_core_t, di_onlink),
|
||||
offsetof(xfs_dinode_core_t, di_uid),
|
||||
offsetof(xfs_dinode_core_t, di_gid),
|
||||
offsetof(xfs_dinode_core_t, di_nlink),
|
||||
offsetof(xfs_dinode_core_t, di_projid),
|
||||
offsetof(xfs_dinode_core_t, di_pad),
|
||||
offsetof(xfs_dinode_core_t, di_atime),
|
||||
offsetof(xfs_dinode_core_t, di_mtime),
|
||||
offsetof(xfs_dinode_core_t, di_ctime),
|
||||
offsetof(xfs_dinode_core_t, di_size),
|
||||
offsetof(xfs_dinode_core_t, di_nblocks),
|
||||
offsetof(xfs_dinode_core_t, di_extsize),
|
||||
offsetof(xfs_dinode_core_t, di_nextents),
|
||||
offsetof(xfs_dinode_core_t, di_anextents),
|
||||
offsetof(xfs_dinode_core_t, di_forkoff),
|
||||
offsetof(xfs_dinode_core_t, di_aformat),
|
||||
offsetof(xfs_dinode_core_t, di_dmevmask),
|
||||
offsetof(xfs_dinode_core_t, di_dmstate),
|
||||
offsetof(xfs_dinode_core_t, di_flags),
|
||||
offsetof(xfs_dinode_core_t, di_gen),
|
||||
offsetof(xfs_dinode_t, di_next_unlinked),
|
||||
offsetof(xfs_dinode_t, di_u),
|
||||
offsetof(xfs_dinode_t, di_a),
|
||||
sizeof(xfs_dinode_t)
|
||||
};
|
||||
|
||||
|
||||
ASSERT(offsetof(xfs_dinode_t, di_core) == 0);
|
||||
ASSERT((fields & (XFS_DI_U|XFS_DI_A)) == 0);
|
||||
mp = tp->t_mountp;
|
||||
/*
|
||||
* Get the inode-relative first and last bytes for these fields
|
||||
*/
|
||||
xfs_btree_offsets(fields, offsets, XFS_DI_NUM_BITS, &first, &last);
|
||||
/*
|
||||
* Convert to buffer offsets and log it.
|
||||
*/
|
||||
ioffset = off << mp->m_sb.sb_inodelog;
|
||||
first += ioffset;
|
||||
last += ioffset;
|
||||
xfs_trans_log_buf(tp, bp, first, last);
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocation group level functions.
|
||||
@ -406,18 +344,25 @@ xfs_ialloc_ag_alloc(
|
||||
XFS_BUF_LOCK);
|
||||
ASSERT(fbuf);
|
||||
ASSERT(!XFS_BUF_GETERROR(fbuf));
|
||||
|
||||
/*
|
||||
* Set initial values for the inodes in this buffer.
|
||||
* Initialize all inodes in this buffer and then log them.
|
||||
*
|
||||
* XXX: It would be much better if we had just one transaction to
|
||||
* log a whole cluster of inodes instead of all the indivdual
|
||||
* transactions causing a lot of log traffic.
|
||||
*/
|
||||
xfs_biozero(fbuf, 0, ninodes << args.mp->m_sb.sb_inodelog);
|
||||
for (i = 0; i < ninodes; i++) {
|
||||
int ioffset = i << args.mp->m_sb.sb_inodelog;
|
||||
uint isize = sizeof(xfs_dinode_t) + sizeof(__be32);
|
||||
|
||||
free = XFS_MAKE_IPTR(args.mp, fbuf, i);
|
||||
free->di_core.di_magic = cpu_to_be16(XFS_DINODE_MAGIC);
|
||||
free->di_core.di_version = version;
|
||||
free->di_core.di_gen = cpu_to_be32(gen);
|
||||
free->di_next_unlinked = cpu_to_be32(NULLAGINO);
|
||||
xfs_ialloc_log_di(tp, fbuf, i,
|
||||
XFS_DI_CORE_BITS | XFS_DI_NEXT_UNLINKED);
|
||||
xfs_trans_log_buf(tp, fbuf, ioffset, ioffset + isize - 1);
|
||||
}
|
||||
xfs_trans_inode_alloc_buf(tp, fbuf);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user