Loading drivers/md/dm-mpath.c +15 −21 Original line number Diff line number Diff line Loading @@ -612,6 +612,14 @@ static void process_queued_bios(struct work_struct *work) blk_finish_plug(&plug); } static void assign_bit(bool value, long nr, unsigned long *addr) { if (value) set_bit(nr, addr); else clear_bit(nr, addr); } /* * If we run out of usable paths, should we queue I/O or error it? */ Loading @@ -621,23 +629,11 @@ static int queue_if_no_path(struct multipath *m, bool queue_if_no_path, unsigned long flags; spin_lock_irqsave(&m->lock, flags); if (save_old_value) { if (test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) set_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags); else clear_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags); } else { if (queue_if_no_path) set_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags); else clear_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags); } if (queue_if_no_path || dm_noflush_suspending(m->ti)) set_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags); else clear_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags); assign_bit((save_old_value && test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) || (!save_old_value && queue_if_no_path), MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags); assign_bit(queue_if_no_path || dm_noflush_suspending(m->ti), MPATHF_QUEUE_IF_NO_PATH, &m->flags); spin_unlock_irqrestore(&m->lock, flags); if (!queue_if_no_path) { Loading Loading @@ -1589,10 +1585,8 @@ static void multipath_resume(struct dm_target *ti) unsigned long flags; spin_lock_irqsave(&m->lock, flags); if (test_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags)) set_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags); else clear_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags); assign_bit(test_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags), MPATHF_QUEUE_IF_NO_PATH, &m->flags); spin_unlock_irqrestore(&m->lock, flags); } Loading Loading
drivers/md/dm-mpath.c +15 −21 Original line number Diff line number Diff line Loading @@ -612,6 +612,14 @@ static void process_queued_bios(struct work_struct *work) blk_finish_plug(&plug); } static void assign_bit(bool value, long nr, unsigned long *addr) { if (value) set_bit(nr, addr); else clear_bit(nr, addr); } /* * If we run out of usable paths, should we queue I/O or error it? */ Loading @@ -621,23 +629,11 @@ static int queue_if_no_path(struct multipath *m, bool queue_if_no_path, unsigned long flags; spin_lock_irqsave(&m->lock, flags); if (save_old_value) { if (test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) set_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags); else clear_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags); } else { if (queue_if_no_path) set_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags); else clear_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags); } if (queue_if_no_path || dm_noflush_suspending(m->ti)) set_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags); else clear_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags); assign_bit((save_old_value && test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) || (!save_old_value && queue_if_no_path), MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags); assign_bit(queue_if_no_path || dm_noflush_suspending(m->ti), MPATHF_QUEUE_IF_NO_PATH, &m->flags); spin_unlock_irqrestore(&m->lock, flags); if (!queue_if_no_path) { Loading Loading @@ -1589,10 +1585,8 @@ static void multipath_resume(struct dm_target *ti) unsigned long flags; spin_lock_irqsave(&m->lock, flags); if (test_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags)) set_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags); else clear_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags); assign_bit(test_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags), MPATHF_QUEUE_IF_NO_PATH, &m->flags); spin_unlock_irqrestore(&m->lock, flags); } Loading