Commit a7637069 authored by Jens Axboe's avatar Jens Axboe
Browse files

Merge branch 'for-next' of...

Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/colyli/linux-bcache into for-5.18/drivers

Pull bcache updates from Coly:

"We have 2 patches for Linux v5.18, both of them are from Mingzhe Zou.
 The first patch improves bcache initialization speed by avoid
 unnecessary cost of cache consistency, the second one fixes a potential
 NULL pointer deference in bcache initialization time."

* 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/colyli/linux-bcache:
  bcache: fixup multiple threads crash
  bcache: fixup bcache_dev_sectors_dirty_add() multithreaded CPU false sharing
parents 13d4ef0f 887554ab
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -2060,9 +2060,11 @@ int bch_btree_check(struct cache_set *c)
		}
	}

	/*
	 * Must wait for all threads to stop.
	 */
	wait_event_interruptible(check_state->wait,
				 atomic_read(&check_state->started) == 0 ||
				  test_bit(CACHE_SET_IO_DISABLE, &c->flags));
				 atomic_read(&check_state->started) == 0);

	for (i = 0; i < check_state->total_threads; i++) {
		if (check_state->infos[i].result) {
+11 −6
Original line number Diff line number Diff line
@@ -585,10 +585,13 @@ void bcache_dev_sectors_dirty_add(struct cache_set *c, unsigned int inode,

		sectors_dirty = atomic_add_return(s,
					d->stripe_sectors_dirty + stripe);
		if (sectors_dirty == d->stripe_size)
		if (sectors_dirty == d->stripe_size) {
			if (!test_bit(stripe, d->full_dirty_stripes))
				set_bit(stripe, d->full_dirty_stripes);
		else
		} else {
			if (test_bit(stripe, d->full_dirty_stripes))
				clear_bit(stripe, d->full_dirty_stripes);
		}

		nr_sectors -= s;
		stripe_offset = 0;
@@ -998,9 +1001,11 @@ void bch_sectors_dirty_init(struct bcache_device *d)
		}
	}

	/*
	 * Must wait for all threads to stop.
	 */
	wait_event_interruptible(state->wait,
		 atomic_read(&state->started) == 0 ||
		 test_bit(CACHE_SET_IO_DISABLE, &c->flags));
		 atomic_read(&state->started) == 0);

out:
	kfree(state);