locking/barriers: Convert users of lockless_dereference() to READ_ONCE()
READ_ONCE() now has an implicit smp_read_barrier_depends() call, so it can be used instead of lockless_dereference() without any change in semantics. Signed-off-by: Will Deacon <will.deacon@arm.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1508840570-22169-4-git-send-email-will.deacon@arm.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
@@ -366,7 +366,7 @@ static struct pgpath *choose_path_in_pg(struct multipath *m,
|
||||
|
||||
pgpath = path_to_pgpath(path);
|
||||
|
||||
if (unlikely(lockless_dereference(m->current_pg) != pg)) {
|
||||
if (unlikely(READ_ONCE(m->current_pg) != pg)) {
|
||||
/* Only update current_pgpath if pg changed */
|
||||
spin_lock_irqsave(&m->lock, flags);
|
||||
m->current_pgpath = pgpath;
|
||||
@@ -390,7 +390,7 @@ static struct pgpath *choose_pgpath(struct multipath *m, size_t nr_bytes)
|
||||
}
|
||||
|
||||
/* Were we instructed to switch PG? */
|
||||
if (lockless_dereference(m->next_pg)) {
|
||||
if (READ_ONCE(m->next_pg)) {
|
||||
spin_lock_irqsave(&m->lock, flags);
|
||||
pg = m->next_pg;
|
||||
if (!pg) {
|
||||
@@ -406,7 +406,7 @@ static struct pgpath *choose_pgpath(struct multipath *m, size_t nr_bytes)
|
||||
|
||||
/* Don't change PG until it has no remaining paths */
|
||||
check_current_pg:
|
||||
pg = lockless_dereference(m->current_pg);
|
||||
pg = READ_ONCE(m->current_pg);
|
||||
if (pg) {
|
||||
pgpath = choose_path_in_pg(m, pg, nr_bytes);
|
||||
if (!IS_ERR_OR_NULL(pgpath))
|
||||
@@ -473,7 +473,7 @@ static int multipath_clone_and_map(struct dm_target *ti, struct request *rq,
|
||||
struct request *clone;
|
||||
|
||||
/* Do we need to select a new pgpath? */
|
||||
pgpath = lockless_dereference(m->current_pgpath);
|
||||
pgpath = READ_ONCE(m->current_pgpath);
|
||||
if (!pgpath || !test_bit(MPATHF_QUEUE_IO, &m->flags))
|
||||
pgpath = choose_pgpath(m, nr_bytes);
|
||||
|
||||
@@ -535,7 +535,7 @@ static int __multipath_map_bio(struct multipath *m, struct bio *bio, struct dm_m
|
||||
bool queue_io;
|
||||
|
||||
/* Do we need to select a new pgpath? */
|
||||
pgpath = lockless_dereference(m->current_pgpath);
|
||||
pgpath = READ_ONCE(m->current_pgpath);
|
||||
queue_io = test_bit(MPATHF_QUEUE_IO, &m->flags);
|
||||
if (!pgpath || !queue_io)
|
||||
pgpath = choose_pgpath(m, nr_bytes);
|
||||
@@ -1804,7 +1804,7 @@ static int multipath_prepare_ioctl(struct dm_target *ti,
|
||||
struct pgpath *current_pgpath;
|
||||
int r;
|
||||
|
||||
current_pgpath = lockless_dereference(m->current_pgpath);
|
||||
current_pgpath = READ_ONCE(m->current_pgpath);
|
||||
if (!current_pgpath)
|
||||
current_pgpath = choose_pgpath(m, 0);
|
||||
|
||||
@@ -1826,7 +1826,7 @@ static int multipath_prepare_ioctl(struct dm_target *ti,
|
||||
}
|
||||
|
||||
if (r == -ENOTCONN) {
|
||||
if (!lockless_dereference(m->current_pg)) {
|
||||
if (!READ_ONCE(m->current_pg)) {
|
||||
/* Path status changed, redo selection */
|
||||
(void) choose_pgpath(m, 0);
|
||||
}
|
||||
@@ -1895,9 +1895,9 @@ static int multipath_busy(struct dm_target *ti)
|
||||
return (m->queue_mode != DM_TYPE_MQ_REQUEST_BASED);
|
||||
|
||||
/* Guess which priority_group will be used at next mapping time */
|
||||
pg = lockless_dereference(m->current_pg);
|
||||
next_pg = lockless_dereference(m->next_pg);
|
||||
if (unlikely(!lockless_dereference(m->current_pgpath) && next_pg))
|
||||
pg = READ_ONCE(m->current_pg);
|
||||
next_pg = READ_ONCE(m->next_pg);
|
||||
if (unlikely(!READ_ONCE(m->current_pgpath) && next_pg))
|
||||
pg = next_pg;
|
||||
|
||||
if (!pg) {
|
||||
|
Reference in New Issue
Block a user