X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=diskutil.c;h=9fc309563ea55772125f81bd97389d7988cb82fe;hp=e90096bee6f5c099c639f0b29ebcd96eb0bfcac8;hb=1f4c0a4f558557d45e6b186033577ec0b16872e5;hpb=631c95e0ef133f5a1b014deea4f9cebcb1cd4446 diff --git a/diskutil.c b/diskutil.c index e90096be..9fc30956 100644 --- a/diskutil.c +++ b/diskutil.c @@ -24,6 +24,14 @@ static void disk_util_free(struct disk_util *du) if (du == last_du) last_du = NULL; + while (!flist_empty(&du->slaves)) { + struct disk_util *slave; + + slave = flist_entry(du->slaves.next, struct disk_util, slavelist); + flist_del(&slave->slavelist); + slave->users--; + } + fio_mutex_remove(du->lock); sfree(du->name); sfree(du); @@ -67,10 +75,10 @@ static void update_io_tick_disk(struct disk_util *du) struct disk_util_stat __dus, *dus, *ldus; struct timeval t; - if (get_io_ticks(du, &__dus)) - return; if (!du->users) return; + if (get_io_ticks(du, &__dus)) + return; dus = &du->dus; ldus = &du->last_dus; @@ -236,14 +244,16 @@ static void find_add_disk_slaves(struct thread_data *td, char *path, /* Should probably use an assert here. slavedu should * always be present at this point. */ - if (slavedu) + if (slavedu) { + slavedu->users++; flist_add_tail(&slavedu->slavelist, &masterdu->slaves); + } } closedir(dirhandle); } -static struct disk_util *disk_util_add(struct thread_data * td, int majdev, +static struct disk_util *disk_util_add(struct thread_data *td, int majdev, int mindev, char *path) { struct disk_util *du, *__du;