memset(fid, 0, sizeof(*fid));
}
+static inline int fid_is_igif(const struct lu_fid *fid)
+{
+ return fid_seq(fid) == LUSTRE_ROOT_FID_SEQ;
+}
+
static inline int fid_is_sane(const struct lu_fid *fid)
{
return
fid != NULL &&
- fid_seq_is_sane(fid_seq(fid)) && fid_oid(fid) != 0;
+ ((fid_seq_is_sane(fid_seq(fid)) && fid_oid(fid) != 0
+ && fid_ver(fid) == 0) ||
+ fid_is_igif(fid));
}
static inline int fid_is_zero(const struct lu_fid *fid)
return fid_seq(fid) == 0 && fid_oid(fid) == 0;
}
-static inline int fid_is_igif(const struct lu_fid *fid)
-{
- return fid_seq(fid) == LUSTRE_ROOT_FID_SEQ;
-}
-
#define DFID "[0x%16.16"LPF64"x/0x%8.8x:0x%8.8x]"
#define PFID(fid) \
}
} else if (S_ISLNK(la->la_mode) &&
reqbody->valid & OBD_MD_LINKNAME) {
- /* FIXME: Is this buffer long enough? */
buffer->lb_buf = ma->ma_lmm;
- buffer->lb_len = ma->ma_lmm_size;
+ buffer->lb_len = reqbody->eadatasize;
rc = mo_readlink(env, next, buffer);
if (rc <= 0) {
CERROR("readlink failed: %d\n", rc);
rc = -EFAULT;
} else {
repbody->valid |= OBD_MD_LINKNAME;
- repbody->eadatasize = rc + 1;
- ((char*)ma->ma_lmm)[rc] = 0; /* NULL terminate */
+ repbody->eadatasize = rc;
+ ((char*)ma->ma_lmm)[rc - 1] = 0; /* NULL terminate */
CDEBUG(D_INODE, "symlink dest %s, len = %d\n",
(char*)ma->ma_lmm, rc);
rc = 0;