| From 76668dc00c7c5664d9a810a5aab97aa6ada9e286 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 1 Apr 2022 00:03:48 +0200 |
| Subject: drbd: remove usage of list iterator variable after loop |
| |
| From: Jakob Koschel <jakobkoschel@gmail.com> |
| |
| [ Upstream commit 901aeda62efa21f2eae937bccb71b49ae531be06 ] |
| |
| In preparation to limit the scope of a list iterator to the list |
| traversal loop, use a dedicated pointer to iterate through the list [1]. |
| |
| Since that variable should not be used past the loop iteration, a |
| separate variable is used to 'remember the current location within the |
| loop'. |
| |
| To either continue iterating from that position or skip the iteration |
| (if the previous iteration was complete) list_prepare_entry() is used. |
| |
| Link: https://lore.kernel.org/all/CAHk-=wgRr_D8CB-D9Kg-c=EHreAsk5SqXPwr9Y7k9sA6cWXJ6w@mail.gmail.com/ [1] |
| Signed-off-by: Jakob Koschel <jakobkoschel@gmail.com> |
| Link: https://lore.kernel.org/r/20220331220349.885126-1-jakobkoschel@gmail.com |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/block/drbd/drbd_main.c | 7 +++++-- |
| 1 file changed, 5 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c |
| index b998e3abca7a..1e02cb60b65b 100644 |
| --- a/drivers/block/drbd/drbd_main.c |
| +++ b/drivers/block/drbd/drbd_main.c |
| @@ -195,7 +195,7 @@ void tl_release(struct drbd_connection *connection, unsigned int barrier_nr, |
| unsigned int set_size) |
| { |
| struct drbd_request *r; |
| - struct drbd_request *req = NULL; |
| + struct drbd_request *req = NULL, *tmp = NULL; |
| int expect_epoch = 0; |
| int expect_size = 0; |
| |
| @@ -249,8 +249,11 @@ void tl_release(struct drbd_connection *connection, unsigned int barrier_nr, |
| * to catch requests being barrier-acked "unexpectedly". |
| * It usually should find the same req again, or some READ preceding it. */ |
| list_for_each_entry(req, &connection->transfer_log, tl_requests) |
| - if (req->epoch == expect_epoch) |
| + if (req->epoch == expect_epoch) { |
| + tmp = req; |
| break; |
| + } |
| + req = list_prepare_entry(tmp, &connection->transfer_log, tl_requests); |
| list_for_each_entry_safe_from(req, r, &connection->transfer_log, tl_requests) { |
| if (req->epoch != expect_epoch) |
| break; |
| -- |
| 2.35.1 |
| |