summaryrefslogtreecommitdiff
path: root/src/mds/Server.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/mds/Server.cc')
-rw-r--r--src/mds/Server.cc34
1 files changed, 17 insertions, 17 deletions
diff --git a/src/mds/Server.cc b/src/mds/Server.cc
index d8de4b46d93..917312c74c4 100644
--- a/src/mds/Server.cc
+++ b/src/mds/Server.cc
@@ -3279,38 +3279,38 @@ void Server::handle_client_setdirlayout(MDRequest *mdr)
return;
// validate layout
- default_file_layout *layout = new default_file_layout;
- if (cur->get_projected_dir_layout())
- layout->layout = *cur->get_projected_dir_layout();
+ inode_t *pi = cur->get_projected_inode();
+ ceph_file_layout layout;
+ if (pi->has_layout())
+ layout = pi->layout;
else if (dir_layout)
- layout->layout = *dir_layout;
+ layout = *dir_layout;
else
- layout->layout = mds->mdcache->default_file_layout;
+ layout = mds->mdcache->default_file_layout;
if (req->head.args.setlayout.layout.fl_object_size > 0)
- layout->layout.fl_object_size = req->head.args.setlayout.layout.fl_object_size;
+ layout.fl_object_size = req->head.args.setlayout.layout.fl_object_size;
if (req->head.args.setlayout.layout.fl_stripe_unit > 0)
- layout->layout.fl_stripe_unit = req->head.args.setlayout.layout.fl_stripe_unit;
+ layout.fl_stripe_unit = req->head.args.setlayout.layout.fl_stripe_unit;
if (req->head.args.setlayout.layout.fl_stripe_count > 0)
- layout->layout.fl_stripe_count=req->head.args.setlayout.layout.fl_stripe_count;
+ layout.fl_stripe_count=req->head.args.setlayout.layout.fl_stripe_count;
if (req->head.args.setlayout.layout.fl_cas_hash > 0)
- layout->layout.fl_cas_hash = req->head.args.setlayout.layout.fl_cas_hash;
+ layout.fl_cas_hash = req->head.args.setlayout.layout.fl_cas_hash;
if (req->head.args.setlayout.layout.fl_object_stripe_unit > 0)
- layout->layout.fl_object_stripe_unit = req->head.args.setlayout.layout.fl_object_stripe_unit;
+ layout.fl_object_stripe_unit = req->head.args.setlayout.layout.fl_object_stripe_unit;
if (req->head.args.setlayout.layout.fl_pg_preferred != (__le32)-1)
- layout->layout.fl_pg_preferred = req->head.args.setlayout.layout.fl_pg_preferred;
+ layout.fl_pg_preferred = req->head.args.setlayout.layout.fl_pg_preferred;
if (req->head.args.setlayout.layout.fl_pg_pool > 0)
- layout->layout.fl_pg_pool = req->head.args.setlayout.layout.fl_pg_pool;
- if (!ceph_file_layout_is_valid(&layout->layout)) {
+ layout.fl_pg_pool = req->head.args.setlayout.layout.fl_pg_pool;
+ if (!ceph_file_layout_is_valid(&layout)) {
dout(10) << "bad layout" << dendl;
reply_request(mdr, -EINVAL);
- delete layout;
return;
}
- cur->project_inode();
- cur->get_projected_node()->dir_layout = layout;
- cur->get_projected_inode()->version = cur->pre_dirty();
+ pi = cur->project_inode();
+ pi->layout = layout;
+ pi->version = cur->pre_dirty();
// log + wait
mdr->ls = mdlog->get_current_segment();