Project

General

Profile

Bug #6914 » 0001-mds-always-store-backtrace-xattr-in-the-default-pool.patch

Zheng Yan, 12/31/2013 07:06 PM

View differences:

src/mds/CInode.cc
object_locator_t oloc(pool);
Context *fin2 = new C_Inode_StoredBacktrace(this, inode.backtrace_version, fin);
if (!state_test(STATE_DIRTYPOOL)) {
if (!state_test(STATE_DIRTYPOOL) || inode.old_pools.empty()) {
mdcache->mds->objecter->mutate(oid, oloc, op, snapc, ceph_clock_now(g_ceph_context),
0, NULL, fin2);
return;
src/mds/MDCache.cc
info.want_replica = want_replica;
info.want_xlocked = want_xlocked;
info.tid = ++open_ino_last_tid;
info.pool = pool >= 0 ? pool : mds->mdsmap->get_first_data_pool();
info.pool = pool >= 0 ? pool : default_file_layout.fl_pg_pool;
info.waiters.push_back(fin);
do_open_ino(ino, info, 0);
}
src/mds/Server.cc
// dirty inode, dn, dir
newi->inode.version--; // a bit hacky, see C_MDS_mknod_finish
newi->mark_dirty(newi->inode.version+1, mdr->ls);
newi->_mark_dirty_parent(mdr->ls);
newi->_mark_dirty_parent(mdr->ls, true);
mdr->apply();
......
dn->push_projected_linkage(in);
in->inode.version = dn->pre_dirty();
if (layout.fl_pg_pool != mdcache->default_file_layout.fl_pg_pool)
in->inode.add_old_pool(mdcache->default_file_layout.fl_pg_pool);
in->inode.update_backtrace();
if (cmode & CEPH_FILE_MODE_WR) {
in->inode.client_ranges[client].range.first = 0;
......
le->metablob.add_client_req(req->get_reqid(), req->get_oldest_client_tid());
journal_allocated_inos(mdr, &le->metablob);
mdcache->predirty_journal_parents(mdr, &le->metablob, in, dn->get_dir(), PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
le->metablob.add_primary_dentry(dn, in, true, true);
le->metablob.add_primary_dentry(dn, in, true, true, true);
// do the open
mds->locker->issue_new_caps(in, cmode, mdr->session, realm, req->is_replay());
......
// a new version of hte inode since it's just been created)
newi->inode.version--;
newi->mark_dirty(newi->inode.version + 1, mdr->ls);
newi->_mark_dirty_parent(mdr->ls);
newi->_mark_dirty_parent(mdr->ls, true);
// mkdir?
if (newi->inode.is_dir()) {
......
newi->inode.mode |= S_IFREG;
newi->inode.version = dn->pre_dirty();
newi->inode.rstat.rfiles = 1;
if (layout.fl_pg_pool != mdcache->default_file_layout.fl_pg_pool)
newi->inode.add_old_pool(mdcache->default_file_layout.fl_pg_pool);
newi->inode.update_backtrace();
// if the client created a _regular_ file via MKNOD, it's highly likely they'll
......
mdcache->predirty_journal_parents(mdr, &le->metablob, newi, dn->get_dir(),
PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
le->metablob.add_primary_dentry(dn, newi, true, true);
le->metablob.add_primary_dentry(dn, newi, true, true, true);
journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(mds, mdr, dn, newi, follows));
}
(6-6/7)