int Client::_ftruncate(Fh *fh, off_t length)
{
MClientRequest *req = new MClientRequest(CEPH_MDS_OP_TRUNCATE, messenger->get_myinst());
- req->head.args.truncate.ino = fh->inode->inode.ino;
+ req->set_filepath( filepath("", fh->inode->inode.ino) );
req->head.args.truncate.length = length;
// FIXME where does FUSE maintain user information
req->get_oldest_client_tid());
}
-
- // -----
- // some ops are on ino's
- switch (req->get_op()) {
- case CEPH_MDS_OP_FSTAT:
- ref = mdcache->get_inode(req->head.args.fstat.ino);
- assert(ref);
- break;
-
- case CEPH_MDS_OP_TRUNCATE:
- if (!req->head.args.truncate.ino)
- break; // can be called w/ either fh OR path
- ref = mdcache->get_inode(req->head.args.truncate.ino);
- assert(ref);
- break;
-
- case CEPH_MDS_OP_FSYNC:
- ref = mdcache->get_inode(req->head.args.fsync.ino); // fixme someday no ino needed?
- assert(ref);
- break;
- }
-
// register + dispatch
MDRequest *mdr = mdcache->request_start(req);
if (!mdr) return;
// inodes ops.
case CEPH_MDS_OP_STAT:
case CEPH_MDS_OP_LSTAT:
+ case CEPH_MDS_OP_FSTAT:
handle_client_stat(mdr);
break;
case CEPH_MDS_OP_UTIME:
handle_client_readdir(mdr);
break;
case CEPH_MDS_OP_FSYNC:
- //handle_client_fsync(req, ref);
+ //handle_client_fsync(req);
break;
// funky.
ps_t numps = osdmap.get_pg_num();
int minrep = 1;
int maxrep = MIN(g_conf.num_osd, g_conf.osd_max_rep);
- for (int nrep = 1; nrep <= maxrep; nrep++) {
+ for (int nrep = minrep; nrep <= maxrep; nrep++) {
for (ps_t ps = 0; ps < numps; ++ps) {
pg_t pgid = pg_t(pg_t::TYPE_REP, nrep, ps, -1);
vector<int> osds;