From: Ming Lei <ming.lei@redhat.com>
To: Nilay Shroff <nilay@linux.ibm.com>
Cc: linux-block@vger.kernel.org, hch@lst.de, dlemoal@kernel.org,
hare@suse.de, axboe@kernel.dk, gjoyce@ibm.com
Subject: Re: [PATCHv5 3/7] block: remove q->sysfs_lock for attributes which don't need it
Date: Tue, 4 Mar 2025 10:13:03 +0800 [thread overview]
Message-ID: <Z8Zhr2oE6FPe3ycS@fedora> (raw)
In-Reply-To: <20250226124006.1593985-4-nilay@linux.ibm.com>
On Wed, Feb 26, 2025 at 06:09:56PM +0530, Nilay Shroff wrote:
> There're few sysfs attributes in block layer which don't really need
> acquiring q->sysfs_lock while accessing it. The reason being, reading/
> writing a value from/to such attributes are either atomic or could be
> easily protected using READ_ONCE()/WRITE_ONCE(). Moreover, sysfs
> attributes are inherently protected with sysfs/kernfs internal locking.
>
> So this change help segregate all existing sysfs attributes for which
> we could avoid acquiring q->sysfs_lock. For all read-only attributes
> we removed the q->sysfs_lock from show method of such attributes. In
> case attribute is read/write then we removed the q->sysfs_lock from
> both show and store methods of these attributes.
>
> We audited all block sysfs attributes and found following list of
> attributes which shouldn't require q->sysfs_lock protection:
>
> 1. io_poll:
> Write to this attribute is ignored. So, we don't need q->sysfs_lock.
>
> 2. io_poll_delay:
> Write to this attribute is NOP, so we don't need q->sysfs_lock.
>
> 3. io_timeout:
> Write to this attribute updates q->rq_timeout and read of this
> attribute returns the value stored in q->rq_timeout Moreover, the
> q->rq_timeout is set only once when we init the queue (under blk_mq_
> init_allocated_queue()) even before disk is added. So that means
> that we don't need to protect it with q->sysfs_lock. As this
> attribute is not directly correlated with anything else simply using
> READ_ONCE/WRITE_ONCE should be enough.
>
> 4. nomerges:
> Write to this attribute file updates two q->flags : QUEUE_FLAG_
> NOMERGES and QUEUE_FLAG_NOXMERGES. These flags are accessed during
> bio-merge which anyways doesn't run with q->sysfs_lock held.
> Moreover, the q->flags are updated/accessed with bitops which are
> atomic. So, protecting it with q->sysfs_lock is not necessary.
>
> 5. rq_affinity:
> Write to this attribute file makes atomic updates to q->flags:
> QUEUE_FLAG_SAME_COMP and QUEUE_FLAG_SAME_FORCE. These flags are
> also accessed from blk_mq_complete_need_ipi() using test_bit macro.
> As read/write to q->flags uses bitops which are atomic, protecting
> it with q->stsys_lock is not necessary.
>
> 6. nr_zones:
> Write to this attribute happens in the driver probe method (except
> nvme) before disk is added and outside of q->sysfs_lock or any other
> lock. Moreover nr_zones is defined as "unsigned int" and so reading
> this attribute, even when it's simultaneously being updated on other
> cpu, should not return torn value on any architecture supported by
> linux. So we can avoid using q->sysfs_lock or any other lock/
> protection while reading this attribute.
>
> 7. discard_zeroes_data:
> Reading of this attribute always returns 0, so we don't require
> holding q->sysfs_lock.
>
> 8. write_same_max_bytes
> Reading of this attribute always returns 0, so we don't require
> holding q->sysfs_lock.
>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> Reviewed-by: Hannes Reinecke <hare@suse.de>
> Signed-off-by: Nilay Shroff <nilay@linux.ibm.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Thanks,
Ming
next prev parent reply other threads:[~2025-03-04 2:13 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-26 12:39 [PATCHv5 0/7] block: fix lock order and remove redundant locking Nilay Shroff
2025-02-26 12:39 ` [PATCHv5 1/7] block: acquire q->limits_lock while reading sysfs attributes Nilay Shroff
2025-02-28 8:29 ` Ming Lei
2025-02-26 12:39 ` [PATCHv5 2/7] block: move q->sysfs_lock and queue-freeze under show/store method Nilay Shroff
2025-02-28 8:39 ` Ming Lei
2025-02-26 12:39 ` [PATCHv5 3/7] block: remove q->sysfs_lock for attributes which don't need it Nilay Shroff
2025-03-04 2:13 ` Ming Lei [this message]
2025-02-26 12:39 ` [PATCHv5 4/7] block: introduce a dedicated lock for protecting queue elevator updates Nilay Shroff
2025-03-04 2:23 ` Ming Lei
2025-02-26 12:39 ` [PATCHv5 5/7] block: protect nr_requests update using q->elevator_lock Nilay Shroff
2025-03-03 14:13 ` Christoph Hellwig
2025-03-04 2:24 ` Ming Lei
2025-02-26 12:39 ` [PATCHv5 6/7] block: protect wbt_lat_usec " Nilay Shroff
2025-03-03 14:14 ` Christoph Hellwig
2025-03-04 2:27 ` Ming Lei
2025-03-04 6:18 ` kernel test robot
2025-03-04 8:06 ` Nilay Shroff
2025-02-26 12:40 ` [PATCHv5 7/7] block: protect read_ahead_kb using q->limits_lock Nilay Shroff
2025-03-03 14:14 ` Christoph Hellwig
2025-03-04 2:31 ` Ming Lei
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=Z8Zhr2oE6FPe3ycS@fedora \
--to=ming.lei@redhat.com \
--cc=axboe@kernel.dk \
--cc=dlemoal@kernel.org \
--cc=gjoyce@ibm.com \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=linux-block@vger.kernel.org \
--cc=nilay@linux.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox