diff options
author | Sage Weil <sage@newdream.net> | 2010-11-08 10:28:52 -0500 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-11-08 10:29:05 -0500 |
commit | cb4276cca4695670916a82e359f2e3776f0a9138 (patch) | |
tree | 09695ba622771c933e045bafe63c1da1139266f3 /fs/ceph/mds_client.c | |
parent | cd045cb42a266882ac24bc21a3a8d03683c72954 (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.c | 7 |
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); |