aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_attr_leaf.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/xfs_attr_leaf.c')
-rw-r--r--fs/xfs/xfs_attr_leaf.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c
index 0bce1b348580..79ece72976ae 100644
--- a/fs/xfs/xfs_attr_leaf.c
+++ b/fs/xfs/xfs_attr_leaf.c
@@ -2181,14 +2181,24 @@ xfs_attr3_leaf_unbalance(
2181 struct xfs_attr_leafblock *tmp_leaf; 2181 struct xfs_attr_leafblock *tmp_leaf;
2182 struct xfs_attr3_icleaf_hdr tmphdr; 2182 struct xfs_attr3_icleaf_hdr tmphdr;
2183 2183
2184 tmp_leaf = kmem_alloc(state->blocksize, KM_SLEEP); 2184 tmp_leaf = kmem_zalloc(state->blocksize, KM_SLEEP);
2185 memset(tmp_leaf, 0, state->blocksize); 2185
2186 memset(&tmphdr, 0, sizeof(tmphdr)); 2186 /*
2187 * Copy the header into the temp leaf so that all the stuff
2188 * not in the incore header is present and gets copied back in
2189 * once we've moved all the entries.
2190 */
2191 memcpy(tmp_leaf, save_leaf, xfs_attr3_leaf_hdr_size(save_leaf));
2187 2192
2193 memset(&tmphdr, 0, sizeof(tmphdr));
2188 tmphdr.magic = savehdr.magic; 2194 tmphdr.magic = savehdr.magic;
2189 tmphdr.forw = savehdr.forw; 2195 tmphdr.forw = savehdr.forw;
2190 tmphdr.back = savehdr.back; 2196 tmphdr.back = savehdr.back;
2191 tmphdr.firstused = state->blocksize; 2197 tmphdr.firstused = state->blocksize;
2198
2199 /* write the header to the temp buffer to initialise it */
2200 xfs_attr3_leaf_hdr_to_disk(tmp_leaf, &tmphdr);
2201
2192 if (xfs_attr3_leaf_order(save_blk->bp, &savehdr, 2202 if (xfs_attr3_leaf_order(save_blk->bp, &savehdr,
2193 drop_blk->bp, &drophdr)) { 2203 drop_blk->bp, &drophdr)) {
2194 xfs_attr3_leaf_moveents(drop_leaf, &drophdr, 0, 2204 xfs_attr3_leaf_moveents(drop_leaf, &drophdr, 0,