X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmdd%2Fmdd_dir.c;h=97fef8927cfe0ddc7299aa9c6a6083832a699d61;hb=f95393b0d0a59cf3dc2f29cffc35dcc4cc9d7728;hp=fb0c0f32d4c0e447275435f862ed194bb5593f3e;hpb=9587ede5df1cd99c74dd732b84d885106af57ca0;p=fs%2Flustre-release.git diff --git a/lustre/mdd/mdd_dir.c b/lustre/mdd/mdd_dir.c index fb0c0f3..97fef89 100644 --- a/lustre/mdd/mdd_dir.c +++ b/lustre/mdd/mdd_dir.c @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -2278,8 +2278,7 @@ struct lu_buf *mdd_links_get(const struct lu_env *env, rc = mdo_xattr_get(env, mdd_obj, buf, XATTR_NAME_LINK, capa); if (rc == -ERANGE) { /* Buf was too small, figure out what we need. */ - buf->lb_buf = NULL; - buf->lb_len = 0; + mdd_buf_put(buf); rc = mdo_xattr_get(env, mdd_obj, buf, XATTR_NAME_LINK, capa); if (rc < 0) return ERR_PTR(rc); @@ -2314,10 +2313,12 @@ struct lu_buf *mdd_links_get(const struct lu_env *env, static int mdd_lee_pack(struct link_ea_entry *lee, const struct lu_name *lname, const struct lu_fid *pfid) { - int reclen; + struct lu_fid tmpfid; + int reclen; - fid_cpu_to_be(&lee->lee_parent_fid, pfid); - strncpy(lee->lee_name, lname->ln_name, lname->ln_namelen); + fid_cpu_to_be(&tmpfid, pfid); + memcpy(&lee->lee_parent_fid, &tmpfid, sizeof(tmpfid)); + memcpy(lee->lee_name, lname->ln_name, lname->ln_namelen); reclen = sizeof(struct link_ea_entry) + lname->ln_namelen; lee->lee_reclen[0] = (reclen >> 8) & 0xff; @@ -2329,7 +2330,8 @@ void mdd_lee_unpack(const struct link_ea_entry *lee, int *reclen, struct lu_name *lname, struct lu_fid *pfid) { *reclen = (lee->lee_reclen[0] << 8) | lee->lee_reclen[1]; - fid_be_to_cpu(pfid, &lee->lee_parent_fid); + memcpy(pfid, &lee->lee_parent_fid, sizeof(*pfid)); + fid_be_to_cpu(pfid, pfid); lname->ln_name = lee->lee_name; lname->ln_namelen = *reclen - sizeof(struct link_ea_entry); } @@ -2412,9 +2414,14 @@ static int mdd_links_add(const struct lu_env *env, rc = __mdd_xattr_set(env, mdd_obj, mdd_buf_get_const(env, buf->lb_buf, leh->leh_len), XATTR_NAME_LINK, 0, handle); - if (rc) - CERROR("link_ea add failed %d "DFID"\n", rc, - PFID(mdd_object_fid(mdd_obj))); + if (rc) { + if (rc == -ENOSPC) + CDEBUG(D_INODE, "link_ea add failed %d "DFID"\n", rc, + PFID(mdd_object_fid(mdd_obj))); + else + CERROR("link_ea add failed %d "DFID"\n", rc, + PFID(mdd_object_fid(mdd_obj))); + } if (buf->lb_vmalloc) /* if we vmalloced a large buffer drop it */ @@ -2451,8 +2458,12 @@ static int mdd_links_rename(const struct lu_env *env, buf = mdd_links_get(env, mdd_obj); if (IS_ERR(buf)) { rc = PTR_ERR(buf); - CERROR("link_ea read failed %d "DFID"\n", - rc, PFID(mdd_object_fid(mdd_obj))); + if (rc == -ENODATA) + CDEBUG(D_INODE, "link_ea read failed %d "DFID"\n", + rc, PFID(mdd_object_fid(mdd_obj))); + else + CERROR("link_ea read failed %d "DFID"\n", + rc, PFID(mdd_object_fid(mdd_obj))); RETURN(rc); } leh = buf->lb_buf;