diff options
author | Christoph Hellwig <hch@lst.de> | 2008-11-27 22:23:38 -0500 |
---|---|---|
committer | Niv Sardi <xaiki@sgi.com> | 2008-11-30 19:37:31 -0500 |
commit | d42f08f61c5e7f0ed4c6b6df4c9987ddb85ec66e (patch) | |
tree | dfba895d780bf54bb60c284a3b8e702d20719fa4 /fs/xfs/xfs_ialloc.c | |
parent | b28708d6a0a3ed65a68f0dcd8e6d1c09f14e5cf3 (diff) |
[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>
Diffstat (limited to 'fs/xfs/xfs_ialloc.c')
-rw-r--r-- | fs/xfs/xfs_ialloc.c | 75 |
1 files changed, 10 insertions, 65 deletions
diff --git a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c index efb65fea203c..86d463ee7b9b 100644 --- a/fs/xfs/xfs_ialloc.c +++ b/fs/xfs/xfs_ialloc.c | |||
@@ -41,68 +41,6 @@ | |||
41 | #include "xfs_error.h" | 41 | #include "xfs_error.h" |
42 | #include "xfs_bmap.h" | 42 | #include "xfs_bmap.h" |
43 | 43 | ||
44 | /* | ||
45 | * Log specified fields for the inode given by bp and off. | ||
46 | */ | ||
47 | STATIC void | ||
48 | xfs_ialloc_log_di( | ||
49 | xfs_trans_t *tp, /* transaction pointer */ | ||
50 | xfs_buf_t *bp, /* inode buffer */ | ||
51 | int off, /* index of inode in buffer */ | ||
52 | int fields) /* bitmask of fields to log */ | ||
53 | { | ||
54 | int first; /* first byte number */ | ||
55 | int ioffset; /* off in bytes */ | ||
56 | int last; /* last byte number */ | ||
57 | xfs_mount_t *mp; /* mount point structure */ | ||
58 | static const short offsets[] = { /* field offsets */ | ||
59 | /* keep in sync with bits */ | ||
60 | offsetof(xfs_dinode_core_t, di_magic), | ||
61 | offsetof(xfs_dinode_core_t, di_mode), | ||
62 | offsetof(xfs_dinode_core_t, di_version), | ||
63 | offsetof(xfs_dinode_core_t, di_format), | ||
64 | offsetof(xfs_dinode_core_t, di_onlink), | ||
65 | offsetof(xfs_dinode_core_t, di_uid), | ||
66 | offsetof(xfs_dinode_core_t, di_gid), | ||
67 | offsetof(xfs_dinode_core_t, di_nlink), | ||
68 | offsetof(xfs_dinode_core_t, di_projid), | ||
69 | offsetof(xfs_dinode_core_t, di_pad), | ||
70 | offsetof(xfs_dinode_core_t, di_atime), | ||
71 | offsetof(xfs_dinode_core_t, di_mtime), | ||
72 | offsetof(xfs_dinode_core_t, di_ctime), | ||
73 | offsetof(xfs_dinode_core_t, di_size), | ||
74 | offsetof(xfs_dinode_core_t, di_nblocks), | ||
75 | offsetof(xfs_dinode_core_t, di_extsize), | ||
76 | offsetof(xfs_dinode_core_t, di_nextents), | ||
77 | offsetof(xfs_dinode_core_t, di_anextents), | ||
78 | offsetof(xfs_dinode_core_t, di_forkoff), | ||
79 | offsetof(xfs_dinode_core_t, di_aformat), | ||
80 | offsetof(xfs_dinode_core_t, di_dmevmask), | ||
81 | offsetof(xfs_dinode_core_t, di_dmstate), | ||
82 | offsetof(xfs_dinode_core_t, di_flags), | ||
83 | offsetof(xfs_dinode_core_t, di_gen), | ||
84 | offsetof(xfs_dinode_t, di_next_unlinked), | ||
85 | offsetof(xfs_dinode_t, di_u), | ||
86 | offsetof(xfs_dinode_t, di_a), | ||
87 | sizeof(xfs_dinode_t) | ||
88 | }; | ||
89 | |||
90 | |||
91 | ASSERT(offsetof(xfs_dinode_t, di_core) == 0); | ||
92 | ASSERT((fields & (XFS_DI_U|XFS_DI_A)) == 0); | ||
93 | mp = tp->t_mountp; | ||
94 | /* | ||
95 | * Get the inode-relative first and last bytes for these fields | ||
96 | */ | ||
97 | xfs_btree_offsets(fields, offsets, XFS_DI_NUM_BITS, &first, &last); | ||
98 | /* | ||
99 | * Convert to buffer offsets and log it. | ||
100 | */ | ||
101 | ioffset = off << mp->m_sb.sb_inodelog; | ||
102 | first += ioffset; | ||
103 | last += ioffset; | ||
104 | xfs_trans_log_buf(tp, bp, first, last); | ||
105 | } | ||
106 | 44 | ||
107 | /* | 45 | /* |
108 | * Allocation group level functions. | 46 | * Allocation group level functions. |
@@ -406,18 +344,25 @@ xfs_ialloc_ag_alloc( | |||
406 | XFS_BUF_LOCK); | 344 | XFS_BUF_LOCK); |
407 | ASSERT(fbuf); | 345 | ASSERT(fbuf); |
408 | ASSERT(!XFS_BUF_GETERROR(fbuf)); | 346 | ASSERT(!XFS_BUF_GETERROR(fbuf)); |
347 | |||
409 | /* | 348 | /* |
410 | * Set initial values for the inodes in this buffer. | 349 | * Initialize all inodes in this buffer and then log them. |
350 | * | ||
351 | * XXX: It would be much better if we had just one transaction to | ||
352 | * log a whole cluster of inodes instead of all the indivdual | ||
353 | * transactions causing a lot of log traffic. | ||
411 | */ | 354 | */ |
412 | xfs_biozero(fbuf, 0, ninodes << args.mp->m_sb.sb_inodelog); | 355 | xfs_biozero(fbuf, 0, ninodes << args.mp->m_sb.sb_inodelog); |
413 | for (i = 0; i < ninodes; i++) { | 356 | for (i = 0; i < ninodes; i++) { |
357 | int ioffset = i << args.mp->m_sb.sb_inodelog; | ||
358 | uint isize = sizeof(xfs_dinode_t) + sizeof(__be32); | ||
359 | |||
414 | free = XFS_MAKE_IPTR(args.mp, fbuf, i); | 360 | free = XFS_MAKE_IPTR(args.mp, fbuf, i); |
415 | free->di_core.di_magic = cpu_to_be16(XFS_DINODE_MAGIC); | 361 | free->di_core.di_magic = cpu_to_be16(XFS_DINODE_MAGIC); |
416 | free->di_core.di_version = version; | 362 | free->di_core.di_version = version; |
417 | free->di_core.di_gen = cpu_to_be32(gen); | 363 | free->di_core.di_gen = cpu_to_be32(gen); |
418 | free->di_next_unlinked = cpu_to_be32(NULLAGINO); | 364 | free->di_next_unlinked = cpu_to_be32(NULLAGINO); |
419 | xfs_ialloc_log_di(tp, fbuf, i, | 365 | xfs_trans_log_buf(tp, fbuf, ioffset, ioffset + isize - 1); |
420 | XFS_DI_CORE_BITS | XFS_DI_NEXT_UNLINKED); | ||
421 | } | 366 | } |
422 | xfs_trans_inode_alloc_buf(tp, fbuf); | 367 | xfs_trans_inode_alloc_buf(tp, fbuf); |
423 | } | 368 | } |