From: Greg Farnum Date: Tue, 28 Jun 2016 23:28:34 +0000 (-0700) Subject: client: pass UserPerm to getdir() X-Git-Tag: v11.0.1~36^2~96 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f40218cc5f25ad7bf3ba1c595bb3b84903d852c3;p=ceph.git client: pass UserPerm to getdir() Signed-off-by: Greg Farnum --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 4af0fe0f8aa9..4472485d604a 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -7499,7 +7499,8 @@ static int _getdir_cb(void *p, struct dirent *de, struct stat *st, int stmask, o return 0; } -int Client::getdir(const char *relpath, list& contents) +int Client::getdir(const char *relpath, list& contents, + const UserPerm& perms) { ldout(cct, 3) << "getdir(" << relpath << ")" << dendl; { diff --git a/src/client/Client.h b/src/client/Client.h index 8cc6ec912c53..f76de8713cf3 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -993,7 +993,8 @@ public: int readdir_r(dir_result_t *dirp, struct dirent *de); int readdirplus_r(dir_result_t *dirp, struct dirent *de, struct stat *st, int *stmask); - int getdir(const char *relpath, list& names); // get the whole dir at once. + int getdir(const char *relpath, list& names, + const UserPerm& perms); // get the whole dir at once. /** * Returns the length of the buffer that got filled in, or -errno. diff --git a/src/client/SyntheticClient.cc b/src/client/SyntheticClient.cc index 322026751133..de744c54671b 100644 --- a/src/client/SyntheticClient.cc +++ b/src/client/SyntheticClient.cc @@ -1068,6 +1068,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) } // high level ops --------------------- + UserPerm perms = client->pick_my_perms(); if (strcmp(op, "link") == 0) { const char *a = t.get_string(buf, p); const char *b = t.get_string(buf2, p); @@ -1131,7 +1132,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) } else if (strcmp(op, "getdir") == 0) { const char *a = t.get_string(buf, p); list contents; - int r = client->getdir(a, contents); + int r = client->getdir(a, contents, perms); if (r < 0) { dout(1) << "getdir on " << a << " returns " << r << dendl; } @@ -1556,7 +1557,8 @@ int SyntheticClient::clean_dir(string& basedir) { // read dir list contents; - int r = client->getdir(basedir.c_str(), contents); + UserPerm perms = client->pick_my_perms(); + int r = client->getdir(basedir.c_str(), contents, perms); if (r < 0) { dout(1) << "getdir on " << basedir << " returns " << r << dendl; return r; @@ -1605,6 +1607,7 @@ int SyntheticClient::full_walk(string& basedir) ceph::unordered_map nlink; ceph::unordered_map nlink_seen; + UserPerm perms = client->pick_my_perms(); while (!dirq.empty()) { string dir = dirq.front(); frag_info_t expect = statq.front(); @@ -1615,7 +1618,7 @@ int SyntheticClient::full_walk(string& basedir) // read dir list contents; - int r = client->getdir(dir.c_str(), contents); + int r = client->getdir(dir.c_str(), contents, perms); if (r < 0) { dout(1) << "getdir on " << dir << " returns " << r << dendl; continue; @@ -1804,8 +1807,9 @@ int SyntheticClient::read_dirs(const char *basedir, int dirs, int files, int dep dout(3) << "read_dirs " << basedir << " dirs " << dirs << " files " << files << " depth " << depth << dendl; list contents; + UserPerm perms = client->pick_my_perms(); utime_t s = ceph_clock_now(client->cct); - int r = client->getdir(basedir, contents); + int r = client->getdir(basedir, contents, perms); utime_t e = ceph_clock_now(client->cct); e -= s; if (r < 0) { @@ -2638,6 +2642,7 @@ int SyntheticClient::random_walk(int num_req) init_op_dist(); // set up metadata op distribution + UserPerm perms = client->pick_my_perms(); while (left > 0) { left--; @@ -2777,7 +2782,7 @@ int SyntheticClient::random_walk(int num_req) clear_dir(); list c; - r = client->getdir( cwd.c_str(), c ); + r = client->getdir(cwd.c_str(), c, perms); for (list::iterator it = c.begin(); it != c.end();