diff --git a/[refs] b/[refs] index ee1defc04b50..7735baf9caa2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7e5b95f1baaabd93271c7b27b7e3c803a9aaa0dd +refs/heads/master: 6c5ab376b0b579cf58f9217dcd7a94d817f7a043 diff --git a/trunk/drivers/md/dm-mpath.c b/trunk/drivers/md/dm-mpath.c index 3d7f4923cd13..4840733cd903 100644 --- a/trunk/drivers/md/dm-mpath.c +++ b/trunk/drivers/md/dm-mpath.c @@ -441,13 +441,13 @@ static void process_queued_ios(struct work_struct *work) __choose_pgpath(m); pgpath = m->current_pgpath; + m->pgpath_to_activate = m->current_pgpath; if ((pgpath && !m->queue_io) || (!pgpath && !m->queue_if_no_path)) must_queue = 0; - if (m->pg_init_required && !m->pg_init_in_progress && pgpath) { - m->pgpath_to_activate = pgpath; + if (m->pg_init_required && !m->pg_init_in_progress) { m->pg_init_count++; m->pg_init_required = 0; m->pg_init_in_progress = 1; @@ -708,10 +708,6 @@ static int parse_hw_handler(struct arg_set *as, struct multipath *m) m->hw_handler_name = NULL; return -EINVAL; } - - if (hw_argc > 1) - DMWARN("Ignoring user-specified arguments for " - "hardware handler \"%s\"", m->hw_handler_name); consume(as, hw_argc - 1); return 0; diff --git a/trunk/drivers/md/dm-raid1.c b/trunk/drivers/md/dm-raid1.c index ec43f9fa4b2a..9d7b53ed75b2 100644 --- a/trunk/drivers/md/dm-raid1.c +++ b/trunk/drivers/md/dm-raid1.c @@ -1032,7 +1032,6 @@ static void mirror_dtr(struct dm_target *ti) del_timer_sync(&ms->timer); flush_workqueue(ms->kmirrord_wq); - flush_scheduled_work(); dm_kcopyd_client_destroy(ms->kcopyd_client); destroy_workqueue(ms->kmirrord_wq); free_context(ms, ti, ms->nr_mirrors); diff --git a/trunk/drivers/md/dm-stripe.c b/trunk/drivers/md/dm-stripe.c index 9e4ef88d421e..a2d068dbe9e2 100644 --- a/trunk/drivers/md/dm-stripe.c +++ b/trunk/drivers/md/dm-stripe.c @@ -320,10 +320,8 @@ int __init dm_stripe_init(void) int r; r = dm_register_target(&stripe_target); - if (r < 0) { + if (r < 0) DMWARN("target registration failed"); - return r; - } kstriped = create_singlethread_workqueue("kstriped"); if (!kstriped) { diff --git a/trunk/drivers/md/dm.c b/trunk/drivers/md/dm.c index c99e4728ff41..6963ad148408 100644 --- a/trunk/drivers/md/dm.c +++ b/trunk/drivers/md/dm.c @@ -375,7 +375,7 @@ static void start_io_acct(struct dm_io *io) dm_disk(md)->part0.in_flight = atomic_inc_return(&md->pending); } -static void end_io_acct(struct dm_io *io) +static int end_io_acct(struct dm_io *io) { struct mapped_device *md = io->md; struct bio *bio = io->bio; @@ -391,9 +391,7 @@ static void end_io_acct(struct dm_io *io) dm_disk(md)->part0.in_flight = pending = atomic_dec_return(&md->pending); - /* nudge anyone waiting on suspend queue */ - if (!pending) - wake_up(&md->wait); + return !pending; } /* @@ -501,7 +499,9 @@ static void dec_pending(struct dm_io *io, int error) spin_unlock_irqrestore(&io->md->pushback_lock, flags); } - end_io_acct(io); + if (end_io_acct(io)) + /* nudge anyone waiting on suspend queue */ + wake_up(&io->md->wait); if (io->error != DM_ENDIO_REQUEUE) { blk_add_trace_bio(io->md->queue, io->bio, @@ -937,24 +937,16 @@ static void dm_unplug_all(struct request_queue *q) static int dm_any_congested(void *congested_data, int bdi_bits) { - int r = bdi_bits; - struct mapped_device *md = congested_data; - struct dm_table *map; - - atomic_inc(&md->pending); - - if (!test_bit(DMF_BLOCK_IO, &md->flags)) { - map = dm_get_table(md); - if (map) { - r = dm_table_any_congested(map, bdi_bits); - dm_table_put(map); - } - } + int r; + struct mapped_device *md = (struct mapped_device *) congested_data; + struct dm_table *map = dm_get_table(md); - if (!atomic_dec_return(&md->pending)) - /* nudge anyone waiting on suspend queue */ - wake_up(&md->wait); + if (!map || test_bit(DMF_BLOCK_IO, &md->flags)) + r = bdi_bits; + else + r = dm_table_any_congested(map, bdi_bits); + dm_table_put(map); return r; } diff --git a/trunk/drivers/usb/misc/vstusb.c b/trunk/drivers/usb/misc/vstusb.c index 8648470c81ca..63dff9ba73c5 100644 --- a/trunk/drivers/usb/misc/vstusb.c +++ b/trunk/drivers/usb/misc/vstusb.c @@ -620,7 +620,7 @@ static long vstusb_ioctl(struct file *file, unsigned int cmd, unsigned long arg) __func__); retval = -EFAULT; } else { - dev_dbg(&dev->dev, "%s: recv %d bytes from pipe %d\n", + dev_dbg(&dev->dev, "%s: recv %zd bytes from pipe %d\n", __func__, usb_data.count, usb_data.pipe); }