int lock);
int mds_pack_md(struct obd_device *, struct lustre_msg *, int offset,
struct mds_body *, struct inode *, int lock);
+void mds_pack_dentry2fid(struct ll_fid *, struct dentry *);
void mds_pack_inode2fid(struct obd_device *, struct ll_fid *, struct inode *);
void mds_pack_inode2body(struct obd_device *, struct mds_body *, struct inode *);
#endif
#include <linux/lustre_lib.h>
#include <linux/lustre_mds.h>
+void mds_pack_dentry2fid(struct ll_fid *fid,
+ struct dentry *dentry)
+{
+ fid->id = dentry->d_inum;
+ fid->generation = dentry->d_generation;
+ fid->mds = dentry->d_mdsnum;
+}
+
void mds_pack_inode2fid(struct obd_device *obd, struct ll_fid *fid,
struct inode *inode)
{
LASSERT(!IS_ERR(parent));
child = ll_lookup_one_len(rec->ur_name, parent, rec->ur_namelen - 1);
LASSERT(!IS_ERR(child));
- if (child->d_inode == NULL) {
+ if ((child->d_flags & DCACHE_CROSS_REF)) {
+ LASSERTF(child->d_inode == NULL, "BUG 3869");
+ body = lustre_msg_buf(req->rq_repmsg, offset, sizeof (*body));
+ mds_pack_dentry2fid(&body->fid1, child);
+ } else if (child->d_inode == NULL) {
DEBUG_REQ(D_ERROR, req, "parent "LPU64"/%u name %s mode %o",
rec->ur_fid1->id, rec->ur_fid1->generation,
rec->ur_name, rec->ur_mode);
LASSERTF(child->d_inode != NULL, "BUG 3869");
+ } else {
+ body = lustre_msg_buf(req->rq_repmsg, offset, sizeof (*body));
+ mds_pack_inode2fid(req2obd(req), &body->fid1, child->d_inode);
+ mds_pack_inode2body(req2obd(req), body, child->d_inode);
}
- body = lustre_msg_buf(req->rq_repmsg, offset, sizeof (*body));
- mds_pack_inode2fid(req2obd(req), &body->fid1, child->d_inode);
- mds_pack_inode2body(req2obd(req), body, child->d_inode);
l_dput(parent);
l_dput(child);
EXIT;