When we extend one xattr's value to a large size, in case
the old value size is smaller than the size of value root,
we still need to guess the metadata allocation.

Reported-by: Tiger Yang <[EMAIL PROTECTED]>
Signed-off-by: Tao Ma <[EMAIL PROTECTED]>
---
 fs/ocfs2/xattr.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index 8195450..1504c6b 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -2270,6 +2270,7 @@ static int ocfs2_calc_xattr_set_need(struct inode *inode,
                                                                 value_size);
                        xv = (struct ocfs2_xattr_value_root *)
                             (base + name_offset + name_len);
+                       value_size = OCFS2_XATTR_ROOT_SIZE;
                } else
                        xv = &def_xv.xv;
 
@@ -2283,7 +2284,8 @@ static int ocfs2_calc_xattr_set_need(struct inode *inode,
                                                             &xv->xr_list,
                                                             new_clusters -
                                                             old_clusters);
-                       goto out;
+                       if (value_size >= OCFS2_XATTR_ROOT_SIZE)
+                               goto out;
                }
        } else {
                /*
-- 
1.5.5


_______________________________________________
Ocfs2-devel mailing list
[email protected]
http://oss.oracle.com/mailman/listinfo/ocfs2-devel

Reply via email to