Added BFQ IO Scheduler
/block/cfq-iosched.c
blob:aa1e9535e3588472803ea079acc293238d60b803 -> blob:e167521bc53a34d62f3e20c78a690d1b1f01a9f3
--- block/cfq-iosched.c
+++ block/cfq-iosched.c
@@ -1680,7 +1680,6 @@ static void changed_ioprio(struct io_con
static void cfq_ioc_set_ioprio(struct io_context *ioc)
{
call_for_each_cic(ioc, changed_ioprio);
- ioc->ioprio_changed = 0;
}
static void cfq_init_cfqq(struct cfq_data *cfqd, struct cfq_queue *cfqq,
@@ -1928,8 +1927,13 @@ cfq_get_io_context(struct cfq_data *cfqd
goto err_free;
out:
- smp_read_barrier_depends();
- if (unlikely(ioc->ioprio_changed))
+ /*
+ * test_and_clear_bit() implies a memory barrier, paired with
+ * the wmb() in fs/ioprio.c, so the value seen for ioprio is the
+ * new one.
+ */
+ if (unlikely(test_and_clear_bit(IOC_CFQ_IOPRIO_CHANGED,
+ ioc->ioprio_changed)))
cfq_ioc_set_ioprio(ioc);
return cic;