* [PATCH-v3.10.y] iscsi-target: Stable backports
@ 2015-08-13 20:12 Nicholas A. Bellinger
2015-08-13 20:12 ` [PATCH-v3.10.y] iscsi-target: Fix iscsit_start_kthreads failure OOPs Nicholas A. Bellinger
0 siblings, 1 reply; 6+ messages in thread
From: Nicholas A. Bellinger @ 2015-08-13 20:12 UTC (permalink / raw)
To: target-devel; +Cc: Greg-KH, stable, Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
Hi Greg-KH,
Here is the remaining iscsi-target stable backport patch that has been updated
to apply against v3.10.86.
Please apply to queue-3.10.
Thank you,
Nicholas Bellinger (1):
iscsi-target: Fix iscsit_start_kthreads failure OOPs
drivers/target/iscsi/iscsi_target.c | 18 ++++++++++---
drivers/target/iscsi/iscsi_target_core.h | 1 +
drivers/target/iscsi/iscsi_target_login.c | 43 ++++++++++++-------------------
drivers/target/iscsi/iscsi_target_login.h | 1 +
drivers/target/iscsi/iscsi_target_nego.c | 34 +++++++++++++++++++++++-
5 files changed, 66 insertions(+), 31 deletions(-)
--
1.8.5.3
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH-v3.10.y] iscsi-target: Fix iscsit_start_kthreads failure OOPs
2015-08-13 20:12 [PATCH-v3.10.y] iscsi-target: Stable backports Nicholas A. Bellinger
@ 2015-08-13 20:12 ` Nicholas A. Bellinger
2015-08-14 0:45 ` Greg-KH
0 siblings, 1 reply; 6+ messages in thread
From: Nicholas A. Bellinger @ 2015-08-13 20:12 UTC (permalink / raw)
To: target-devel; +Cc: Greg-KH, stable, Nicholas Bellinger, Sagi Grimberg
From: Nicholas Bellinger <nab@linux-iscsi.org>
This patch fixes a regression introduced with the following commit
in v4.0-rc1 code, where a iscsit_start_kthreads() failure triggers
a NULL pointer dereference OOPs:
commit 88dcd2dab5c23b1c9cfc396246d8f476c872f0ca
Author: Nicholas Bellinger <nab@linux-iscsi.org>
Date: Thu Feb 26 22:19:15 2015 -0800
iscsi-target: Convert iscsi_thread_set usage to kthread.h
To address this bug, move iscsit_start_kthreads() immediately
preceeding the transmit of last login response, before signaling
a successful transition into full-feature-phase within existing
iscsi_target_do_tx_login_io() logic.
This ensures that no target-side resource allocation failures can
occur after the final login response has been successfully sent.
Also, it adds a iscsi_conn->rx_login_comp to allow the RX thread
to sleep to prevent other socket related failures until the final
iscsi_post_login_handler() call is able to complete.
Issue DAT-3610
Change-Id: Ie41cd45dba698d4984ca711a56e4ffd3bb32ca6d
Cc: Sagi Grimberg <sagig@mellanox.com>
Cc: <stable@vger.kernel.org> # v3.10+
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Nicholas Bellinger <nab@daterainc.com>
---
drivers/target/iscsi/iscsi_target.c | 18 ++++++++++---
drivers/target/iscsi/iscsi_target_core.h | 1 +
drivers/target/iscsi/iscsi_target_login.c | 43 ++++++++++++-------------------
drivers/target/iscsi/iscsi_target_login.h | 1 +
drivers/target/iscsi/iscsi_target_nego.c | 34 +++++++++++++++++++++++-
5 files changed, 66 insertions(+), 31 deletions(-)
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index efca110..06cd916 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -3874,7 +3874,13 @@ get_immediate:
}
transport_err:
- iscsit_take_action_for_connection_exit(conn);
+ /*
+ * Avoid the normal connection failure code-path if this connection
+ * is still within LOGIN mode, and iscsi_np process context is
+ * responsible for cleaning up the early connection failure.
+ */
+ if (conn->conn_state != TARG_CONN_STATE_IN_LOGIN)
+ iscsit_take_action_for_connection_exit(conn);
out:
return 0;
}
@@ -3956,7 +3962,7 @@ reject:
int iscsi_target_rx_thread(void *arg)
{
- int ret;
+ int ret, rc;
u8 buffer[ISCSI_HDR_LEN], opcode;
u32 checksum = 0, digest = 0;
struct iscsi_conn *conn = arg;
@@ -3966,10 +3972,16 @@ int iscsi_target_rx_thread(void *arg)
* connection recovery / failure event can be triggered externally.
*/
allow_signal(SIGINT);
+ /*
+ * Wait for iscsi_post_login_handler() to complete before allowing
+ * incoming iscsi/tcp socket I/O, and/or failing the connection.
+ */
+ rc = wait_for_completion_interruptible(&conn->rx_login_comp);
+ if (rc < 0)
+ return 0;
if (conn->conn_transport->transport_type == ISCSI_INFINIBAND) {
struct completion comp;
- int rc;
init_completion(&comp);
rc = wait_for_completion_interruptible(&comp);
diff --git a/drivers/target/iscsi/iscsi_target_core.h b/drivers/target/iscsi/iscsi_target_core.h
index 815bf5b..bf93e1c 100644
--- a/drivers/target/iscsi/iscsi_target_core.h
+++ b/drivers/target/iscsi/iscsi_target_core.h
@@ -589,6 +589,7 @@ struct iscsi_conn {
int bitmap_id;
int rx_thread_active;
struct task_struct *rx_thread;
+ struct completion rx_login_comp;
int tx_thread_active;
struct task_struct *tx_thread;
/* list_head for session connection list */
diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c
index 797b2e2..2c4db62 100644
--- a/drivers/target/iscsi/iscsi_target_login.c
+++ b/drivers/target/iscsi/iscsi_target_login.c
@@ -84,6 +84,7 @@ static struct iscsi_login *iscsi_login_init_conn(struct iscsi_conn *conn)
init_completion(&conn->conn_logout_comp);
init_completion(&conn->rx_half_close_comp);
init_completion(&conn->tx_half_close_comp);
+ init_completion(&conn->rx_login_comp);
spin_lock_init(&conn->cmd_lock);
spin_lock_init(&conn->conn_usage_lock);
spin_lock_init(&conn->immed_queue_lock);
@@ -718,6 +719,7 @@ int iscsit_start_kthreads(struct iscsi_conn *conn)
return 0;
out_tx:
+ send_sig(SIGINT, conn->tx_thread, 1);
kthread_stop(conn->tx_thread);
conn->tx_thread_active = false;
out_bitmap:
@@ -728,7 +730,7 @@ out_bitmap:
return ret;
}
-int iscsi_post_login_handler(
+void iscsi_post_login_handler(
struct iscsi_np *np,
struct iscsi_conn *conn,
u8 zero_tsih)
@@ -738,7 +740,6 @@ int iscsi_post_login_handler(
struct se_session *se_sess = sess->se_sess;
struct iscsi_portal_group *tpg = ISCSI_TPG_S(sess);
struct se_portal_group *se_tpg = &tpg->tpg_se_tpg;
- int rc;
iscsit_inc_conn_usage_count(conn);
@@ -779,10 +780,6 @@ int iscsi_post_login_handler(
sess->sess_ops->InitiatorName);
spin_unlock_bh(&sess->conn_lock);
- rc = iscsit_start_kthreads(conn);
- if (rc)
- return rc;
-
iscsi_post_login_start_timers(conn);
/*
* Determine CPU mask to ensure connection's RX and TX kthreads
@@ -791,15 +788,20 @@ int iscsi_post_login_handler(
iscsit_thread_get_cpumask(conn);
conn->conn_rx_reset_cpumask = 1;
conn->conn_tx_reset_cpumask = 1;
-
+ /*
+ * Wakeup the sleeping iscsi_target_rx_thread() now that
+ * iscsi_conn is in TARG_CONN_STATE_LOGGED_IN state.
+ */
+ complete(&conn->rx_login_comp);
iscsit_dec_conn_usage_count(conn);
+
if (stop_timer) {
spin_lock_bh(&se_tpg->session_lock);
iscsit_stop_time2retain_timer(sess);
spin_unlock_bh(&se_tpg->session_lock);
}
iscsit_dec_session_usage_count(sess);
- return 0;
+ return;
}
iscsi_set_session_parameters(sess->sess_ops, conn->param_list, 1);
@@ -840,10 +842,6 @@ int iscsi_post_login_handler(
" iSCSI Target Portal Group: %hu\n", tpg->nsessions, tpg->tpgt);
spin_unlock_bh(&se_tpg->session_lock);
- rc = iscsit_start_kthreads(conn);
- if (rc)
- return rc;
-
iscsi_post_login_start_timers(conn);
/*
* Determine CPU mask to ensure connection's RX and TX kthreads
@@ -852,10 +850,12 @@ int iscsi_post_login_handler(
iscsit_thread_get_cpumask(conn);
conn->conn_rx_reset_cpumask = 1;
conn->conn_tx_reset_cpumask = 1;
-
+ /*
+ * Wakeup the sleeping iscsi_target_rx_thread() now that
+ * iscsi_conn is in TARG_CONN_STATE_LOGGED_IN state.
+ */
+ complete(&conn->rx_login_comp);
iscsit_dec_conn_usage_count(conn);
-
- return 0;
}
static void iscsi_handle_login_thread_timeout(unsigned long data)
@@ -1331,20 +1331,9 @@ static int __iscsi_target_login_thread(struct iscsi_np *np)
if (iscsi_target_start_negotiation(login, conn) < 0)
goto new_sess_out;
- if (!conn->sess) {
- pr_err("struct iscsi_conn session pointer is NULL!\n");
- goto new_sess_out;
- }
-
iscsi_stop_login_thread_timer(np);
- if (signal_pending(current))
- goto new_sess_out;
-
- ret = iscsi_post_login_handler(np, conn, zero_tsih);
-
- if (ret < 0)
- goto new_sess_out;
+ iscsi_post_login_handler(np, conn, zero_tsih);
iscsit_deaccess_np(np, tpg);
tpg = NULL;
diff --git a/drivers/target/iscsi/iscsi_target_login.h b/drivers/target/iscsi/iscsi_target_login.h
index 63efd28..6d7eb66 100644
--- a/drivers/target/iscsi/iscsi_target_login.h
+++ b/drivers/target/iscsi/iscsi_target_login.h
@@ -12,6 +12,7 @@ extern int iscsit_accept_np(struct iscsi_np *, struct iscsi_conn *);
extern int iscsit_get_login_rx(struct iscsi_conn *, struct iscsi_login *);
extern int iscsit_put_login_tx(struct iscsi_conn *, struct iscsi_login *, u32);
extern void iscsit_free_conn(struct iscsi_np *, struct iscsi_conn *);
+extern int iscsit_start_kthreads(struct iscsi_conn *);
extern int iscsi_target_login_thread(void *);
extern int iscsi_login_disable_FIM_keys(struct iscsi_param_list *, struct iscsi_conn *);
diff --git a/drivers/target/iscsi/iscsi_target_nego.c b/drivers/target/iscsi/iscsi_target_nego.c
index 72d9dec..77c276a 100644
--- a/drivers/target/iscsi/iscsi_target_nego.c
+++ b/drivers/target/iscsi/iscsi_target_nego.c
@@ -19,6 +19,7 @@
******************************************************************************/
#include <linux/ctype.h>
+#include <linux/kthread.h>
#include <scsi/iscsi_proto.h>
#include <target/target_core_base.h>
#include <target/target_core_fabric.h>
@@ -352,10 +353,24 @@ static int iscsi_target_do_tx_login_io(struct iscsi_conn *conn, struct iscsi_log
ntohl(login_rsp->statsn), login->rsp_length);
padding = ((-login->rsp_length) & 3);
+ /*
+ * Before sending the last login response containing the transition
+ * bit for full-feature-phase, go ahead and start up TX/RX threads
+ * now to avoid potential resource allocation failures after the
+ * final login response has been sent.
+ */
+ if (login->login_complete) {
+ int rc = iscsit_start_kthreads(conn);
+ if (rc) {
+ iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
+ ISCSI_LOGIN_STATUS_NO_RESOURCES);
+ return -1;
+ }
+ }
if (conn->conn_transport->iscsit_put_login_tx(conn, login,
login->rsp_length + padding) < 0)
- return -1;
+ goto err;
login->rsp_length = 0;
mutex_lock(&sess->cmdsn_mutex);
@@ -364,6 +379,23 @@ static int iscsi_target_do_tx_login_io(struct iscsi_conn *conn, struct iscsi_log
mutex_unlock(&sess->cmdsn_mutex);
return 0;
+
+err:
+ if (login->login_complete) {
+ if (conn->rx_thread && conn->rx_thread_active) {
+ send_sig(SIGINT, conn->rx_thread, 1);
+ kthread_stop(conn->rx_thread);
+ }
+ if (conn->tx_thread && conn->tx_thread_active) {
+ send_sig(SIGINT, conn->tx_thread, 1);
+ kthread_stop(conn->tx_thread);
+ }
+ spin_lock(&iscsit_global->ts_bitmap_lock);
+ bitmap_release_region(iscsit_global->ts_bitmap, conn->bitmap_id,
+ get_order(1));
+ spin_unlock(&iscsit_global->ts_bitmap_lock);
+ }
+ return -1;
}
static int iscsi_target_do_login_io(struct iscsi_conn *conn, struct iscsi_login *login)
--
1.8.5.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH-v3.10.y] iscsi-target: Fix iscsit_start_kthreads failure OOPs
2015-08-13 20:12 ` [PATCH-v3.10.y] iscsi-target: Fix iscsit_start_kthreads failure OOPs Nicholas A. Bellinger
@ 2015-08-14 0:45 ` Greg-KH
2015-08-14 0:48 ` Nicholas A. Bellinger
0 siblings, 1 reply; 6+ messages in thread
From: Greg-KH @ 2015-08-14 0:45 UTC (permalink / raw)
To: Nicholas A. Bellinger; +Cc: target-devel, stable, Sagi Grimberg
On Thu, Aug 13, 2015 at 08:12:10PM +0000, Nicholas A. Bellinger wrote:
> From: Nicholas Bellinger <nab@linux-iscsi.org>
>
> This patch fixes a regression introduced with the following commit
> in v4.0-rc1 code, where a iscsit_start_kthreads() failure triggers
> a NULL pointer dereference OOPs:
>
> commit 88dcd2dab5c23b1c9cfc396246d8f476c872f0ca
> Author: Nicholas Bellinger <nab@linux-iscsi.org>
> Date: Thu Feb 26 22:19:15 2015 -0800
>
> iscsi-target: Convert iscsi_thread_set usage to kthread.h
>
> To address this bug, move iscsit_start_kthreads() immediately
> preceeding the transmit of last login response, before signaling
> a successful transition into full-feature-phase within existing
> iscsi_target_do_tx_login_io() logic.
>
> This ensures that no target-side resource allocation failures can
> occur after the final login response has been successfully sent.
>
> Also, it adds a iscsi_conn->rx_login_comp to allow the RX thread
> to sleep to prevent other socket related failures until the final
> iscsi_post_login_handler() call is able to complete.
>
> Issue DAT-3610
>
> Change-Id: Ie41cd45dba698d4984ca711a56e4ffd3bb32ca6d
What is that here for?
I need to know the git commit id in Linus's tree, I guess I have to go
dig it out now...
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH-v3.10.y] iscsi-target: Fix iscsit_start_kthreads failure OOPs
2015-08-14 0:45 ` Greg-KH
@ 2015-08-14 0:48 ` Nicholas A. Bellinger
2015-08-14 0:57 ` Greg-KH
0 siblings, 1 reply; 6+ messages in thread
From: Nicholas A. Bellinger @ 2015-08-14 0:48 UTC (permalink / raw)
To: Greg-KH; +Cc: target-devel, stable, Sagi Grimberg
On Thu, 2015-08-13 at 17:45 -0700, Greg-KH wrote:
> On Thu, Aug 13, 2015 at 08:12:10PM +0000, Nicholas A. Bellinger wrote:
> > From: Nicholas Bellinger <nab@linux-iscsi.org>
> >
> > This patch fixes a regression introduced with the following commit
> > in v4.0-rc1 code, where a iscsit_start_kthreads() failure triggers
> > a NULL pointer dereference OOPs:
> >
> > commit 88dcd2dab5c23b1c9cfc396246d8f476c872f0ca
> > Author: Nicholas Bellinger <nab@linux-iscsi.org>
> > Date: Thu Feb 26 22:19:15 2015 -0800
> >
> > iscsi-target: Convert iscsi_thread_set usage to kthread.h
> >
> > To address this bug, move iscsit_start_kthreads() immediately
> > preceeding the transmit of last login response, before signaling
> > a successful transition into full-feature-phase within existing
> > iscsi_target_do_tx_login_io() logic.
> >
> > This ensures that no target-side resource allocation failures can
> > occur after the final login response has been successfully sent.
> >
> > Also, it adds a iscsi_conn->rx_login_comp to allow the RX thread
> > to sleep to prevent other socket related failures until the final
> > iscsi_post_login_handler() call is able to complete.
> >
> > Issue DAT-3610
> >
> > Change-Id: Ie41cd45dba698d4984ca711a56e4ffd3bb32ca6d
>
> What is that here for?
>
Ugh sorry, forgot to strip off these internal tags.
> I need to know the git commit id in Linus's tree, I guess I have to go
> dig it out now...
That would be:
commit e54198657b65625085834847ab6271087323ffea
Author: Nicholas Bellinger <nab@linux-iscsi.org>
Date: Wed Jul 22 23:14:19 2015 -0700
iscsi-target: Fix iscsit_start_kthreads failure OOPs
Thank you,
--nab
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH-v3.10.y] iscsi-target: Fix iscsit_start_kthreads failure OOPs
2015-08-14 0:48 ` Nicholas A. Bellinger
@ 2015-08-14 0:57 ` Greg-KH
2015-08-14 0:59 ` Nicholas A. Bellinger
0 siblings, 1 reply; 6+ messages in thread
From: Greg-KH @ 2015-08-14 0:57 UTC (permalink / raw)
To: Nicholas A. Bellinger; +Cc: target-devel, stable, Sagi Grimberg
On Thu, Aug 13, 2015 at 05:48:26PM -0700, Nicholas A. Bellinger wrote:
> On Thu, 2015-08-13 at 17:45 -0700, Greg-KH wrote:
> > On Thu, Aug 13, 2015 at 08:12:10PM +0000, Nicholas A. Bellinger wrote:
> > > From: Nicholas Bellinger <nab@linux-iscsi.org>
> > >
> > > This patch fixes a regression introduced with the following commit
> > > in v4.0-rc1 code, where a iscsit_start_kthreads() failure triggers
> > > a NULL pointer dereference OOPs:
> > >
> > > commit 88dcd2dab5c23b1c9cfc396246d8f476c872f0ca
> > > Author: Nicholas Bellinger <nab@linux-iscsi.org>
> > > Date: Thu Feb 26 22:19:15 2015 -0800
> > >
> > > iscsi-target: Convert iscsi_thread_set usage to kthread.h
> > >
> > > To address this bug, move iscsit_start_kthreads() immediately
> > > preceeding the transmit of last login response, before signaling
> > > a successful transition into full-feature-phase within existing
> > > iscsi_target_do_tx_login_io() logic.
> > >
> > > This ensures that no target-side resource allocation failures can
> > > occur after the final login response has been successfully sent.
> > >
> > > Also, it adds a iscsi_conn->rx_login_comp to allow the RX thread
> > > to sleep to prevent other socket related failures until the final
> > > iscsi_post_login_handler() call is able to complete.
> > >
> > > Issue DAT-3610
> > >
> > > Change-Id: Ie41cd45dba698d4984ca711a56e4ffd3bb32ca6d
> >
> > What is that here for?
> >
>
> Ugh sorry, forgot to strip off these internal tags.
>
> > I need to know the git commit id in Linus's tree, I guess I have to go
> > dig it out now...
>
> That would be:
>
> commit e54198657b65625085834847ab6271087323ffea
> Author: Nicholas Bellinger <nab@linux-iscsi.org>
> Date: Wed Jul 22 23:14:19 2015 -0700
>
> iscsi-target: Fix iscsit_start_kthreads failure OOPs
Ah crap, I picked e54198657b65625085834847ab6271087323ffea. Let me go
delete the patches I just queued up and try it again...
ugh...
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH-v3.10.y] iscsi-target: Fix iscsit_start_kthreads failure OOPs
2015-08-14 0:57 ` Greg-KH
@ 2015-08-14 0:59 ` Nicholas A. Bellinger
0 siblings, 0 replies; 6+ messages in thread
From: Nicholas A. Bellinger @ 2015-08-14 0:59 UTC (permalink / raw)
To: Greg-KH; +Cc: target-devel, stable, Sagi Grimberg
On Thu, 2015-08-13 at 17:57 -0700, Greg-KH wrote:
> On Thu, Aug 13, 2015 at 05:48:26PM -0700, Nicholas A. Bellinger wrote:
> > On Thu, 2015-08-13 at 17:45 -0700, Greg-KH wrote:
> > > On Thu, Aug 13, 2015 at 08:12:10PM +0000, Nicholas A. Bellinger wrote:
> > > > From: Nicholas Bellinger <nab@linux-iscsi.org>
> > > >
> > > > This patch fixes a regression introduced with the following commit
> > > > in v4.0-rc1 code, where a iscsit_start_kthreads() failure triggers
> > > > a NULL pointer dereference OOPs:
> > > >
> > > > commit 88dcd2dab5c23b1c9cfc396246d8f476c872f0ca
> > > > Author: Nicholas Bellinger <nab@linux-iscsi.org>
> > > > Date: Thu Feb 26 22:19:15 2015 -0800
> > > >
> > > > iscsi-target: Convert iscsi_thread_set usage to kthread.h
> > > >
> > > > To address this bug, move iscsit_start_kthreads() immediately
> > > > preceeding the transmit of last login response, before signaling
> > > > a successful transition into full-feature-phase within existing
> > > > iscsi_target_do_tx_login_io() logic.
> > > >
> > > > This ensures that no target-side resource allocation failures can
> > > > occur after the final login response has been successfully sent.
> > > >
> > > > Also, it adds a iscsi_conn->rx_login_comp to allow the RX thread
> > > > to sleep to prevent other socket related failures until the final
> > > > iscsi_post_login_handler() call is able to complete.
> > > >
> > > > Issue DAT-3610
> > > >
> > > > Change-Id: Ie41cd45dba698d4984ca711a56e4ffd3bb32ca6d
> > >
> > > What is that here for?
> > >
> >
> > Ugh sorry, forgot to strip off these internal tags.
> >
> > > I need to know the git commit id in Linus's tree, I guess I have to go
> > > dig it out now...
> >
> > That would be:
> >
> > commit e54198657b65625085834847ab6271087323ffea
> > Author: Nicholas Bellinger <nab@linux-iscsi.org>
> > Date: Wed Jul 22 23:14:19 2015 -0700
> >
> > iscsi-target: Fix iscsit_start_kthreads failure OOPs
>
> Ah crap, I picked e54198657b65625085834847ab6271087323ffea. Let me go
> delete the patches I just queued up and try it again...
>
e54198657b65625085834847ab6271087323ffea is the correct upstream commit.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-08-14 0:59 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-13 20:12 [PATCH-v3.10.y] iscsi-target: Stable backports Nicholas A. Bellinger
2015-08-13 20:12 ` [PATCH-v3.10.y] iscsi-target: Fix iscsit_start_kthreads failure OOPs Nicholas A. Bellinger
2015-08-14 0:45 ` Greg-KH
2015-08-14 0:48 ` Nicholas A. Bellinger
2015-08-14 0:57 ` Greg-KH
2015-08-14 0:59 ` Nicholas A. Bellinger
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.