Whamcloud - gitweb
LU-11380 mdc: move empty xattr handling to mdc layer
[fs/lustre-release.git] / lustre / llite / xattr.c
index 7d98825..97f9725 100644 (file)
@@ -343,7 +343,6 @@ int ll_xattr_list(struct inode *inode, const char *name, int type, void *buffer,
        struct ll_inode_info *lli = ll_i2info(inode);
         struct ll_sb_info *sbi = ll_i2sbi(inode);
         struct ptlrpc_request *req = NULL;
-        struct mdt_body *body;
         void *xdata;
        int rc;
        ENTRY;
@@ -375,50 +374,20 @@ getxattr_nocache:
                if (rc < 0)
                        GOTO(out_xattr, rc);
 
-               body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
-               LASSERT(body);
-
                /* only detect the xattr size */
-               if (size == 0) {
-                       /* LU-11109: Older MDTs do not distinguish
-                        * between nonexistent xattrs and zero length
-                        * values in this case. Newer MDTs will return
-                        * -ENODATA or set OBD_MD_FLXATTR. */
-                       GOTO(out, rc = body->mbo_eadatasize);
-               }
+               if (size == 0)
+                       GOTO(out, rc);
 
-               if (size < body->mbo_eadatasize) {
-                       CERROR("server bug: replied size %u > %u\n",
-                               body->mbo_eadatasize, (int)size);
+               if (size < rc)
                        GOTO(out, rc = -ERANGE);
-               }
-
-               if (body->mbo_eadatasize == 0) {
-                       /* LU-11109: Newer MDTs set OBD_MD_FLXATTR on
-                        * success so that we can distinguish between
-                        * zero length value and nonexistent xattr.
-                        *
-                        * If OBD_MD_FLXATTR is not set then we keep
-                        * the old behavior and return -ENODATA for
-                        * getxattr() when mbo_eadatasize is 0. But
-                        * -ENODATA only makes sense for getxattr()
-                        * and not for listxattr(). */
-                       if (body->mbo_valid & OBD_MD_FLXATTR)
-                               GOTO(out, rc = 0);
-                       else if (valid == OBD_MD_FLXATTR)
-                               GOTO(out, rc = -ENODATA);
-                       else
-                               GOTO(out, rc = 0);
-               }
 
                /* do not need swab xattr data */
                xdata = req_capsule_server_sized_get(&req->rq_pill, &RMF_EADATA,
-                                                       body->mbo_eadatasize);
+                                                    rc);
                if (!xdata)
-                       GOTO(out, rc = -EFAULT);
+                       GOTO(out, rc = -EPROTO);
 
-               memcpy(buffer, xdata, body->mbo_eadatasize);
-               rc = body->mbo_eadatasize;
+               memcpy(buffer, xdata, rc);
        }
 
        EXIT;