projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Revert "Convert file hash lock to spinlocks"
[fio.git]
/
diskutil.c
diff --git
a/diskutil.c
b/diskutil.c
index 1815c4aad006e27fbb5c38902794052d477c1581..9fb31bf2be44f6c6e9f997e204a10fb6b7574aa1 100644
(file)
--- a/
diskutil.c
+++ b/
diskutil.c
@@
-11,7
+11,7
@@
static int last_majdev, last_mindev;
static int last_majdev, last_mindev;
-static struct
list_head disk_list =
LIST_HEAD_INIT(disk_list);
+static struct
flist_head disk_list = F
LIST_HEAD_INIT(disk_list);
static int get_io_ticks(struct disk_util *du, struct disk_util_stat *dus)
{
static int get_io_ticks(struct disk_util *du, struct disk_util_stat *dus)
{
@@
-76,24
+76,24
@@
static void update_io_tick_disk(struct disk_util *du)
void update_io_ticks(void)
{
void update_io_ticks(void)
{
- struct list_head *entry;
+ struct
f
list_head *entry;
struct disk_util *du;
dprint(FD_DISKUTIL, "update io ticks\n");
struct disk_util *du;
dprint(FD_DISKUTIL, "update io ticks\n");
- list_for_each(entry, &disk_list) {
- du = list_entry(entry, struct disk_util, list);
+
f
list_for_each(entry, &disk_list) {
+ du =
f
list_entry(entry, struct disk_util, list);
update_io_tick_disk(du);
}
}
static struct disk_util *disk_util_exists(int major, int minor)
{
update_io_tick_disk(du);
}
}
static struct disk_util *disk_util_exists(int major, int minor)
{
- struct list_head *entry;
+ struct
f
list_head *entry;
struct disk_util *du;
struct disk_util *du;
- list_for_each(entry, &disk_list) {
- du = list_entry(entry, struct disk_util, list);
+
f
list_for_each(entry, &disk_list) {
+ du =
f
list_entry(entry, struct disk_util, list);
if (major == du->major && minor == du->minor)
return du;
if (major == du->major && minor == du->minor)
return du;
@@
-105,21
+105,21
@@
static struct disk_util *disk_util_exists(int major, int minor)
static void disk_util_add(int majdev, int mindev, char *path)
{
struct disk_util *du, *__du;
static void disk_util_add(int majdev, int mindev, char *path)
{
struct disk_util *du, *__du;
- struct list_head *entry;
+ struct
f
list_head *entry;
dprint(FD_DISKUTIL, "add maj/min %d/%d: %s\n", majdev, mindev, path);
du = malloc(sizeof(*du));
memset(du, 0, sizeof(*du));
dprint(FD_DISKUTIL, "add maj/min %d/%d: %s\n", majdev, mindev, path);
du = malloc(sizeof(*du));
memset(du, 0, sizeof(*du));
- INIT_LIST_HEAD(&du->list);
+ INIT_
F
LIST_HEAD(&du->list);
sprintf(du->path, "%s/stat", path);
du->name = strdup(basename(path));
du->sysfs_root = path;
du->major = majdev;
du->minor = mindev;
sprintf(du->path, "%s/stat", path);
du->name = strdup(basename(path));
du->sysfs_root = path;
du->major = majdev;
du->minor = mindev;
- list_for_each(entry, &disk_list) {
- __du = list_entry(entry, struct disk_util, list);
+
f
list_for_each(entry, &disk_list) {
+ __du =
f
list_entry(entry, struct disk_util, list);
dprint(FD_DISKUTIL, "found %s in list\n", __du->name);
dprint(FD_DISKUTIL, "found %s in list\n", __du->name);
@@
-135,7
+135,7
@@
static void disk_util_add(int majdev, int mindev, char *path)
fio_gettime(&du->time, NULL);
get_io_ticks(du, &du->last_dus);
fio_gettime(&du->time, NULL);
get_io_ticks(du, &du->last_dus);
- list_add_tail(&du->list, &disk_list);
+
f
list_add_tail(&du->list, &disk_list);
}
static int check_dev_match(int majdev, int mindev, char *path)
}
static int check_dev_match(int majdev, int mindev, char *path)
@@
-170,7
+170,7
@@
static int check_dev_match(int majdev, int mindev, char *path)
return 1;
}
return 1;
}
-static int find_block_dir(int majdev, int mindev, char *path)
+static int find_block_dir(int majdev, int mindev, char *path
, int link_ok
)
{
struct dirent *dir;
struct stat st;
{
struct dirent *dir;
struct stat st;
@@
-196,15
+196,22
@@
static int find_block_dir(int majdev, int mindev, char *path)
}
}
}
}
- if (lstat(full_path, &st) == -1) {
- perror("stat");
- break;
+ if (link_ok) {
+ if (stat(full_path, &st) == -1) {
+ perror("stat");
+ break;
+ }
+ } else {
+ if (lstat(full_path, &st) == -1) {
+ perror("stat");
+ break;
+ }
}
if (!S_ISDIR(st.st_mode) || S_ISLNK(st.st_mode))
continue;
}
if (!S_ISDIR(st.st_mode) || S_ISLNK(st.st_mode))
continue;
- found = find_block_dir(majdev, mindev, full_path);
+ found = find_block_dir(majdev, mindev, full_path
, 0
);
if (found) {
strcpy(path, full_path);
break;
if (found) {
strcpy(path, full_path);
break;
@@
-277,7
+284,7
@@
static void __init_disk_util(struct thread_data *td, struct fio_file *f)
last_majdev = majdev;
sprintf(foo, "/sys/block");
last_majdev = majdev;
sprintf(foo, "/sys/block");
- if (!find_block_dir(majdev, mindev, foo))
+ if (!find_block_dir(majdev, mindev, foo
, 1
))
return;
/*
return;
/*
@@
-319,17
+326,17
@@
void init_disk_util(struct thread_data *td)
void show_disk_util(void)
{
struct disk_util_stat *dus;
void show_disk_util(void)
{
struct disk_util_stat *dus;
- struct list_head *entry, *next;
+ struct
f
list_head *entry, *next;
struct disk_util *du;
double util;
struct disk_util *du;
double util;
- if (list_empty(&disk_list))
+ if (
f
list_empty(&disk_list))
return;
log_info("\nDisk stats (read/write):\n");
return;
log_info("\nDisk stats (read/write):\n");
- list_for_each(entry, &disk_list) {
- du = list_entry(entry, struct disk_util, list);
+
f
list_for_each(entry, &disk_list) {
+ du =
f
list_entry(entry, struct disk_util, list);
dus = &du->dus;
util = (double) 100 * du->dus.io_ticks / (double) du->msec;
dus = &du->dus;
util = (double) 100 * du->dus.io_ticks / (double) du->msec;
@@
-347,9
+354,9
@@
void show_disk_util(void)
/*
* now free the list
*/
/*
* now free the list
*/
- list_for_each_safe(entry, next, &disk_list) {
- list_del(entry);
- du = list_entry(entry, struct disk_util, list);
+
f
list_for_each_safe(entry, next, &disk_list) {
+
f
list_del(entry);
+ du =
f
list_entry(entry, struct disk_util, list);
free(du->name);
free(du);
}
free(du->name);
free(du);
}