Whamcloud - gitweb
b=22301 lustre.lov error when backing up symlinks with extended attributes
authorDmitry Zogin <dmitry.zogin@sun.com>
Tue, 16 Mar 2010 14:59:39 +0000 (10:59 -0400)
committerJohann Lombardi <johann@sun.com>
Fri, 19 Mar 2010 10:53:21 +0000 (11:53 +0100)
 Improved logic in ll_listxattr()

 i=tom.wang
 i=dmitry.zogin

lustre/llite/xattr.c

index 586e120..1f261bf 100644 (file)
@@ -400,6 +400,8 @@ ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size)
         ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_LISTXATTR, 1);
 
         rc = ll_getxattr_common(inode, NULL, buffer, size, OBD_MD_FLXATTRLS);
+        if (rc < 0)
+                GOTO(out, rc);
 
         if (S_ISREG(inode->i_mode)) {
                 struct ll_inode_info *lli = ll_i2info(inode);
@@ -413,7 +415,7 @@ ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size)
 
         if (rc2 < 0) {
                 GOTO(out, rc2 = 0);
-        } else {
+        } else if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)) {
                 const int prefix_len = sizeof(XATTR_LUSTRE_PREFIX) - 1;
                 const size_t name_len   = sizeof("lov") - 1;
                 const size_t total_len  = prefix_len + name_len + 1;