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 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.