All of lore.kernel.org
 help / color / mirror / Atom feed
From: tada keisuke <keisuke1.tada@kioxia.com>
To: "song@kernel.org" <song@kernel.org>,
	"yukuai3@huawei.com" <yukuai3@huawei.com>
Cc: "linux-raid@vger.kernel.org" <linux-raid@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: [PATCH 00/11] md: avoid counter operation conflicts
Date: Tue, 26 Mar 2024 10:29:16 +0000	[thread overview]
Message-ID: <a022f547c43e40e2b9f0aebb2bd0bfa8@kioxia.com> (raw)

Currently, active_aligned_reads and nr_pending used as counters are atomic types.
Therefore, when inc/dec in a multi-core results in conflicts.

To solve this problem, use "percpu_ref" counters that can avoid conflicts and maintain consistency.

Switch modes of percpu_ref to achieve both consistency and conflict avoidance.
During normal operations such as inc/dec, it operates as percpu mode.
When consistency is required, it operates as atomic mode.
The operations that require consistency are as follows:
・Zero check for the counter
・All operations in RAID 1/10

Patches 1, 3, 6 change active_aligned_reads, and patches 2, 4, 5, 7 to 11 change nr_pending.
nr_pending temporarily switch from percpu mode to atomic mode in patch 7.
This is to reduce the amount of changes from patches 8 to 10.
Finally, nr_pending switch from atomic mode to percpu mode in patch 11.

Keisuke TADA (11):
  add infra for active_aligned_reads changes
  add infra for nr_pending changes
  workaround for inconsistency of config state in takeover
  minimize execution of zero check for nr_pending
  match the type of variables to percpu_ref
  avoid conflicts in active_aligned_reads operations
  change the type of nr_pending from atomic_t to percpu_ref
  add atomic mode switching in RAID 1/10
  add atomic mode switching when removing disk
  add atomic mode switching when I/O completion
  avoid conflicts in nr_pending operations

 drivers/md/md-bitmap.c   |  2 +-
 drivers/md/md.c          | 40 +++++++++++++++---
 drivers/md/md.h          | 62 ++++++++++++++++++++++++----
 drivers/md/raid1.c       | 37 +++++++++++------
 drivers/md/raid10.c      | 60 ++++++++++++++++-----------
 drivers/md/raid5-cache.c |  4 +-
 drivers/md/raid5.c       | 89 +++++++++++++++++++++++++++-------------
 drivers/md/raid5.h       | 17 +++++++-
 8 files changed, 230 insertions(+), 81 deletions(-)


base-commit: fcf3f7e2fc8a53a6140beee46ec782a4c88e4744
-- 
2.34.1


             reply	other threads:[~2024-03-26 11:18 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-26 10:29 tada keisuke [this message]
2024-03-26 14:01 ` [PATCH 00/11] md: avoid counter operation conflicts Yu Kuai
2024-03-27  1:27   ` tada keisuke
2024-04-10 21:13 ` Song Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a022f547c43e40e2b9f0aebb2bd0bfa8@kioxia.com \
    --to=keisuke1.tada@kioxia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=song@kernel.org \
    --cc=yukuai3@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.