Really fix dm/md slave disk utilization
authorJens Axboe <jens.axboe@oracle.com>
Thu, 1 Oct 2009 17:44:36 +0000 (19:44 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Thu, 1 Oct 2009 17:44:36 +0000 (19:44 +0200)
We should just handle it internally in the disk util inc/dec. Make
it iterate each slave and modify their usage count, too.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diskutil.h

index 35fd0a5..dc89cc5 100644 (file)
@@ -47,22 +47,31 @@ struct disk_util {
        unsigned long users;
 };
 
-static inline void disk_util_inc(struct disk_util *du)
+static inline void disk_util_mod(struct disk_util *du, int val)
 {
        if (du) {
+               struct flist_head *n;
+
                fio_mutex_down(du->lock);
-               du->users++;
+               du->users += val;
+
+               flist_for_each(n, &du->slavelist) {
+                       struct disk_util *slave;
+
+                       slave = flist_entry(n, struct disk_util, slavelist);
+                       slave->users += val;
+               }
                fio_mutex_up(du->lock);
        }
 }
+static inline void disk_util_inc(struct disk_util *du)
+{
+       disk_util_mod(du, 1);
+}
 
 static inline void disk_util_dec(struct disk_util *du)
 {
-       if (du) {
-               fio_mutex_down(du->lock);
-               du->users--;
-               fio_mutex_up(du->lock);
-       }
+       disk_util_mod(du, -1);
 }
 
 #define DISK_UTIL_MSEC (250)