[lustre-devel] [PATCH 12/15] lnet: ksocklnd: fix irq lock inversion while calling sk_data_ready()
James Simmons
jsimmons at infradead.org
Thu Oct 27 07:05:39 PDT 2022
sk->sk_data_ready() of sctp socket can be called from both BH and non-BH
contexts, but ksocklnd version of sk_data_ready, ksocknal_data_ready()
does not handle the BH case. Change how ksnd_global_lock is taken in
this case.
WC-bug-id: https://jira.whamcloud.com/browse/LU-15807
Lustre-commit: 1df5199097ef0d789 ("LU-15807 ksocklnd: fix irq lock inversion while calling sk_data_ready()")
Signed-off-by: James Simmons <jsimmons at infradead.org>
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/48715
Reviewed-by: Chris Horn <chris.horn at hpe.com>
Reviewed-by: Serguei Smirnov <ssmirnov at whamcloud.com>
Reviewed-by: Frank Sehr <fsehr at whamcloud.com>
Reviewed-by: Oleg Drokin <green at whamcloud.com>
---
net/lnet/klnds/socklnd/socklnd_lib.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/lnet/klnds/socklnd/socklnd_lib.c b/net/lnet/klnds/socklnd/socklnd_lib.c
index 047e7a6..dd12945 100644
--- a/net/lnet/klnds/socklnd/socklnd_lib.c
+++ b/net/lnet/klnds/socklnd/socklnd_lib.c
@@ -374,7 +374,7 @@ static int lustre_csum(struct kvec *v, void *context)
/* interleave correctly with closing sockets... */
LASSERT(!in_irq());
- read_lock(&ksocknal_data.ksnd_global_lock);
+ read_lock_bh(&ksocknal_data.ksnd_global_lock);
conn = sk->sk_user_data;
wspace = sk_stream_wspace(sk);
@@ -408,7 +408,7 @@ static int lustre_csum(struct kvec *v, void *context)
clear_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
}
- read_unlock(&ksocknal_data.ksnd_global_lock);
+ read_unlock_bh(&ksocknal_data.ksnd_global_lock);
}
void
--
1.8.3.1
More information about the lustre-devel
mailing list