__le64 mds_wants_replica_in_dirino;
__le32 op;
__le32 caller_uid, caller_gid;
+ __le64 ino; /* use this ino for openc, mkdir, mknod, etc. */
union {
struct {
struct {
__le32 mode;
__le32 rdev;
- __le64 ino;
} __attribute__ ((packed)) mknod;
- struct {
- __le64 ino;
- } __attribute__ ((packed)) symlink;
struct {
__le32 mode;
- __le64 ino;
} __attribute__ ((packed)) mkdir;
struct {
__le32 flags;
__le32 mode;
- __le64 ino;
} __attribute__ ((packed)) open;
struct {
__le64 length;
rhead->oldest_client_tid = cpu_to_le64(__get_oldest_tid(mdsc));
rhead->num_fwd = cpu_to_le32(req->r_num_fwd);
+ if (req->r_last_inode)
+ rhead->ino = cpu_to_le64(ceph_ino(req->r_last_inode));
+ else
+ rhead->ino = 0;
+
/* send and wait */
mutex_unlock(&mdsc->mutex);
dout(10, "do_request %p %lld r_expected_cap=%p\n", req, req->r_tid,
snapid_t follows = dn->dir->inode->find_snaprealm()->get_newest_seq();
mdr->now = g_clock.real_now();
- CInode *newi = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.args.mknod.ino));
+ CInode *newi = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.ino));
assert(newi);
newi->projected_parent = dn;
snapid_t follows = dn->dir->inode->find_snaprealm()->get_newest_seq();
mdr->now = g_clock.real_now();
- CInode *newi = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.args.mkdir.ino));
+ CInode *newi = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.ino));
assert(newi);
// it's a directory.
mdr->now = g_clock.real_now();
snapid_t follows = dn->dir->inode->find_snaprealm()->get_newest_seq();
- CInode *newi = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.args.symlink.ino));
+ CInode *newi = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.ino));
assert(newi);
// it's a symlink
SnapRealm *realm = diri->find_snaprealm(); // use directory's realm; inode isn't attached yet.
snapid_t follows = realm->get_newest_seq();
- CInode *in = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.args.open.ino));
+ CInode *in = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.ino));
assert(in);
// it's a file.