[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240815200738.096dca4a.gary@garyguo.net>
Date: Thu, 15 Aug 2024 20:07:38 +0100
From: Gary Guo <gary@...yguo.net>
To: Alice Ryhl <aliceryhl@...gle.com>
Cc: Andreas Hindborg <nmi@...aspace.dk>, Jens Axboe <axboe@...nel.dk>,
Miguel Ojeda <ojeda@...nel.org>, Alex Gaynor <alex.gaynor@...il.com>,
Wedson Almeida Filho <wedsonaf@...il.com>, Andreas Hindborg
<a.hindborg@...sung.com>, "Behme Dirk (XC-CP/ESB5)"
<Dirk.Behme@...bosch.com>, Boqun Feng <boqun.feng@...il.com>,
Björn Roy Baron <bjorn3_gh@...tonmail.com>, Benno Lossin
<benno.lossin@...ton.me>, "linux-block@...r.kernel.org"
<linux-block@...r.kernel.org>, rust-for-linux@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 2/2] rust: block: fix wrong usage of lockdep API
On Thu, 15 Aug 2024 10:04:56 +0200
Alice Ryhl <aliceryhl@...gle.com> wrote:
> On Thu, Aug 15, 2024 at 9:49 AM Andreas Hindborg <nmi@...aspace.dk> wrote:
> >
> > From: Andreas Hindborg <a.hindborg@...sung.com>
> >
> > When allocating `struct gendisk`, `GenDiskBuilder` is using a dynamic lock
> > class key without registering the key. This is incorrect use of the API,
> > which causes a `WARN` trace. This patch fixes the issue by using a static
> > lock class key, which is more appropriate for the situation anyway.
> >
> > Fixes: 3253aba3408a ("rust: block: introduce `kernel::block::mq` module")
> > Reported-by: "Behme Dirk (XC-CP/ESB5)" <Dirk.Behme@...bosch.com>
> > Closes: https://rust-for-linux.zulipchat.com/#narrow/stream/288089-General/topic/6.2E11.2E0-rc1.3A.20rust.2Fkernel.2Fblock.2Fmq.2Ers.3A.20doctest.20lock.20warning
> > Signed-off-by: Andreas Hindborg <a.hindborg@...sung.com>
>
> LGTM. This makes me wonder if there's some design mistake in how we
> handle lock classes in Rust.
>
> Reviewed-by: Alice Ryhl <aliceryhl@...gle.com>
I agree. The API that we current have is designed without much
consideration into dynamically allocated keys, and we use `&'static
LockClassKey` in a lot of kernel crate APIs.
This arguably is wrong, because presence of `&'static LockClassKey`
doesn't mean the key is static. If we do a
`Box::leak(Box::new(LockClassKey::new()))`, then this is a `&'static
LockClassKey`, but lockdep wouldn't consider this as a static object.
Maybe we should make the `new` function unsafe.
For the patch itself:
Reviewed-by: Gary Guo <gary@...yguo.net>
Powered by blists - more mailing lists