From 9e415e75e9adc3a798122a2bddf2bd130eededa1 Mon Sep 17 00:00:00 2001 From: Thomas Schoebel-Theuer Date: Sun, 31 Jan 2016 08:51:31 +0100 Subject: [PATCH] if: move flying_count from input to brick instance --- kernel/mars_if.c | 14 +++++++------- kernel/mars_if.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/kernel/mars_if.c b/kernel/mars_if.c index 4aa4270c..5f33dee4 100644 --- a/kernel/mars_if.c +++ b/kernel/mars_if.c @@ -245,7 +245,7 @@ void if_endio(struct generic_callback *cb) // end_remove_this brick_mem_free(biow); } - atomic_dec(&input->flying_count); + atomic_dec(&input->brick->flying_count); if (rw) { atomic_dec(&input->write_flying_count); } else { @@ -317,7 +317,7 @@ void _if_unplug(struct if_input *input) mars_trace(mref, "if_unplug"); - atomic_inc(&input->flying_count); + atomic_inc(&input->brick->flying_count); atomic_inc(&input->total_fire_count); if (mref->ref_rw) { atomic_inc(&input->write_flying_count); @@ -1132,7 +1132,7 @@ static int if_switch(struct if_brick *brick) status = -EBUSY; goto done; // don't indicate "off" status } - flying = atomic_read(&input->flying_count); + flying = atomic_read(&brick->flying_count); if (unlikely(flying > 0)) { MARS_INF("device '%s' has %d flying requests, cannot shutdown\n", disk->disk_name, flying); status = -EBUSY; @@ -1141,7 +1141,7 @@ static int if_switch(struct if_brick *brick) MARS_DBG("calling del_gendisk()\n"); del_gendisk(input->disk); /* There might be subtle races */ - while (atomic_read(&input->flying_count) > 0) { + while (atomic_read(&brick->flying_count) > 0) { MARS_WRN("device '%s' unexpectedly has %d flying requests\n", disk->disk_name, flying); brick_msleep(1000); } @@ -1223,7 +1223,7 @@ if_release(struct gendisk *gd, fmode_t mode) MARS_INF("----------------------- CLOSE %d ------------------------------\n", atomic_read(&brick->open_count)); if (atomic_dec_and_test(&brick->open_count)) { - while ((nr = atomic_read(&input->flying_count)) > 0) { + while ((nr = atomic_read(&brick->flying_count)) > 0) { MARS_INF("%d IO requests not yet completed\n", nr); brick_msleep(1000); } @@ -1286,7 +1286,7 @@ char *if_statistics(struct if_brick *brick, int verbose) atomic_read(&input->total_skip_sync_count), atomic_read(&brick->open_count), atomic_read(&input->plugged_count), - atomic_read(&input->flying_count), + atomic_read(&brick->flying_count), atomic_read(&input->read_flying_count), atomic_read(&input->write_flying_count)); return res; @@ -1334,6 +1334,7 @@ static int if_brick_construct(struct if_brick *brick) { sema_init(&brick->switch_sem, 1); atomic_set(&brick->open_count, 0); + atomic_set(&brick->flying_count, 0); return 0; } @@ -1358,7 +1359,6 @@ static int if_input_construct(struct if_input *input) INIT_LIST_HEAD(&input->plug_anchor); sema_init(&input->kick_sem, 1); spin_lock_init(&input->req_lock); - atomic_set(&input->flying_count, 0); atomic_set(&input->read_flying_count, 0); atomic_set(&input->write_flying_count, 0); atomic_set(&input->plugged_count, 0); diff --git a/kernel/mars_if.h b/kernel/mars_if.h index b6643011..9b4115f4 100644 --- a/kernel/mars_if.h +++ b/kernel/mars_if.h @@ -77,7 +77,6 @@ struct if_input { #endif loff_t capacity; atomic_t plugged_count; - atomic_t flying_count; // only for statistics atomic_t read_flying_count; atomic_t write_flying_count; @@ -107,6 +106,7 @@ struct if_brick { bool skip_sync; // inspectable atomic_t open_count; + atomic_t flying_count; // private struct semaphore switch_sem; struct say_channel *say_channel;