md - remove old plugging code.
md has some plugging infrastructure for RAID5 to use because the normal plugging infrastructure required a 'request_queue', and when called from dm, RAID5 doesn't have one of those available. This relied on the ->unplug_fn callback which doesn't exist any more. So remove all of that code, both in md and raid5. Subsequent patches with restore the plugging functionality. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
af1db72d8b
commit
482c083492
|
@ -445,50 +445,6 @@ void md_flush_request(mddev_t *mddev, struct bio *bio)
|
|||
}
|
||||
EXPORT_SYMBOL(md_flush_request);
|
||||
|
||||
/* Support for plugging.
|
||||
* This mirrors the plugging support in request_queue, but does not
|
||||
* require having a whole queue
|
||||
*/
|
||||
static void plugger_work(struct work_struct *work)
|
||||
{
|
||||
struct plug_handle *plug =
|
||||
container_of(work, struct plug_handle, unplug_work);
|
||||
plug->unplug_fn(plug);
|
||||
}
|
||||
static void plugger_timeout(unsigned long data)
|
||||
{
|
||||
struct plug_handle *plug = (void *)data;
|
||||
kblockd_schedule_work(NULL, &plug->unplug_work);
|
||||
}
|
||||
void plugger_init(struct plug_handle *plug,
|
||||
void (*unplug_fn)(struct plug_handle *))
|
||||
{
|
||||
plug->unplug_flag = 0;
|
||||
plug->unplug_fn = unplug_fn;
|
||||
init_timer(&plug->unplug_timer);
|
||||
plug->unplug_timer.function = plugger_timeout;
|
||||
plug->unplug_timer.data = (unsigned long)plug;
|
||||
INIT_WORK(&plug->unplug_work, plugger_work);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(plugger_init);
|
||||
|
||||
void plugger_set_plug(struct plug_handle *plug)
|
||||
{
|
||||
if (!test_and_set_bit(PLUGGED_FLAG, &plug->unplug_flag))
|
||||
mod_timer(&plug->unplug_timer, jiffies + msecs_to_jiffies(3)+1);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(plugger_set_plug);
|
||||
|
||||
int plugger_remove_plug(struct plug_handle *plug)
|
||||
{
|
||||
if (test_and_clear_bit(PLUGGED_FLAG, &plug->unplug_flag)) {
|
||||
del_timer(&plug->unplug_timer);
|
||||
return 1;
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(plugger_remove_plug);
|
||||
|
||||
|
||||
static inline mddev_t *mddev_get(mddev_t *mddev)
|
||||
{
|
||||
|
@ -4723,7 +4679,6 @@ static void md_clean(mddev_t *mddev)
|
|||
mddev->bitmap_info.chunksize = 0;
|
||||
mddev->bitmap_info.daemon_sleep = 0;
|
||||
mddev->bitmap_info.max_write_behind = 0;
|
||||
mddev->plug = NULL;
|
||||
}
|
||||
|
||||
static void __md_stop_writes(mddev_t *mddev)
|
||||
|
@ -6688,12 +6643,6 @@ int md_allow_write(mddev_t *mddev)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(md_allow_write);
|
||||
|
||||
void md_unplug(mddev_t *mddev)
|
||||
{
|
||||
if (mddev->plug)
|
||||
mddev->plug->unplug_fn(mddev->plug);
|
||||
}
|
||||
|
||||
#define SYNC_MARKS 10
|
||||
#define SYNC_MARK_STEP (3*HZ)
|
||||
void md_do_sync(mddev_t *mddev)
|
||||
|
|
|
@ -29,26 +29,6 @@
|
|||
typedef struct mddev_s mddev_t;
|
||||
typedef struct mdk_rdev_s mdk_rdev_t;
|
||||
|
||||
/* generic plugging support - like that provided with request_queue,
|
||||
* but does not require a request_queue
|
||||
*/
|
||||
struct plug_handle {
|
||||
void (*unplug_fn)(struct plug_handle *);
|
||||
struct timer_list unplug_timer;
|
||||
struct work_struct unplug_work;
|
||||
unsigned long unplug_flag;
|
||||
};
|
||||
#define PLUGGED_FLAG 1
|
||||
void plugger_init(struct plug_handle *plug,
|
||||
void (*unplug_fn)(struct plug_handle *));
|
||||
void plugger_set_plug(struct plug_handle *plug);
|
||||
int plugger_remove_plug(struct plug_handle *plug);
|
||||
static inline void plugger_flush(struct plug_handle *plug)
|
||||
{
|
||||
del_timer_sync(&plug->unplug_timer);
|
||||
cancel_work_sync(&plug->unplug_work);
|
||||
}
|
||||
|
||||
/*
|
||||
* MD's 'extended' device
|
||||
*/
|
||||
|
@ -336,7 +316,6 @@ struct mddev_s
|
|||
struct list_head all_mddevs;
|
||||
|
||||
struct attribute_group *to_remove;
|
||||
struct plug_handle *plug; /* if used by personality */
|
||||
|
||||
struct bio_set *bio_set;
|
||||
|
||||
|
@ -516,7 +495,6 @@ extern int md_integrity_register(mddev_t *mddev);
|
|||
extern void md_integrity_add_rdev(mdk_rdev_t *rdev, mddev_t *mddev);
|
||||
extern int strict_strtoul_scaled(const char *cp, unsigned long *res, int scale);
|
||||
extern void restore_bitmap_write_access(struct file *file);
|
||||
extern void md_unplug(mddev_t *mddev);
|
||||
|
||||
extern void mddev_init(mddev_t *mddev);
|
||||
extern int md_run(mddev_t *mddev);
|
||||
|
|
|
@ -199,14 +199,12 @@ static void __release_stripe(raid5_conf_t *conf, struct stripe_head *sh)
|
|||
BUG_ON(!list_empty(&sh->lru));
|
||||
BUG_ON(atomic_read(&conf->active_stripes)==0);
|
||||
if (test_bit(STRIPE_HANDLE, &sh->state)) {
|
||||
if (test_bit(STRIPE_DELAYED, &sh->state)) {
|
||||
if (test_bit(STRIPE_DELAYED, &sh->state))
|
||||
list_add_tail(&sh->lru, &conf->delayed_list);
|
||||
plugger_set_plug(&conf->plug);
|
||||
} else if (test_bit(STRIPE_BIT_DELAY, &sh->state) &&
|
||||
sh->bm_seq - conf->seq_write > 0) {
|
||||
else if (test_bit(STRIPE_BIT_DELAY, &sh->state) &&
|
||||
sh->bm_seq - conf->seq_write > 0)
|
||||
list_add_tail(&sh->lru, &conf->bitmap_list);
|
||||
plugger_set_plug(&conf->plug);
|
||||
} else {
|
||||
else {
|
||||
clear_bit(STRIPE_BIT_DELAY, &sh->state);
|
||||
list_add_tail(&sh->lru, &conf->handle_list);
|
||||
}
|
||||
|
@ -461,7 +459,7 @@ get_active_stripe(raid5_conf_t *conf, sector_t sector,
|
|||
< (conf->max_nr_stripes *3/4)
|
||||
|| !conf->inactive_blocked),
|
||||
conf->device_lock,
|
||||
md_raid5_kick_device(conf));
|
||||
md_wakeup_thread(conf->mddev->thread));
|
||||
conf->inactive_blocked = 0;
|
||||
} else
|
||||
init_stripe(sh, sector, previous);
|
||||
|
@ -1470,7 +1468,7 @@ static int resize_stripes(raid5_conf_t *conf, int newsize)
|
|||
wait_event_lock_irq(conf->wait_for_stripe,
|
||||
!list_empty(&conf->inactive_list),
|
||||
conf->device_lock,
|
||||
blk_flush_plug(current));
|
||||
);
|
||||
osh = get_free_stripe(conf);
|
||||
spin_unlock_irq(&conf->device_lock);
|
||||
atomic_set(&nsh->count, 1);
|
||||
|
@ -3623,8 +3621,7 @@ static void raid5_activate_delayed(raid5_conf_t *conf)
|
|||
atomic_inc(&conf->preread_active_stripes);
|
||||
list_add_tail(&sh->lru, &conf->hold_list);
|
||||
}
|
||||
} else
|
||||
plugger_set_plug(&conf->plug);
|
||||
}
|
||||
}
|
||||
|
||||
static void activate_bit_delay(raid5_conf_t *conf)
|
||||
|
@ -3641,21 +3638,6 @@ static void activate_bit_delay(raid5_conf_t *conf)
|
|||
}
|
||||
}
|
||||
|
||||
void md_raid5_kick_device(raid5_conf_t *conf)
|
||||
{
|
||||
blk_flush_plug(current);
|
||||
raid5_activate_delayed(conf);
|
||||
md_wakeup_thread(conf->mddev->thread);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(md_raid5_kick_device);
|
||||
|
||||
static void raid5_unplug(struct plug_handle *plug)
|
||||
{
|
||||
raid5_conf_t *conf = container_of(plug, raid5_conf_t, plug);
|
||||
|
||||
md_raid5_kick_device(conf);
|
||||
}
|
||||
|
||||
int md_raid5_congested(mddev_t *mddev, int bits)
|
||||
{
|
||||
raid5_conf_t *conf = mddev->private;
|
||||
|
@ -4057,7 +4039,7 @@ static int make_request(mddev_t *mddev, struct bio * bi)
|
|||
* add failed due to overlap. Flush everything
|
||||
* and wait a while
|
||||
*/
|
||||
md_raid5_kick_device(conf);
|
||||
md_wakeup_thread(mddev->thread);
|
||||
release_stripe(sh);
|
||||
schedule();
|
||||
goto retry;
|
||||
|
@ -5144,8 +5126,6 @@ static int run(mddev_t *mddev)
|
|||
mdname(mddev));
|
||||
md_set_array_sectors(mddev, raid5_size(mddev, 0, 0));
|
||||
|
||||
plugger_init(&conf->plug, raid5_unplug);
|
||||
mddev->plug = &conf->plug;
|
||||
if (mddev->queue) {
|
||||
int chunk_size;
|
||||
/* read-ahead size must cover two whole stripes, which
|
||||
|
@ -5195,7 +5175,6 @@ static int stop(mddev_t *mddev)
|
|||
mddev->thread = NULL;
|
||||
if (mddev->queue)
|
||||
mddev->queue->backing_dev_info.congested_fn = NULL;
|
||||
plugger_flush(&conf->plug); /* the unplug fn references 'conf'*/
|
||||
free_conf(conf);
|
||||
mddev->private = NULL;
|
||||
mddev->to_remove = &raid5_attrs_group;
|
||||
|
|
|
@ -400,8 +400,6 @@ struct raid5_private_data {
|
|||
* Cleared when a sync completes.
|
||||
*/
|
||||
|
||||
struct plug_handle plug;
|
||||
|
||||
/* per cpu variables */
|
||||
struct raid5_percpu {
|
||||
struct page *spare_page; /* Used when checking P/Q in raid6 */
|
||||
|
|
Loading…
Reference in New Issue