return rc;
}
-static int llapi_semantic_traverse(char *path, int size, int parent,
- semantic_func_t sem_init,
- semantic_func_t sem_fini, void *data,
- struct dirent64 *de)
+int llapi_semantic_traverse(char *path, int size, int parent,
+ semantic_func_t sem_init,
+ semantic_func_t sem_fini, void *data,
+ struct dirent64 *de)
{
struct find_param *param = (struct find_param *)data;
struct dirent64 *dent;
}
while ((dent = readdir64(dir)) != NULL) {
- int rc;
+ int rc = 0;
if (!strcmp(dent->d_name, ".") || !strcmp(dent->d_name, ".."))
continue;
break;
case DT_DIR:
/* recursion down into a new subdirectory here */
- rc = llapi_semantic_traverse(path, size, d, sem_init,
- sem_fini, data, dent);
+ if (param->fp_thread_count) {
+ rc = work_unit_create_and_add(path, param,
+ dent);
+ } else {
+ rc = llapi_semantic_traverse(path, size, d,
+ sem_init, sem_fini,
+ data, dent);
+ }
if (rc != 0 && ret == 0)
ret = rc;
if (rc < 0 && rc != -EALREADY &&
struct find_work_queue *queue = (struct find_work_queue *) arg;
struct find_work_unit *unit;
- /* TODO: Implement actual work processing */
while (!queue->fwq_shutdown) {
/* Get work unit from queue */
pthread_mutex_lock(&queue->fwq_lock);
queue->fwq_tail = NULL;
pthread_mutex_unlock(&queue->fwq_lock);
- /* TODO: processing goes here */
- sleep(0.1);
+ // TODO: Error propagation, interesting...
+ llapi_semantic_traverse(unit->fwu_path, 2 * PATH_MAX, -1,
+ cb_find_init, cb_common_fini,
+ unit->fwu_param, NULL);
work_unit_free(unit);
__sync_fetch_and_sub(&queue->fwq_active_units, 1);
}
return NULL;
}
-static int work_unit_create_and_add(const char *path, struct find_param *param,
- struct dirent64 *dent)
+int work_unit_create_and_add(const char *path, struct find_param *param,
+ struct dirent64 *dent)
{
struct find_work_queue *queue = param->fp_queue;
struct find_work_unit *unit;
int common_param_init(struct find_param *param, char *path);
void find_param_fini(struct find_param *param);
int parallel_find(char *path, struct find_param *param);
+int work_unit_create_and_add(const char *path, struct find_param *param,
+ struct dirent64 *dent);
+int llapi_semantic_traverse(char *path, int size, int parent,
+ semantic_func_t sem_init,
+ semantic_func_t sem_fini, void *data,
+ struct dirent64 *de);
#endif /* _LUSTREAPI_INTERNAL_H_ */