Merge branch 'for-linus' of git://brick.kernel.dk/data/git/linux-2.6-block
This commit is contained in:
commit
0ee40c6628
|
@ -97,7 +97,6 @@ static struct elevator_type *elevator_find(const char *name)
|
||||||
struct elevator_type *e = NULL;
|
struct elevator_type *e = NULL;
|
||||||
struct list_head *entry;
|
struct list_head *entry;
|
||||||
|
|
||||||
spin_lock_irq(&elv_list_lock);
|
|
||||||
list_for_each(entry, &elv_list) {
|
list_for_each(entry, &elv_list) {
|
||||||
struct elevator_type *__e;
|
struct elevator_type *__e;
|
||||||
|
|
||||||
|
@ -108,7 +107,6 @@ static struct elevator_type *elevator_find(const char *name)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spin_unlock_irq(&elv_list_lock);
|
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
@ -120,12 +118,15 @@ static void elevator_put(struct elevator_type *e)
|
||||||
|
|
||||||
static struct elevator_type *elevator_get(const char *name)
|
static struct elevator_type *elevator_get(const char *name)
|
||||||
{
|
{
|
||||||
struct elevator_type *e = elevator_find(name);
|
struct elevator_type *e;
|
||||||
|
|
||||||
if (!e)
|
spin_lock_irq(&elv_list_lock);
|
||||||
return NULL;
|
|
||||||
if (!try_module_get(e->elevator_owner))
|
e = elevator_find(name);
|
||||||
return NULL;
|
if (e && !try_module_get(e->elevator_owner))
|
||||||
|
e = NULL;
|
||||||
|
|
||||||
|
spin_unlock_irq(&elv_list_lock);
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
@ -153,11 +154,15 @@ static char chosen_elevator[16];
|
||||||
|
|
||||||
static void elevator_setup_default(void)
|
static void elevator_setup_default(void)
|
||||||
{
|
{
|
||||||
|
struct elevator_type *e;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* check if default is set and exists
|
* check if default is set and exists
|
||||||
*/
|
*/
|
||||||
if (chosen_elevator[0] && elevator_find(chosen_elevator))
|
if (chosen_elevator[0] && (e = elevator_get(chosen_elevator))) {
|
||||||
|
elevator_put(e);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_IOSCHED_AS)
|
#if defined(CONFIG_IOSCHED_AS)
|
||||||
strcpy(chosen_elevator, "anticipatory");
|
strcpy(chosen_elevator, "anticipatory");
|
||||||
|
@ -555,10 +560,9 @@ void elv_unregister_queue(struct request_queue *q)
|
||||||
|
|
||||||
int elv_register(struct elevator_type *e)
|
int elv_register(struct elevator_type *e)
|
||||||
{
|
{
|
||||||
|
spin_lock_irq(&elv_list_lock);
|
||||||
if (elevator_find(e->elevator_name))
|
if (elevator_find(e->elevator_name))
|
||||||
BUG();
|
BUG();
|
||||||
|
|
||||||
spin_lock_irq(&elv_list_lock);
|
|
||||||
list_add_tail(&e->list, &elv_list);
|
list_add_tail(&e->list, &elv_list);
|
||||||
spin_unlock_irq(&elv_list_lock);
|
spin_unlock_irq(&elv_list_lock);
|
||||||
|
|
||||||
|
|
|
@ -2433,13 +2433,15 @@ void disk_round_stats(struct gendisk *disk)
|
||||||
{
|
{
|
||||||
unsigned long now = jiffies;
|
unsigned long now = jiffies;
|
||||||
|
|
||||||
__disk_stat_add(disk, time_in_queue,
|
if (now == disk->stamp)
|
||||||
disk->in_flight * (now - disk->stamp));
|
return;
|
||||||
disk->stamp = now;
|
|
||||||
|
|
||||||
if (disk->in_flight)
|
if (disk->in_flight) {
|
||||||
__disk_stat_add(disk, io_ticks, (now - disk->stamp_idle));
|
__disk_stat_add(disk, time_in_queue,
|
||||||
disk->stamp_idle = now;
|
disk->in_flight * (now - disk->stamp));
|
||||||
|
__disk_stat_add(disk, io_ticks, (now - disk->stamp));
|
||||||
|
}
|
||||||
|
disk->stamp = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -430,7 +430,7 @@ void del_gendisk(struct gendisk *disk)
|
||||||
disk->flags &= ~GENHD_FL_UP;
|
disk->flags &= ~GENHD_FL_UP;
|
||||||
unlink_gendisk(disk);
|
unlink_gendisk(disk);
|
||||||
disk_stat_set_all(disk, 0);
|
disk_stat_set_all(disk, 0);
|
||||||
disk->stamp = disk->stamp_idle = 0;
|
disk->stamp = 0;
|
||||||
|
|
||||||
devfs_remove_disk(disk);
|
devfs_remove_disk(disk);
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,7 @@ struct gendisk {
|
||||||
int policy;
|
int policy;
|
||||||
|
|
||||||
atomic_t sync_io; /* RAID */
|
atomic_t sync_io; /* RAID */
|
||||||
unsigned long stamp, stamp_idle;
|
unsigned long stamp;
|
||||||
int in_flight;
|
int in_flight;
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
struct disk_stats *dkstats;
|
struct disk_stats *dkstats;
|
||||||
|
|
Loading…
Reference in New Issue