ocfs2: reserve xattr block for new directory with inline data
authorTiger Yang <tiger.yang@oracle.com>
Fri, 6 Mar 2009 02:19:30 +0000 (10:19 +0800)
committerMark Fasheh <mfasheh@suse.com>
Thu, 12 Mar 2009 23:45:40 +0000 (16:45 -0700)
If this is a new directory with inline data, we choose to
reserve the entire inline area for directory contents and
force an external xattr block.

Signed-off-by: Tiger Yang <tiger.yang@oracle.com>
Acked-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
fs/ocfs2/xattr.c

index 4ddd788add67bcc9df070da373a47e9105b0c242..c63efb5ef136d57720f07c95699a20fa358d4a6e 100644 (file)
@@ -547,8 +547,12 @@ int ocfs2_calc_xattr_init(struct inode *dir,
         * when blocksize = 512, may reserve one more cluser for
         * xattr bucket, otherwise reserve one metadata block
         * for them is ok.
+        * If this is a new directory with inline data,
+        * we choose to reserve the entire inline area for
+        * directory contents and force an external xattr block.
         */
        if (dir->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE ||
+           (S_ISDIR(mode) && ocfs2_supports_inline_data(osb)) ||
            (s_size + a_size) > OCFS2_XATTR_FREE_IN_IBODY) {
                ret = ocfs2_reserve_new_metadata_blocks(osb, 1, xattr_ac);
                if (ret) {