ocfs2/xattr: fix credits calculation during index create
authorTao Ma <tao.ma@oracle.com>
Thu, 4 Dec 2008 22:20:56 +0000 (06:20 +0800)
committerMark Fasheh <mfasheh@suse.com>
Mon, 5 Jan 2009 16:40:36 +0000 (08:40 -0800)
When creating a xattr index block, the old calculation forget
to add credits for the meta change of the alloc file. So add
more credits and more comments to explain it.

Signed-off-by: Tao Ma <tao.ma@oracle.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
fs/ocfs2/xattr.c

index 3e2e92d705941a1f4647c93ce564f86456dce2a0..73fb9f762512c314a5d2657a5d14ede23038cb6e 100644 (file)
@@ -2359,13 +2359,21 @@ meta_guess:
                } else
                        xb = (struct ocfs2_xattr_block *)xbs->xattr_bh->b_data;
 
+               /*
+                * If there is already an xattr tree, good, we can calculate
+                * like other b-trees. Otherwise we may have the chance of
+                * create a tree, the credit calculation is borrowed from
+                * ocfs2_calc_extend_credits with root_el = NULL. And the
+                * new tree will be cluster based, so no meta is needed.
+                */
                if (le16_to_cpu(xb->xb_flags) & OCFS2_XATTR_INDEXED) {
                        struct ocfs2_extent_list *el =
                                 &xb->xb_attrs.xb_root.xt_list;
                        meta_add += ocfs2_extend_meta_needed(el);
                        credits += ocfs2_calc_extend_credits(inode->i_sb,
                                                             el, 1);
-               }
+               } else
+                       credits += OCFS2_SUBALLOC_ALLOC + 1;
 
                /*
                 * This cluster will be used either for new bucket or for