projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
smalloc: oom cleanups
[fio.git]
/
diskutil.c
diff --git
a/diskutil.c
b/diskutil.c
index c34841a2af2c379b10b47b162ef79e99fd88a040..b973120c1abc89b7bea66698a0b38e47315858f3 100644
(file)
--- a/
diskutil.c
+++ b/
diskutil.c
@@
-1,12
+1,15
@@
#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <string.h>
-#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/sysmacros.h>
#include <dirent.h>
#include <libgen.h>
#include <dirent.h>
#include <libgen.h>
-#include <math.h>
-#include <assert.h>
+#ifdef CONFIG_VALGRIND_DEV
+#include <valgrind/drd.h>
+#else
+#define DRD_IGNORE_VAR(x) do { } while (0)
+#endif
#include "fio.h"
#include "smalloc.h"
#include "fio.h"
#include "smalloc.h"
@@
-16,9
+19,7
@@
static int last_majdev, last_mindev;
static struct disk_util *last_du;
static int last_majdev, last_mindev;
static struct disk_util *last_du;
-static struct fio_mutex *disk_util_mutex;
-
-FLIST_HEAD(disk_list);
+static struct fio_sem *disk_util_sem;
static struct disk_util *__init_per_file_disk_util(struct thread_data *td,
int majdev, int mindev, char *path);
static struct disk_util *__init_per_file_disk_util(struct thread_data *td,
int majdev, int mindev, char *path);
@@
-36,7
+37,7
@@
static void disk_util_free(struct disk_util *du)
slave->users--;
}
slave->users--;
}
- fio_
mutex
_remove(du->lock);
+ fio_
sem
_remove(du->lock);
free(du->sysfs_root);
sfree(du);
}
free(du->sysfs_root);
sfree(du);
}
@@
-86,7
+87,7
@@
static int get_io_ticks(struct disk_util *du, struct disk_util_stat *dus)
static void update_io_tick_disk(struct disk_util *du)
{
struct disk_util_stat __dus, *dus, *ldus;
static void update_io_tick_disk(struct disk_util *du)
{
struct disk_util_stat __dus, *dus, *ldus;
- struct time
val
t;
+ struct time
spec
t;
if (!du->users)
return;
if (!du->users)
return;
@@
-121,7
+122,7
@@
int update_io_ticks(void)
dprint(FD_DISKUTIL, "update io ticks\n");
dprint(FD_DISKUTIL, "update io ticks\n");
- fio_
mutex_down(disk_util_mutex
);
+ fio_
sem_down(disk_util_sem
);
if (!helper_should_exit()) {
flist_for_each(entry, &disk_list) {
if (!helper_should_exit()) {
flist_for_each(entry, &disk_list) {
@@
-131,7
+132,7
@@
int update_io_ticks(void)
} else
ret = 1;
} else
ret = 1;
- fio_
mutex_up(disk_util_mutex
);
+ fio_
sem_up(disk_util_sem
);
return ret;
}
return ret;
}
@@
-140,18
+141,18
@@
static struct disk_util *disk_util_exists(int major, int minor)
struct flist_head *entry;
struct disk_util *du;
struct flist_head *entry;
struct disk_util *du;
- fio_
mutex_down(disk_util_mutex
);
+ fio_
sem_down(disk_util_sem
);
flist_for_each(entry, &disk_list) {
du = flist_entry(entry, struct disk_util, list);
if (major == du->major && minor == du->minor) {
flist_for_each(entry, &disk_list) {
du = flist_entry(entry, struct disk_util, list);
if (major == du->major && minor == du->minor) {
- fio_
mutex_up(disk_util_mutex
);
+ fio_
sem_up(disk_util_sem
);
return du;
}
}
return du;
}
}
- fio_
mutex_up(disk_util_mutex
);
+ fio_
sem_up(disk_util_sem
);
return NULL;
}
return NULL;
}
@@
-247,7
+248,7
@@
static void find_add_disk_slaves(struct thread_data *td, char *path,
* devices?
*/
linklen = readlink(temppath, slavepath, PATH_MAX - 1);
* devices?
*/
linklen = readlink(temppath, slavepath, PATH_MAX - 1);
- if (linklen
< 0) {
+ if (linklen < 0) {
perror("readlink() for slave device.");
closedir(dirhandle);
return;
perror("readlink() for slave device.");
closedir(dirhandle);
return;
@@
-255,8
+256,10
@@
static void find_add_disk_slaves(struct thread_data *td, char *path,
slavepath[linklen] = '\0';
sprintf(temppath, "%s/%s/dev", slavesdir, slavepath);
slavepath[linklen] = '\0';
sprintf(temppath, "%s/%s/dev", slavesdir, slavepath);
+ if (access(temppath, F_OK) != 0)
+ sprintf(temppath, "%s/%s/device/dev", slavesdir, slavepath);
if (read_block_dev_entry(temppath, &majdev, &mindev)) {
if (read_block_dev_entry(temppath, &majdev, &mindev)) {
- perror("Error getting slave device numbers
.
");
+ perror("Error getting slave device numbers");
closedir(dirhandle);
return;
}
closedir(dirhandle);
return;
}
@@
-296,6
+299,7
@@
static struct disk_util *disk_util_add(struct thread_data *td, int majdev,
if (!du)
return NULL;
if (!du)
return NULL;
+ DRD_IGNORE_VAR(du->users);
memset(du, 0, sizeof(*du));
INIT_FLIST_HEAD(&du->list);
l = snprintf(du->path, sizeof(du->path), "%s/stat", path);
memset(du, 0, sizeof(*du));
INIT_FLIST_HEAD(&du->list);
l = snprintf(du->path, sizeof(du->path), "%s/stat", path);
@@
-311,10
+315,10
@@
static struct disk_util *disk_util_add(struct thread_data *td, int majdev,
du->minor = mindev;
INIT_FLIST_HEAD(&du->slavelist);
INIT_FLIST_HEAD(&du->slaves);
du->minor = mindev;
INIT_FLIST_HEAD(&du->slavelist);
INIT_FLIST_HEAD(&du->slaves);
- du->lock = fio_
mutex_init(FIO_MUTEX
_UNLOCKED);
+ du->lock = fio_
sem_init(FIO_SEM
_UNLOCKED);
du->users = 0;
du->users = 0;
- fio_
mutex_down(disk_util_mutex
);
+ fio_
sem_down(disk_util_sem
);
flist_for_each(entry, &disk_list) {
__du = flist_entry(entry, struct disk_util, list);
flist_for_each(entry, &disk_list) {
__du = flist_entry(entry, struct disk_util, list);
@@
-323,7
+327,7
@@
static struct disk_util *disk_util_add(struct thread_data *td, int majdev,
if (!strcmp((char *) du->dus.name, (char *) __du->dus.name)) {
disk_util_free(du);
if (!strcmp((char *) du->dus.name, (char *) __du->dus.name)) {
disk_util_free(du);
- fio_
mutex_up(disk_util_mutex
);
+ fio_
sem_up(disk_util_sem
);
return __du;
}
}
return __du;
}
}
@@
-334,7
+338,7
@@
static struct disk_util *disk_util_add(struct thread_data *td, int majdev,
get_io_ticks(du, &du->last_dus);
flist_add_tail(&du->list, &disk_list);
get_io_ticks(du, &du->last_dus);
flist_add_tail(&du->list, &disk_list);
- fio_
mutex_up(disk_util_mutex
);
+ fio_
sem_up(disk_util_sem
);
find_add_disk_slaves(td, path, du);
return du;
find_add_disk_slaves(td, path, du);
return du;
@@
-365,7
+369,7
@@
static int find_block_dir(int majdev, int mindev, char *path, int link_ok)
return 0;
while ((dir = readdir(D)) != NULL) {
return 0;
while ((dir = readdir(D)) != NULL) {
- char full_path[25
6
];
+ char full_path[25
7
];
if (!strcmp(dir->d_name, ".") || !strcmp(dir->d_name, ".."))
continue;
if (!strcmp(dir->d_name, ".") || !strcmp(dir->d_name, ".."))
continue;
@@
-431,9
+435,6
@@
static struct disk_util *__init_per_file_disk_util(struct thread_data *td,
sprintf(path, "%s", tmp);
}
sprintf(path, "%s", tmp);
}
- if (td->o.ioscheduler && !td->sysfs_root)
- td->sysfs_root = strdup(path);
-
return disk_util_add(td, majdev, mindev, path);
}
return disk_util_add(td, majdev, mindev, path);
}
@@
-452,12
+453,8
@@
static struct disk_util *init_per_file_disk_util(struct thread_data *td,
mindev);
du = disk_util_exists(majdev, mindev);
mindev);
du = disk_util_exists(majdev, mindev);
- if (du) {
- if (td->o.ioscheduler && !td->sysfs_root)
- td->sysfs_root = strdup(du->sysfs_root);
-
+ if (du)
return du;
return du;
- }
/*
* for an fs without a device, we will repeatedly stat through
/*
* for an fs without a device, we will repeatedly stat through
@@
-565,7
+562,7
@@
static void aggregate_slaves_stats(struct disk_util *masterdu)
void disk_util_prune_entries(void)
{
void disk_util_prune_entries(void)
{
- fio_
mutex_down(disk_util_mutex
);
+ fio_
sem_down(disk_util_sem
);
while (!flist_empty(&disk_list)) {
struct disk_util *du;
while (!flist_empty(&disk_list)) {
struct disk_util *du;
@@
-576,8
+573,8
@@
void disk_util_prune_entries(void)
}
last_majdev = last_mindev = -1;
}
last_majdev = last_mindev = -1;
- fio_
mutex_up(disk_util_mutex
);
- fio_
mutex_remove(disk_util_mutex
);
+ fio_
sem_up(disk_util_sem
);
+ fio_
sem_remove(disk_util_sem
);
}
void print_disk_util(struct disk_util_stat *dus, struct disk_util_agg *agg,
}
void print_disk_util(struct disk_util_stat *dus, struct disk_util_agg *agg,
@@
-699,13
+696,13
@@
void show_disk_util(int terse, struct json_object *parent,
struct disk_util *du;
bool do_json;
struct disk_util *du;
bool do_json;
- if (!disk_util_
mutex
)
+ if (!disk_util_
sem
)
return;
return;
- fio_
mutex_down(disk_util_mutex
);
+ fio_
sem_down(disk_util_sem
);
if (flist_empty(&disk_list)) {
if (flist_empty(&disk_list)) {
- fio_
mutex_up(disk_util_mutex
);
+ fio_
sem_up(disk_util_sem
);
return;
}
return;
}
@@
-728,10
+725,10
@@
void show_disk_util(int terse, struct json_object *parent,
}
}
}
}
- fio_
mutex_up(disk_util_mutex
);
+ fio_
sem_up(disk_util_sem
);
}
void setup_disk_util(void)
{
}
void setup_disk_util(void)
{
- disk_util_
mutex = fio_mutex_init(FIO_MUTEX
_UNLOCKED);
+ disk_util_
sem = fio_sem_init(FIO_SEM
_UNLOCKED);
}
}