}
};
-int Client::_readdir_cache_cb(dir_result_t *dirp, add_dirent_cb_t cb, void *p)
+int Client::_readdir_cache_cb(dir_result_t *dirp, add_dirent_cb_t cb, void *p, bool lazy)
{
assert(client_lock.is_locked());
ldout(cct, 10) << "_readdir_cache_cb " << dirp << " on " << dirp->inode->ino
return 0;
}
-int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p)
+int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p, bool lazy)
{
Mutex::Locker lock(client_lock);
if (dirp->inode->snapid != CEPH_SNAPDIR &&
dirp->inode->is_complete_and_ordered() &&
dirp->inode->caps_issued_mask(CEPH_CAP_FILE_SHARED)) {
- int err = _readdir_cache_cb(dirp, cb, p);
+ int err = _readdir_cache_cb(dirp, cb, p, lazy);
if (err != -EAGAIN)
return err;
}
void _readdir_next_frag(dir_result_t *dirp);
void _readdir_rechoose_frag(dir_result_t *dirp);
int _readdir_get_frag(dir_result_t *dirp);
- int _readdir_cache_cb(dir_result_t *dirp, add_dirent_cb_t cb, void *p);
+ int _readdir_cache_cb(dir_result_t *dirp, add_dirent_cb_t cb, void *p, bool lazy);
void _closedir(dir_result_t *dirp);
// other helpers
* Returns 0 if it reached the end of the directory.
* If @a cb returns a negative error code, stop and return that.
*/
- int readdir_r_cb(dir_result_t *dirp, add_dirent_cb_t cb, void *p);
+ int readdir_r_cb(dir_result_t *dirp, add_dirent_cb_t cb, void *p, bool lazy=true);
struct dirent * readdir(dir_result_t *d);
int readdir_r(dir_result_t *dirp, struct dirent *de);