<< " open=" << in.open_by_mode
<< " ref=" << in.ref
<< " caps=" << ccap_string(in.caps_issued())
+ << " mode=" << oct << in.mode << dec
<< " mtime=" << in.mtime;
if (in.dirty_caps)
out << " dirty_caps=" << ccap_string(in.dirty_caps);
}
}
- if (st->cap.caps & CEPH_CAP_PIN) {
- in->ino = st->vino.ino;
- in->snapid = st->vino.snapid;
- in->rdev = st->rdev;
- in->dirfragtree = st->dirfragtree; // FIXME look at the mask!
-
- if ((issued & CEPH_CAP_AUTH_EXCL) == 0) {
- in->mode = st->mode;
- in->uid = st->uid;
- in->gid = st->gid;
- }
+ assert(st->cap.caps & CEPH_CAP_PIN); // right??
- if ((issued & CEPH_CAP_LINK_EXCL) == 0) {
- in->nlink = st->nlink;
- }
+ in->ino = st->vino.ino;
+ in->snapid = st->vino.snapid;
+ in->rdev = st->rdev;
+ in->dirfragtree = st->dirfragtree; // FIXME look at the mask!
- if ((issued & CEPH_CAP_XATTR_EXCL) == 0 &&
- st->xattrbl.length() &&
- st->xattr_version > in->xattr_version) {
- bufferlist::iterator p = st->xattrbl.begin();
- ::decode(in->xattrs, p);
- in->xattr_version = st->xattr_version;
- }
+ if ((issued & CEPH_CAP_AUTH_EXCL) == 0) {
+ in->mode = st->mode;
+ in->uid = st->uid;
+ in->gid = st->gid;
+ }
- in->dirstat = st->dirstat;
- in->rstat = st->rstat;
+ if ((issued & CEPH_CAP_LINK_EXCL) == 0) {
+ in->nlink = st->nlink;
+ }
- in->layout = st->layout;
- in->ctime = st->ctime;
- in->max_size = st->max_size; // right?
+ if ((issued & CEPH_CAP_XATTR_EXCL) == 0 &&
+ st->xattrbl.length() &&
+ st->xattr_version > in->xattr_version) {
+ bufferlist::iterator p = st->xattrbl.begin();
+ ::decode(in->xattrs, p);
+ in->xattr_version = st->xattr_version;
+ }
- update_inode_file_bits(in, st->truncate_seq, st->truncate_size, st->size,
- st->time_warp_seq, st->ctime, st->mtime, st->atime,
- issued);
+ in->dirstat = st->dirstat;
+ in->rstat = st->rstat;
- if (in->is_dir() &&
- (st->cap.caps & CEPH_CAP_FILE_SHARED) &&
- in->dirstat.nfiles == 0 &&
- in->dirstat.nsubdirs == 0) {
- dout(10) << " marking I_COMPLETE on empty dir " << *in << dendl;
- in->flags |= I_COMPLETE;
- }
+ in->layout = st->layout;
+ in->ctime = st->ctime;
+ in->max_size = st->max_size; // right?
+
+ update_inode_file_bits(in, st->truncate_seq, st->truncate_size, st->size,
+ st->time_warp_seq, st->ctime, st->mtime, st->atime,
+ issued);
+
+ if (in->is_dir() &&
+ (st->cap.caps & CEPH_CAP_FILE_SHARED) &&
+ in->dirstat.nfiles == 0 &&
+ in->dirstat.nsubdirs == 0) {
+ dout(10) << " marking I_COMPLETE on empty dir " << *in << dendl;
+ in->flags |= I_COMPLETE;
}
// symlink?
if (reply->snapbl.length())
update_snap_trace(reply->snapbl);
+ dout(10) << " hrm "
+ << " is_target=" << (int)reply->head.is_target
+ << " is_dentry=" << (int)reply->head.is_dentry
+ << dendl;
+
InodeStat dirst;
DirStat dst;
string dname;
}
} else if (reply->head.op == CEPH_MDS_OP_LOOKUPSNAP ||
reply->head.op == CEPH_MDS_OP_MKSNAP) {
+ dout(10) << " faking snap lookup weirdness" << dendl;
// fake it for snap lookup
vinodeno_t vino = ist.vino;
vino.snapid = CEPH_SNAPDIR;