Re: [PATCH 01/23] block: add a helper to cancel atomic queue limit updates

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 4/2/24 06:06, Christoph Hellwig wrote:
Drivers might have to perform complex actions to determine queue limits,
and those might fail.  Add a helper to cancel a queue limit update
that can be called in those cases.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
---
  include/linux/blkdev.h | 13 +++++++++++++
  1 file changed, 13 insertions(+)

diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index c3e8f7cf96be9e..ded7f66dc4b964 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -892,6 +892,19 @@ int queue_limits_commit_update(struct request_queue *q,
  		struct queue_limits *lim);
  int queue_limits_set(struct request_queue *q, struct queue_limits *lim);
+/**
+ * queue_limits_cancel_update - cancel an atomic update of queue limits
+ * @q:		queue to update
+ *
+ * This functions cancels an atomic update of the queue limits started by
+ * queue_limits_start_update() and should be used when an error occurs after
+ * starting update.
+ */
+static inline void queue_limits_cancel_update(struct request_queue *q)
+{
+	mutex_unlock(&q->limits_lock);
+}

At least in scsi_add_lun() there are multiple statements between
queue_limits_start_update(), queue_limits_cancel_update() and
queue_limits_commit_update(). Has it been considered to use __cleanup()
to invoke queue_limits_commit_update() when the end of the current scope
is reached? I think that would make code that uses the
queue_limits_*_update() functions easier to verify. For an example of
how to use the __cleanup() macro, see e.g. the __free() and
no_free_ptr() macros in <linux/cleanup.h>.

Thanks,

Bart.





[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux