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<string>& names); // get the whole dir at once.
+ int getdir(const char *relpath, list<string>& names,
+ const UserPerm& perms); // get the whole dir at once.
/**
* Returns the length of the buffer that got filled in, or -errno.
}
// 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);
} else if (strcmp(op, "getdir") == 0) {
const char *a = t.get_string(buf, p);
list<string> 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;
}
{
// read dir
list<string> 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;
ceph::unordered_map<inodeno_t, int> nlink;
ceph::unordered_map<inodeno_t, int> nlink_seen;
+ UserPerm perms = client->pick_my_perms();
while (!dirq.empty()) {
string dir = dirq.front();
frag_info_t expect = statq.front();
// read dir
list<string> 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;
dout(3) << "read_dirs " << basedir << " dirs " << dirs << " files " << files << " depth " << depth << dendl;
list<string> 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) {
init_op_dist(); // set up metadata op distribution
+ UserPerm perms = client->pick_my_perms();
while (left > 0) {
left--;
clear_dir();
list<string> c;
- r = client->getdir( cwd.c_str(), c );
+ r = client->getdir(cwd.c_str(), c, perms);
for (list<string>::iterator it = c.begin();
it != c.end();