aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph/mds_client.c
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2010-11-08 10:28:52 -0500
committerSage Weil <sage@newdream.net>2010-11-08 10:29:05 -0500
commitcb4276cca4695670916a82e359f2e3776f0a9138 (patch)
tree09695ba622771c933e045bafe63c1da1139266f3 /fs/ceph/mds_client.c
parentcd045cb42a266882ac24bc21a3a8d03683c72954 (diff)
ceph: fix uid/gid on resent mds requests
MDS requests can be rebuilt and resent in non-process context, but were filling in uid/gid from current_fsuid/gid. Put that information in the request struct on request setup. This fixes incorrect (and root) uid/gid getting set for requests that are forwarded between MDSs, usually due to metadata migrations. Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/mds_client.c')
-rw-r--r--fs/ceph/mds_client.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index 3142b15940c2..d22fbbef1959 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -529,6 +529,9 @@ static void __register_request(struct ceph_mds_client *mdsc,
529 ceph_mdsc_get_request(req); 529 ceph_mdsc_get_request(req);
530 __insert_request(mdsc, req); 530 __insert_request(mdsc, req);
531 531
532 req->r_uid = current_fsuid();
533 req->r_gid = current_fsgid();
534
532 if (dir) { 535 if (dir) {
533 struct ceph_inode_info *ci = ceph_inode(dir); 536 struct ceph_inode_info *ci = ceph_inode(dir);
534 537
@@ -1588,8 +1591,8 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc,
1588 1591
1589 head->mdsmap_epoch = cpu_to_le32(mdsc->mdsmap->m_epoch); 1592 head->mdsmap_epoch = cpu_to_le32(mdsc->mdsmap->m_epoch);
1590 head->op = cpu_to_le32(req->r_op); 1593 head->op = cpu_to_le32(req->r_op);
1591 head->caller_uid = cpu_to_le32(current_fsuid()); 1594 head->caller_uid = cpu_to_le32(req->r_uid);
1592 head->caller_gid = cpu_to_le32(current_fsgid()); 1595 head->caller_gid = cpu_to_le32(req->r_gid);
1593 head->args = req->r_args; 1596 head->args = req->r_args;
1594 1597
1595 ceph_encode_filepath(&p, end, ino1, path1); 1598 ceph_encode_filepath(&p, end, ino1, path1);