From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org, akpm@linux-foundation.org,
torvalds@linux-foundation.org, stable@vger.kernel.org
Cc: lwn@lwn.net, jslaby@suse.cz,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: Linux 5.15.225
Date: Fri, 6 Nov 2026 13:24:55 -0500 [thread overview]
Message-ID: <2026110655-glorious-vocalist-72a7@gregkh> (raw)
In-Reply-To: <2026110655-upright-drained-3d9c@gregkh>
diff --git a/Makefile b/Makefile
index 39856e1c9c4a..215bf5d254d3 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 15
-SUBLEVEL = 224
+SUBLEVEL = 225
EXTRAVERSION =
NAME = Trick or Treat
diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h
index a28473470e66..8d92082f2927 100644
--- a/drivers/block/xen-blkback/common.h
+++ b/drivers/block/xen-blkback/common.h
@@ -318,8 +318,10 @@ struct xen_blkif {
unsigned int nr_ring_pages;
bool multi_ref;
/* All rings for this device. */
+ rwlock_t rings_lock;
struct xen_blkif_ring *rings;
unsigned int nr_rings;
+
unsigned long buffer_squeeze_end;
};
diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
index 1525e28c5d70..6808b9cef6e4 100644
--- a/drivers/block/xen-blkback/xenbus.c
+++ b/drivers/block/xen-blkback/xenbus.c
@@ -126,15 +126,23 @@ static void xen_update_blkif_status(struct xen_blkif *blkif)
return;
}
-static int xen_blkif_alloc_rings(struct xen_blkif *blkif)
+static int xen_blkif_alloc_rings(struct xen_blkif *blkif,
+ unsigned int nr_rings)
{
unsigned int r;
+ struct xen_blkif_ring *rings;
- blkif->rings = kcalloc(blkif->nr_rings, sizeof(struct xen_blkif_ring),
- GFP_KERNEL);
- if (!blkif->rings)
+ rings = kcalloc(nr_rings, sizeof(struct xen_blkif_ring), GFP_KERNEL);
+ if (!rings)
return -ENOMEM;
+ write_lock(&blkif->rings_lock);
+
+ blkif->rings = rings;
+ blkif->nr_rings = nr_rings;
+
+ write_unlock(&blkif->rings_lock);
+
for (r = 0; r < blkif->nr_rings; r++) {
struct xen_blkif_ring *ring = &blkif->rings[r];
@@ -174,6 +182,7 @@ static struct xen_blkif *xen_blkif_alloc(domid_t domid)
blkif->domid = domid;
atomic_set(&blkif->refcnt, 1);
init_completion(&blkif->drain_complete);
+ rwlock_init(&blkif->rings_lock);
/*
* Because freeing back to the cache may be deferred, it is not
@@ -268,6 +277,7 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
struct pending_req *req, *n;
unsigned int j, r;
bool busy = false;
+ struct xen_blkif_ring *rings;
for (r = 0; r < blkif->nr_rings; r++) {
struct xen_blkif_ring *ring = &blkif->rings[r];
@@ -334,10 +344,16 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
* blkif->rings was allocated in connect_ring, so we should free it in
* here.
*/
- kfree(blkif->rings);
+ write_lock(&blkif->rings_lock);
+
+ rings = blkif->rings;
blkif->rings = NULL;
blkif->nr_rings = 0;
+ write_unlock(&blkif->rings_lock);
+
+ kfree(rings);
+
return 0;
}
@@ -385,6 +401,7 @@ void xen_blkif_interface_fini(void)
unsigned int i; \
unsigned long long result = 0; \
\
+ read_lock(&blkif->rings_lock); \
if (!blkif->rings) \
goto out; \
\
@@ -395,6 +412,7 @@ void xen_blkif_interface_fini(void)
} \
\
out: \
+ read_unlock(&blkif->rings_lock); \
return sprintf(buf, format, result); \
} \
static DEVICE_ATTR(name, 0444, show_##name, NULL)
@@ -1109,8 +1127,7 @@ static int connect_ring(struct backend_info *be)
requested_num_queues, xenblk_max_queues);
return -ENOSYS;
}
- blkif->nr_rings = requested_num_queues;
- if (xen_blkif_alloc_rings(blkif))
+ if (xen_blkif_alloc_rings(blkif, requested_num_queues))
return -ENOMEM;
pr_info("%s: using %d queues, protocol %d (%s) %s\n", dev->nodename,
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
index f20ddaaa2451..90658aa58e8c 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@ -809,8 +809,6 @@ void xenvif_disconnect_data(struct xenvif *vif)
xenvif_disconnect_queue(queue);
}
-
- xenvif_mcast_addr_list_free(vif);
}
void xenvif_disconnect_ctrl(struct xenvif *vif)
diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c
index 5b78d9172aac..b9219b394de5 100644
--- a/drivers/net/xen-netback/xenbus.c
+++ b/drivers/net/xen-netback/xenbus.c
@@ -267,6 +267,8 @@ static void backend_disconnect(struct backend_info *be)
vif->num_queues = 0;
synchronize_net();
+ xenvif_mcast_addr_list_free(vif);
+
for (queue_index = 0; queue_index < num_queues; ++queue_index)
xenvif_deinit_queue(&vif->queues[queue_index]);
@@ -837,6 +839,7 @@ static void connect(struct backend_info *be)
err:
if (be->vif->num_queues > 0)
xenvif_disconnect_data(be->vif); /* Clean up existing queues */
+ synchronize_net();
for (queue_index = 0; queue_index < be->vif->num_queues; ++queue_index)
xenvif_deinit_queue(&be->vif->queues[queue_index]);
vfree(be->vif->queues);
prev parent reply other threads:[~2026-11-06 18:25 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 18:24 Linux 5.15.225 Greg Kroah-Hartman
2026-11-06 18:24 ` Greg Kroah-Hartman [this message]
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=2026110655-glorious-vocalist-72a7@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=akpm@linux-foundation.org \
--cc=jslaby@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=lwn@lwn.net \
--cc=stable@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/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.