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);
|
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)
|
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.chunksize = 0;
|
||||||
mddev->bitmap_info.daemon_sleep = 0;
|
mddev->bitmap_info.daemon_sleep = 0;
|
||||||
mddev->bitmap_info.max_write_behind = 0;
|
mddev->bitmap_info.max_write_behind = 0;
|
||||||
mddev->plug = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __md_stop_writes(mddev_t *mddev)
|
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);
|
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_MARKS 10
|
||||||
#define SYNC_MARK_STEP (3*HZ)
|
#define SYNC_MARK_STEP (3*HZ)
|
||||||
void md_do_sync(mddev_t *mddev)
|
void md_do_sync(mddev_t *mddev)
|
||||||
|
|
|
@ -29,26 +29,6 @@
|
||||||
typedef struct mddev_s mddev_t;
|
typedef struct mddev_s mddev_t;
|
||||||
typedef struct mdk_rdev_s mdk_rdev_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
|
* MD's 'extended' device
|
||||||
*/
|
*/
|
||||||
|
@ -336,7 +316,6 @@ struct mddev_s
|
||||||
struct list_head all_mddevs;
|
struct list_head all_mddevs;
|
||||||
|
|
||||||
struct attribute_group *to_remove;
|
struct attribute_group *to_remove;
|
||||||
struct plug_handle *plug; /* if used by personality */
|
|
||||||
|
|
||||||
struct bio_set *bio_set;
|
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 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 int strict_strtoul_scaled(const char *cp, unsigned long *res, int scale);
|
||||||
extern void restore_bitmap_write_access(struct file *file);
|
extern void restore_bitmap_write_access(struct file *file);
|
||||||
extern void md_unplug(mddev_t *mddev);
|
|
||||||
|
|
||||||
extern void mddev_init(mddev_t *mddev);
|
extern void mddev_init(mddev_t *mddev);
|
||||||
extern int md_run(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(!list_empty(&sh->lru));
|
||||||
BUG_ON(atomic_read(&conf->active_stripes)==0);
|
BUG_ON(atomic_read(&conf->active_stripes)==0);
|
||||||
if (test_bit(STRIPE_HANDLE, &sh->state)) {
|
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);
|
list_add_tail(&sh->lru, &conf->delayed_list);
|
||||||
plugger_set_plug(&conf->plug);
|
else if (test_bit(STRIPE_BIT_DELAY, &sh->state) &&
|
||||||
} else if (test_bit(STRIPE_BIT_DELAY, &sh->state) &&
|
sh->bm_seq - conf->seq_write > 0)
|
||||||
sh->bm_seq - conf->seq_write > 0) {
|
|
||||||
list_add_tail(&sh->lru, &conf->bitmap_list);
|
list_add_tail(&sh->lru, &conf->bitmap_list);
|
||||||
plugger_set_plug(&conf->plug);
|
else {
|
||||||
} else {
|
|
||||||
clear_bit(STRIPE_BIT_DELAY, &sh->state);
|
clear_bit(STRIPE_BIT_DELAY, &sh->state);
|
||||||
list_add_tail(&sh->lru, &conf->handle_list);
|
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->max_nr_stripes *3/4)
|
||||||
|| !conf->inactive_blocked),
|
|| !conf->inactive_blocked),
|
||||||
conf->device_lock,
|
conf->device_lock,
|
||||||
md_raid5_kick_device(conf));
|
md_wakeup_thread(conf->mddev->thread));
|
||||||
conf->inactive_blocked = 0;
|
conf->inactive_blocked = 0;
|
||||||
} else
|
} else
|
||||||
init_stripe(sh, sector, previous);
|
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,
|
wait_event_lock_irq(conf->wait_for_stripe,
|
||||||
!list_empty(&conf->inactive_list),
|
!list_empty(&conf->inactive_list),
|
||||||
conf->device_lock,
|
conf->device_lock,
|
||||||
blk_flush_plug(current));
|
);
|
||||||
osh = get_free_stripe(conf);
|
osh = get_free_stripe(conf);
|
||||||
spin_unlock_irq(&conf->device_lock);
|
spin_unlock_irq(&conf->device_lock);
|
||||||
atomic_set(&nsh->count, 1);
|
atomic_set(&nsh->count, 1);
|
||||||
|
@ -3623,8 +3621,7 @@ static void raid5_activate_delayed(raid5_conf_t *conf)
|
||||||
atomic_inc(&conf->preread_active_stripes);
|
atomic_inc(&conf->preread_active_stripes);
|
||||||
list_add_tail(&sh->lru, &conf->hold_list);
|
list_add_tail(&sh->lru, &conf->hold_list);
|
||||||
}
|
}
|
||||||
} else
|
}
|
||||||
plugger_set_plug(&conf->plug);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void activate_bit_delay(raid5_conf_t *conf)
|
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)
|
int md_raid5_congested(mddev_t *mddev, int bits)
|
||||||
{
|
{
|
||||||
raid5_conf_t *conf = mddev->private;
|
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
|
* add failed due to overlap. Flush everything
|
||||||
* and wait a while
|
* and wait a while
|
||||||
*/
|
*/
|
||||||
md_raid5_kick_device(conf);
|
md_wakeup_thread(mddev->thread);
|
||||||
release_stripe(sh);
|
release_stripe(sh);
|
||||||
schedule();
|
schedule();
|
||||||
goto retry;
|
goto retry;
|
||||||
|
@ -5144,8 +5126,6 @@ static int run(mddev_t *mddev)
|
||||||
mdname(mddev));
|
mdname(mddev));
|
||||||
md_set_array_sectors(mddev, raid5_size(mddev, 0, 0));
|
md_set_array_sectors(mddev, raid5_size(mddev, 0, 0));
|
||||||
|
|
||||||
plugger_init(&conf->plug, raid5_unplug);
|
|
||||||
mddev->plug = &conf->plug;
|
|
||||||
if (mddev->queue) {
|
if (mddev->queue) {
|
||||||
int chunk_size;
|
int chunk_size;
|
||||||
/* read-ahead size must cover two whole stripes, which
|
/* read-ahead size must cover two whole stripes, which
|
||||||
|
@ -5195,7 +5175,6 @@ static int stop(mddev_t *mddev)
|
||||||
mddev->thread = NULL;
|
mddev->thread = NULL;
|
||||||
if (mddev->queue)
|
if (mddev->queue)
|
||||||
mddev->queue->backing_dev_info.congested_fn = NULL;
|
mddev->queue->backing_dev_info.congested_fn = NULL;
|
||||||
plugger_flush(&conf->plug); /* the unplug fn references 'conf'*/
|
|
||||||
free_conf(conf);
|
free_conf(conf);
|
||||||
mddev->private = NULL;
|
mddev->private = NULL;
|
||||||
mddev->to_remove = &raid5_attrs_group;
|
mddev->to_remove = &raid5_attrs_group;
|
||||||
|
|
|
@ -400,8 +400,6 @@ struct raid5_private_data {
|
||||||
* Cleared when a sync completes.
|
* Cleared when a sync completes.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct plug_handle plug;
|
|
||||||
|
|
||||||
/* per cpu variables */
|
/* per cpu variables */
|
||||||
struct raid5_percpu {
|
struct raid5_percpu {
|
||||||
struct page *spare_page; /* Used when checking P/Q in raid6 */
|
struct page *spare_page; /* Used when checking P/Q in raid6 */
|
||||||
|
|
Loading…
Reference in New Issue