On 10/03/2017 05:11 PM, Javier González wrote: >> On 3 Oct 2017, at 16.07, Andrey Ryabinin <aryabinin@xxxxxxxxxxxxx> wrote: >> >> >> >> On 10/03/2017 04:48 PM, Hans Holmberg wrote: >>> From: Hans Holmberg <hans.holmberg@xxxxxxxxxxxx> >>> >>> The commit bf22e37a6413 ("mm: add vfree_atomic()") made vfree unsafe to >>> call in atomic context (unless the call came from an interrupt) and >>> introduced vfree_atomic that is safe to call in atomic context. >>> >>> So, since we're holding locks when freeing line metadata, we need to >>> use the atomic version of vfree. >>> >>> Fix this by introducing an atomic variant of pblk_mfree and >>> switching to that in pblk_line_meta_free. >>> >>> Signed-off-by: Hans Holmberg <hans.holmberg@xxxxxxxxxxxx> >>> --- >>> >>> The patch is for: >>> https://github.com/OpenChannelSSD/linux branch for-4.15/pblk >>> >>> drivers/lightnvm/pblk-init.c | 3 ++- >>> drivers/lightnvm/pblk.h | 8 ++++++++ >>> 2 files changed, 10 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c >>> index c452478..3a191a6 100644 >>> --- a/drivers/lightnvm/pblk-init.c >>> +++ b/drivers/lightnvm/pblk-init.c >>> @@ -396,7 +396,8 @@ static void pblk_line_meta_free(struct pblk *pblk) >>> spin_lock(&l_mg->free_lock); >> >> What's the point in holding ->free_lock here? It seems like it could be just dropped. >> > > This lock can indeed be dropped, So, let's do this. This would be the best way to fix this. > but the general pblk semaphore, which > serializes initialization and tear down cannot. This is taken on > pblk_exit(). > But semaphore is not the problem here. We can sleep under semaphore, so it's fine. > Javier >