public inbox for linux-block@vger.kernel.org
 help / color / mirror / Atom feed
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


  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