In xattr set, when we move a xattr which was stored in inode to
the outside bucket, we have to delete it and it will use the old
"xis->not_found", but it is removed by the ocfs2_calc_xattr_set_need.
So restore it.

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

diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index 1504c6b..7d6307f 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -2414,7 +2414,7 @@ static int __ocfs2_xattr_set_handle(struct inode *inode,
                                    struct ocfs2_xattr_search *xbs,
                                    struct ocfs2_xattr_set_ctxt *ctxt)
 {
-       int ret = 0, credits;
+       int ret = 0, credits, old_found;
 
        if (!xi->value) {
                /* Remove existing extended attribute */
@@ -2433,6 +2433,7 @@ static int __ocfs2_xattr_set_handle(struct inode *inode,
                        xi->value = NULL;
                        xi->value_len = 0;
 
+                       old_found = xis->not_found;
                        xis->not_found = -ENODATA;
                        ret = ocfs2_calc_xattr_set_need(inode,
                                                        di,
@@ -2442,6 +2443,7 @@ static int __ocfs2_xattr_set_handle(struct inode *inode,
                                                        NULL,
                                                        NULL,
                                                        &credits);
+                       xis->not_found = old_found;
                        if (ret) {
                                mlog_errno(ret);
                                goto out;
@@ -2462,6 +2464,7 @@ static int __ocfs2_xattr_set_handle(struct inode *inode,
                                if (ret)
                                        goto out;
 
+                               old_found = xis->not_found;
                                xis->not_found = -ENODATA;
                                ret = ocfs2_calc_xattr_set_need(inode,
                                                                di,
@@ -2471,6 +2474,7 @@ static int __ocfs2_xattr_set_handle(struct inode *inode,
                                                                NULL,
                                                                NULL,
                                                                &credits);
+                               xis->not_found = old_found;
                                if (ret) {
                                        mlog_errno(ret);
                                        goto out;
-- 
1.5.5


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

Reply via email to