From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS,T_DKIMWL_WL_MED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D1B3FC43144 for ; Fri, 29 Jun 2018 10:59:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 40F8E27D88 for ; Fri, 29 Jun 2018 10:59:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lightnvm-io.20150623.gappssmtp.com header.i=@lightnvm-io.20150623.gappssmtp.com header.b="SYjZLN0q" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 40F8E27D88 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lightnvm.io Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755009AbeF2K7x (ORCPT ); Fri, 29 Jun 2018 06:59:53 -0400 Received: from mail-lj1-f193.google.com ([209.85.208.193]:41282 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752311AbeF2K7v (ORCPT ); Fri, 29 Jun 2018 06:59:51 -0400 Received: by mail-lj1-f193.google.com with SMTP id a17-v6so3863339ljd.8 for ; Fri, 29 Jun 2018 03:59:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lightnvm-io.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=poiOVIJB/Vtsg/rHmELMuD7y1GyhVc7wh1gDCPs3D7A=; b=SYjZLN0qmDm6Wt162JAT2RxmFbiYe6/Vp6Ghluz8wkLEyZxq7Zgkprev0R2bAONGoY jkbJ73IIQHRWCYPWdjYRkkQkws4ZYykYGEqaB3esbQdxkchTh6BssMZJ2VCnBlsSLzdP imNgFAyXKNwvnaR/HA5CXnmy7Dsm+wSiqpG+n49qBtXG70LosdIaSVyar10SJrIUSGsr QCDaq94+0jUDhSpF22edvHBVH55WxKlptWMiVqaqwF2NyunCb4AXcWE1vCfZHAkdUIAN T0fKIWU5jU1r/08WUesd40jO4M4XDJl45/WaxaBJLyetSNqsQyf36yEOM+sxyNDxAYqy EFzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=poiOVIJB/Vtsg/rHmELMuD7y1GyhVc7wh1gDCPs3D7A=; b=aCqUTNi+5sJ78fDVtiJhk8wtjKkB15BJfqVqD8vYjbY6CQ4PodFmbwSq8E+nCmsIn0 sSpzi+MA23/Ef71zRwiKdpxxY74a/ceqK2zvFJUZb9pnjTKZKitDNQBSpJNVIoAIaXyq Ie+ZhDoi8nibPaSXZL+9cnThDHYjA6iu8ZVl+0XW50nyhZB6Dfsis0XoKAvZrcDpE+1N bdWVFt04VA0OHGDSlwgHMXMVSA4yXxXw9KT7675GJmbw/ndx0/r5wMYx6u4vflSyvcl4 uszj4tVHThr7rxDmk2SriqCvFNs91TdH42Bc/dxPoR2O9NPrn4jGMXxFtD0dfKtokpwy d4rQ== X-Gm-Message-State: APt69E2iEMiBmN+zH0qAvT7i9beA1QTsPEEouR00REJGXiSDjxZ5MEc7 +4TunxbQPRdhIlpMhi97EqP34o4E X-Google-Smtp-Source: AAOMgpdssSh5iC6bXhZX3ECSM5KOy6YYjZ5C2LaXz7zwO111s9mWvpIydnIJMRt9r6QF47cerronfw== X-Received: by 2002:a2e:90c5:: with SMTP id o5-v6mr9481557ljg.15.1530269989287; Fri, 29 Jun 2018 03:59:49 -0700 (PDT) Received: from [192.168.0.10] (95-166-82-66-cable.dk.customer.tdc.net. [95.166.82.66]) by smtp.googlemail.com with ESMTPSA id r66-v6sm554321ljb.51.2018.06.29.03.59.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 29 Jun 2018 03:59:48 -0700 (PDT) Subject: Re: [PATCH v2] lightnvm: pblk: expose generic disk name on pr_* msgs To: javier@cnexlabs.com Cc: igor.j.konopko@intel.com, marcin.dziegielewski@intel.com, hans.holmberg@cnexlabs.com, hlitz@ucsc.edu, youngtack.jin@circuitblvd.com, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org References: <20180628134305.26910-1-mb@lightnvm.io> <72C0D646-DD42-4DE9-877B-27A028A0C7DA@cnexlabs.com> From: =?UTF-8?Q?Matias_Bj=c3=b8rling?= Message-ID: <0a83d2bd-c41b-4ecc-5ee8-f1e7e6aae30c@lightnvm.io> Date: Fri, 29 Jun 2018 12:59:47 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: <72C0D646-DD42-4DE9-877B-27A028A0C7DA@cnexlabs.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/29/2018 11:36 AM, Javier Gonzalez wrote: >> On 28 Jun 2018, at 15.43, Matias Bjørling wrote: >> >> The error messages in pblk does not say which pblk instance that >> a message occurred from. Update each error message to reflect the >> instance it belongs to, and also prefix it with pblk, so we know >> the message comes from the pblk module. >> >> Signed-off-by: Matias Bjørling >> > > This could be a good moment to make error reporting mroe consistent. > Some times we used "could not ..." and others "failed to ...". Agree. This should properly be another patch, such that it does not pollute the raw conversion. > > There is also an unnecessary error for a memory allocation (see > checkpatch). That is intentional since I wanted to keep the existing wording. Although, I also looked at it, and kind of came to the conclusion that it was put there for a reason (since exports more than a no memory message). > > See below. > >> --- >> >> Forgot to test with NVM_PBLK_DEBUG on. Fixed up the broken code. >> --- >> drivers/lightnvm/pblk-core.c | 51 +++++++++++++------------- >> drivers/lightnvm/pblk-gc.c | 32 ++++++++--------- >> drivers/lightnvm/pblk-init.c | 78 ++++++++++++++++++++-------------------- >> drivers/lightnvm/pblk-rb.c | 8 ++--- >> drivers/lightnvm/pblk-read.c | 25 ++++++------- >> drivers/lightnvm/pblk-recovery.c | 44 +++++++++++------------ >> drivers/lightnvm/pblk-sysfs.c | 5 ++- >> drivers/lightnvm/pblk-write.c | 21 +++++------ >> drivers/lightnvm/pblk.h | 29 ++++++++++----- >> 9 files changed, 153 insertions(+), 140 deletions(-) >> >> diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c >> index 66ab1036f2fb..b829460fe827 100644 >> --- a/drivers/lightnvm/pblk-core.c >> +++ b/drivers/lightnvm/pblk-core.c >> @@ -35,7 +35,7 @@ static void pblk_line_mark_bb(struct work_struct *work) >> line = &pblk->lines[pblk_ppa_to_line(*ppa)]; >> pos = pblk_ppa_to_pos(&dev->geo, *ppa); >> >> - pr_err("pblk: failed to mark bb, line:%d, pos:%d\n", >> + pblk_err(pblk, "failed to mark bb, line:%d, pos:%d\n", >> line->id, pos); >> } >> >> @@ -51,12 +51,12 @@ static void pblk_mark_bb(struct pblk *pblk, struct pblk_line *line, >> struct ppa_addr *ppa; >> int pos = pblk_ppa_to_pos(geo, ppa_addr); >> >> - pr_debug("pblk: erase failed: line:%d, pos:%d\n", line->id, pos); >> + pblk_debug(pblk, "erase failed: line:%d, pos:%d\n", line->id, pos); >> atomic_long_inc(&pblk->erase_failed); >> >> atomic_dec(&line->blk_in_line); >> if (test_and_set_bit(pos, line->blk_bitmap)) >> - pr_err("pblk: attempted to erase bb: line:%d, pos:%d\n", >> + pblk_err(pblk, "attempted to erase bb: line:%d, pos:%d\n", >> line->id, pos); >> >> /* Not necessary to mark bad blocks on 2.0 spec. */ >> @@ -274,7 +274,7 @@ void pblk_free_rqd(struct pblk *pblk, struct nvm_rq *rqd, int type) >> pool = &pblk->e_rq_pool; >> break; >> default: >> - pr_err("pblk: trying to free unknown rqd type\n"); >> + pblk_err(pblk, "trying to free unknown rqd type\n"); >> return; >> } >> >> @@ -310,7 +310,7 @@ int pblk_bio_add_pages(struct pblk *pblk, struct bio *bio, gfp_t flags, >> >> ret = bio_add_pc_page(q, bio, page, PBLK_EXPOSED_PAGE_SIZE, 0); >> if (ret != PBLK_EXPOSED_PAGE_SIZE) { >> - pr_err("pblk: could not add page to bio\n"); >> + pblk_err(pblk, "could not add page to bio\n"); >> mempool_free(page, &pblk->page_bio_pool); >> goto err; >> } >> @@ -410,7 +410,7 @@ struct list_head *pblk_line_gc_list(struct pblk *pblk, struct pblk_line *line) >> line->state = PBLK_LINESTATE_CORRUPT; >> line->gc_group = PBLK_LINEGC_NONE; >> move_list = &l_mg->corrupt_list; >> - pr_err("pblk: corrupted vsc for line %d, vsc:%d (%d/%d/%d)\n", >> + pblk_err(pblk, "corrupted vsc for line %d, vsc:%d (%d/%d/%d)\n", >> line->id, vsc, >> line->sec_in_line, >> lm->high_thrs, lm->mid_thrs); >> @@ -452,7 +452,7 @@ void pblk_log_read_err(struct pblk *pblk, struct nvm_rq *rqd) >> atomic_long_inc(&pblk->read_failed); >> break; >> default: >> - pr_err("pblk: unknown read error:%d\n", rqd->error); >> + pblk_err(pblk, "unknown read error:%d\n", rqd->error); >> } >> #ifdef CONFIG_NVM_PBLK_DEBUG >> pblk_print_failed_rqd(pblk, rqd, rqd->error); >> @@ -517,7 +517,7 @@ struct bio *pblk_bio_map_addr(struct pblk *pblk, void *data, >> for (i = 0; i < nr_secs; i++) { >> page = vmalloc_to_page(kaddr); >> if (!page) { >> - pr_err("pblk: could not map vmalloc bio\n"); >> + pblk_err(pblk, "could not map vmalloc bio\n"); >> bio_put(bio); >> bio = ERR_PTR(-ENOMEM); >> goto out; >> @@ -525,7 +525,7 @@ struct bio *pblk_bio_map_addr(struct pblk *pblk, void *data, >> >> ret = bio_add_pc_page(dev->q, bio, page, PAGE_SIZE, 0); >> if (ret != PAGE_SIZE) { >> - pr_err("pblk: could not add page to bio\n"); >> + pblk_err(pblk, "could not add page to bio\n"); >> bio_put(bio); >> bio = ERR_PTR(-ENOMEM); >> goto out; >> @@ -711,7 +711,7 @@ static int pblk_line_submit_emeta_io(struct pblk *pblk, struct pblk_line *line, >> while (test_bit(pos, line->blk_bitmap)) { >> paddr += min; >> if (pblk_boundary_paddr_checks(pblk, paddr)) { >> - pr_err("pblk: corrupt emeta line:%d\n", >> + pblk_err(pblk, "corrupt emeta line:%d\n", >> line->id); >> bio_put(bio); >> ret = -EINTR; >> @@ -723,7 +723,7 @@ static int pblk_line_submit_emeta_io(struct pblk *pblk, struct pblk_line *line, >> } >> >> if (pblk_boundary_paddr_checks(pblk, paddr + min)) { >> - pr_err("pblk: corrupt emeta line:%d\n", >> + pblk_err(pblk, "corrupt emeta line:%d\n", >> line->id); >> bio_put(bio); >> ret = -EINTR; >> @@ -738,7 +738,7 @@ static int pblk_line_submit_emeta_io(struct pblk *pblk, struct pblk_line *line, >> >> ret = pblk_submit_io_sync(pblk, &rqd); >> if (ret) { >> - pr_err("pblk: emeta I/O submission failed: %d\n", ret); >> + pblk_err(pblk, "emeta I/O submission failed: %d\n", ret); >> bio_put(bio); >> goto free_rqd_dma; >> } >> @@ -843,7 +843,7 @@ static int pblk_line_submit_smeta_io(struct pblk *pblk, struct pblk_line *line, >> */ >> ret = pblk_submit_io_sync(pblk, &rqd); >> if (ret) { >> - pr_err("pblk: smeta I/O submission failed: %d\n", ret); >> + pblk_err(pblk, "smeta I/O submission failed: %d\n", ret); >> bio_put(bio); >> goto free_ppa_list; >> } >> @@ -905,7 +905,7 @@ static int pblk_blk_erase_sync(struct pblk *pblk, struct ppa_addr ppa) >> struct nvm_tgt_dev *dev = pblk->dev; >> struct nvm_geo *geo = &dev->geo; >> >> - pr_err("pblk: could not sync erase line:%d,blk:%d\n", >> + pblk_err(pblk, "could not sync erase line:%d,blk:%d\n", >> pblk_ppa_to_line(ppa), >> pblk_ppa_to_pos(geo, ppa)); >> >> @@ -945,7 +945,7 @@ int pblk_line_erase(struct pblk *pblk, struct pblk_line *line) >> >> ret = pblk_blk_erase_sync(pblk, ppa); >> if (ret) { >> - pr_err("pblk: failed to erase line %d\n", line->id); >> + pblk_err(pblk, "failed to erase line %d\n", line->id); >> return ret; >> } >> } while (1); >> @@ -1012,7 +1012,7 @@ static int pblk_line_init_metadata(struct pblk *pblk, struct pblk_line *line, >> list_add_tail(&line->list, &l_mg->bad_list); >> spin_unlock(&l_mg->free_lock); >> >> - pr_debug("pblk: line %d is bad\n", line->id); >> + pblk_debug(pblk, "line %d is bad\n", line->id); >> >> return 0; >> } >> @@ -1122,7 +1122,7 @@ static int pblk_line_init_bb(struct pblk *pblk, struct pblk_line *line, >> line->cur_sec = off + lm->smeta_sec; >> >> if (init && pblk_line_submit_smeta_io(pblk, line, off, PBLK_WRITE)) { >> - pr_debug("pblk: line smeta I/O failed. Retry\n"); >> + pblk_debug(pblk, "line smeta I/O failed. Retry\n"); >> return 0; >> } >> >> @@ -1154,7 +1154,7 @@ static int pblk_line_init_bb(struct pblk *pblk, struct pblk_line *line, >> spin_unlock(&line->lock); >> >> list_add_tail(&line->list, &l_mg->bad_list); >> - pr_err("pblk: unexpected line %d is bad\n", line->id); >> + pblk_err(pblk, "unexpected line %d is bad\n", line->id); >> >> return 0; >> } >> @@ -1299,7 +1299,7 @@ struct pblk_line *pblk_line_get(struct pblk *pblk) >> >> retry: >> if (list_empty(&l_mg->free_list)) { >> - pr_err("pblk: no free lines\n"); >> + pblk_err(pblk, "no free lines\n"); >> return NULL; >> } >> >> @@ -1315,7 +1315,7 @@ struct pblk_line *pblk_line_get(struct pblk *pblk) >> >> list_add_tail(&line->list, &l_mg->bad_list); >> >> - pr_debug("pblk: line %d is bad\n", line->id); >> + pblk_debug(pblk, "line %d is bad\n", line->id); >> goto retry; >> } >> >> @@ -1329,7 +1329,7 @@ struct pblk_line *pblk_line_get(struct pblk *pblk) >> list_add(&line->list, &l_mg->corrupt_list); >> goto retry; >> default: >> - pr_err("pblk: failed to prepare line %d\n", line->id); >> + pblk_err(pblk, "failed to prepare line %d\n", line->id); >> list_add(&line->list, &l_mg->free_list); >> l_mg->nr_free_lines++; >> return NULL; >> @@ -1477,7 +1477,7 @@ static void pblk_line_close_meta_sync(struct pblk *pblk) >> >> ret = pblk_submit_meta_io(pblk, line); >> if (ret) { >> - pr_err("pblk: sync meta line %d failed (%d)\n", >> + pblk_err(pblk, "sync meta line %d failed (%d)\n", >> line->id, ret); >> return; >> } >> @@ -1507,7 +1507,7 @@ void __pblk_pipeline_flush(struct pblk *pblk) >> >> ret = pblk_recov_pad(pblk); >> if (ret) { >> - pr_err("pblk: could not close data on teardown(%d)\n", ret); >> + pblk_err(pblk, "could not close data on teardown(%d)\n", ret); >> return; >> } >> >> @@ -1687,7 +1687,7 @@ int pblk_blk_erase_async(struct pblk *pblk, struct ppa_addr ppa) >> struct nvm_tgt_dev *dev = pblk->dev; >> struct nvm_geo *geo = &dev->geo; >> >> - pr_err("pblk: could not async erase line:%d,blk:%d\n", >> + pblk_err(pblk, "could not async erase line:%d,blk:%d\n", >> pblk_ppa_to_line(ppa), >> pblk_ppa_to_pos(geo, ppa)); >> } >> @@ -1866,7 +1866,8 @@ static void __pblk_down_page(struct pblk *pblk, struct ppa_addr *ppa_list, >> >> ret = down_timeout(&rlun->wr_sem, msecs_to_jiffies(30000)); >> if (ret == -ETIME || ret == -EINTR) >> - pr_err("pblk: taking lun semaphore timed out: err %d\n", -ret); >> + pblk_err(pblk, "taking lun semaphore timed out: err %d\n", >> + -ret); >> } >> >> void pblk_down_page(struct pblk *pblk, struct ppa_addr *ppa_list, int nr_ppas) >> diff --git a/drivers/lightnvm/pblk-gc.c b/drivers/lightnvm/pblk-gc.c >> index ec56f581397b..93e06b613b6b 100644 >> --- a/drivers/lightnvm/pblk-gc.c >> +++ b/drivers/lightnvm/pblk-gc.c >> @@ -90,7 +90,7 @@ static void pblk_gc_line_ws(struct work_struct *work) >> >> gc_rq->data = vmalloc(gc_rq->nr_secs * geo->csecs); >> if (!gc_rq->data) { >> - pr_err("pblk: could not GC line:%d (%d/%d)\n", >> + pblk_err(pblk, "could not GC line:%d (%d/%d)\n", >> line->id, *line->vsc, gc_rq->nr_secs); > > No need for this check. Maybe you can move the error to the out: tag and > report the same as when pblk_submit_read_gc() fails. > >> goto out; >> } >> @@ -98,7 +98,7 @@ static void pblk_gc_line_ws(struct work_struct *work) >> /* Read from GC victim block */ >> ret = pblk_submit_read_gc(pblk, gc_rq); >> if (ret) { >> - pr_err("pblk: failed GC read in line:%d (err:%d)\n", >> + pblk_err(pblk, "failed GC read in line:%d (err:%d)\n", >> line->id, ret); >> goto out; >> } >> @@ -146,7 +146,7 @@ static __le64 *get_lba_list_from_emeta(struct pblk *pblk, >> >> ret = pblk_line_read_emeta(pblk, line, emeta_buf); >> if (ret) { >> - pr_err("pblk: line %d read emeta failed (%d)\n", >> + pblk_err(pblk, "line %d read emeta failed (%d)\n", >> line->id, ret); >> pblk_mfree(emeta_buf, l_mg->emeta_alloc_type); >> return NULL; >> @@ -160,7 +160,7 @@ static __le64 *get_lba_list_from_emeta(struct pblk *pblk, >> >> ret = pblk_recov_check_emeta(pblk, emeta_buf); >> if (ret) { >> - pr_err("pblk: inconsistent emeta (line %d)\n", >> + pblk_err(pblk, "inconsistent emeta (line %d)\n", >> line->id); >> pblk_mfree(emeta_buf, l_mg->emeta_alloc_type); >> return NULL; >> @@ -201,7 +201,7 @@ static void pblk_gc_line_prepare_ws(struct work_struct *work) >> } else { >> lba_list = get_lba_list_from_emeta(pblk, line); >> if (!lba_list) { >> - pr_err("pblk: could not interpret emeta (line %d)\n", >> + pblk_err(pblk, "could not interpret emeta (line %d)\n", >> line->id); >> goto fail_free_invalid_bitmap; >> } >> @@ -213,7 +213,7 @@ static void pblk_gc_line_prepare_ws(struct work_struct *work) >> spin_unlock(&line->lock); >> >> if (sec_left < 0) { >> - pr_err("pblk: corrupted GC line (%d)\n", line->id); >> + pblk_err(pblk, "corrupted GC line (%d)\n", line->id); >> goto fail_free_lba_list; >> } >> >> @@ -289,7 +289,7 @@ static void pblk_gc_line_prepare_ws(struct work_struct *work) >> kref_put(&line->ref, pblk_line_put); >> atomic_dec(&gc->read_inflight_gc); >> >> - pr_err("pblk: Failed to GC line %d\n", line->id); >> + pblk_err(pblk, "failed to GC line %d\n", line->id); >> } >> >> static int pblk_gc_line(struct pblk *pblk, struct pblk_line *line) >> @@ -297,7 +297,7 @@ static int pblk_gc_line(struct pblk *pblk, struct pblk_line *line) >> struct pblk_gc *gc = &pblk->gc; >> struct pblk_line_ws *line_ws; >> >> - pr_debug("pblk: line '%d' being reclaimed for GC\n", line->id); >> + pblk_debug(pblk, "line '%d' being reclaimed for GC\n", line->id); >> >> line_ws = kmalloc(sizeof(struct pblk_line_ws), GFP_KERNEL); >> if (!line_ws) >> @@ -351,7 +351,7 @@ static int pblk_gc_read(struct pblk *pblk) >> pblk_gc_kick(pblk); >> >> if (pblk_gc_line(pblk, line)) >> - pr_err("pblk: failed to GC line %d\n", line->id); >> + pblk_err(pblk, "failed to GC line %d\n", line->id); >> >> return 0; >> } >> @@ -523,7 +523,7 @@ static int pblk_gc_reader_ts(void *data) >> } >> >> #ifdef CONFIG_NVM_PBLK_DEBUG >> - pr_info("pblk: flushing gc pipeline, %d lines left\n", >> + pblk_info(pblk, "flushing gc pipeline, %d lines left\n", >> atomic_read(&gc->pipeline_gc)); >> #endif >> >> @@ -540,7 +540,7 @@ static int pblk_gc_reader_ts(void *data) >> static void pblk_gc_start(struct pblk *pblk) >> { >> pblk->gc.gc_active = 1; >> - pr_debug("pblk: gc start\n"); >> + pblk_debug(pblk, "gc start\n"); >> } >> >> void pblk_gc_should_start(struct pblk *pblk) >> @@ -605,14 +605,14 @@ int pblk_gc_init(struct pblk *pblk) >> >> gc->gc_ts = kthread_create(pblk_gc_ts, pblk, "pblk-gc-ts"); >> if (IS_ERR(gc->gc_ts)) { >> - pr_err("pblk: could not allocate GC main kthread\n"); >> + pblk_err(pblk, "could not allocate GC main kthread\n"); >> return PTR_ERR(gc->gc_ts); >> } >> >> gc->gc_writer_ts = kthread_create(pblk_gc_writer_ts, pblk, >> "pblk-gc-writer-ts"); >> if (IS_ERR(gc->gc_writer_ts)) { >> - pr_err("pblk: could not allocate GC writer kthread\n"); >> + pblk_err(pblk, "could not allocate GC writer kthread\n"); >> ret = PTR_ERR(gc->gc_writer_ts); >> goto fail_free_main_kthread; >> } >> @@ -620,7 +620,7 @@ int pblk_gc_init(struct pblk *pblk) >> gc->gc_reader_ts = kthread_create(pblk_gc_reader_ts, pblk, >> "pblk-gc-reader-ts"); >> if (IS_ERR(gc->gc_reader_ts)) { >> - pr_err("pblk: could not allocate GC reader kthread\n"); >> + pblk_err(pblk, "could not allocate GC reader kthread\n"); >> ret = PTR_ERR(gc->gc_reader_ts); >> goto fail_free_writer_kthread; >> } >> @@ -641,7 +641,7 @@ int pblk_gc_init(struct pblk *pblk) >> gc->gc_line_reader_wq = alloc_workqueue("pblk-gc-line-reader-wq", >> WQ_MEM_RECLAIM | WQ_UNBOUND, PBLK_GC_MAX_READERS); >> if (!gc->gc_line_reader_wq) { >> - pr_err("pblk: could not allocate GC line reader workqueue\n"); >> + pblk_err(pblk, "could not allocate GC line reader workqueue\n"); >> ret = -ENOMEM; >> goto fail_free_reader_kthread; >> } >> @@ -650,7 +650,7 @@ int pblk_gc_init(struct pblk *pblk) >> gc->gc_reader_wq = alloc_workqueue("pblk-gc-line_wq", >> WQ_MEM_RECLAIM | WQ_UNBOUND, 1); >> if (!gc->gc_reader_wq) { >> - pr_err("pblk: could not allocate GC reader workqueue\n"); >> + pblk_err(pblk, "could not allocate GC reader workqueue\n"); >> ret = -ENOMEM; >> goto fail_free_reader_line_wq; >> } >> diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c >> index aa2426403171..d87d38f063fa 100644 >> --- a/drivers/lightnvm/pblk-init.c >> +++ b/drivers/lightnvm/pblk-init.c >> @@ -117,13 +117,13 @@ static int pblk_l2p_recover(struct pblk *pblk, bool factory_init) >> } else { >> line = pblk_recov_l2p(pblk); >> if (IS_ERR(line)) { >> - pr_err("pblk: could not recover l2p table\n"); >> + pblk_err(pblk, "could not recover l2p table\n"); >> return -EFAULT; >> } >> } >> >> #ifdef CONFIG_NVM_PBLK_DEBUG >> - pr_info("pblk init: L2P CRC: %x\n", pblk_l2p_crc(pblk)); >> + pblk_info(pblk, "init: L2P CRC: %x\n", pblk_l2p_crc(pblk)); >> #endif >> >> /* Free full lines directly as GC has not been started yet */ >> @@ -166,7 +166,7 @@ static int pblk_l2p_init(struct pblk *pblk, bool factory_init) >> static void pblk_rwb_free(struct pblk *pblk) >> { >> if (pblk_rb_tear_down_check(&pblk->rwb)) >> - pr_err("pblk: write buffer error on tear down\n"); >> + pblk_err(pblk, "write buffer error on tear down\n"); >> >> pblk_rb_data_free(&pblk->rwb); >> vfree(pblk_rb_entries_ref(&pblk->rwb)); >> @@ -203,7 +203,8 @@ static int pblk_rwb_init(struct pblk *pblk) >> /* Minimum pages needed within a lun */ >> #define ADDR_POOL_SIZE 64 >> >> -static int pblk_set_addrf_12(struct nvm_geo *geo, struct nvm_addrf_12 *dst) >> +static int pblk_set_addrf_12(struct pblk *pblk, struct nvm_geo *geo, >> + struct nvm_addrf_12 *dst) >> { >> struct nvm_addrf_12 *src = (struct nvm_addrf_12 *)&geo->addrf; >> int power_len; >> @@ -211,14 +212,14 @@ static int pblk_set_addrf_12(struct nvm_geo *geo, struct nvm_addrf_12 *dst) >> /* Re-calculate channel and lun format to adapt to configuration */ >> power_len = get_count_order(geo->num_ch); >> if (1 << power_len != geo->num_ch) { >> - pr_err("pblk: supports only power-of-two channel config.\n"); >> + pblk_err(pblk, "supports only power-of-two channel config.\n"); >> return -EINVAL; >> } >> dst->ch_len = power_len; >> >> power_len = get_count_order(geo->num_lun); >> if (1 << power_len != geo->num_lun) { >> - pr_err("pblk: supports only power-of-two LUN config.\n"); >> + pblk_err(pblk, "supports only power-of-two LUN config.\n"); >> return -EINVAL; >> } >> dst->lun_len = power_len; >> @@ -285,18 +286,19 @@ static int pblk_set_addrf(struct pblk *pblk) >> case NVM_OCSSD_SPEC_12: >> div_u64_rem(geo->clba, pblk->min_write_pgs, &mod); >> if (mod) { >> - pr_err("pblk: bad configuration of sectors/pages\n"); >> + pblk_err(pblk, "bad configuration of sectors/pages\n"); >> return -EINVAL; >> } >> >> - pblk->addrf_len = pblk_set_addrf_12(geo, (void *)&pblk->addrf); >> + pblk->addrf_len = pblk_set_addrf_12(pblk, geo, >> + (void *)&pblk->addrf); >> break; >> case NVM_OCSSD_SPEC_20: >> pblk->addrf_len = pblk_set_addrf_20(geo, (void *)&pblk->addrf, >> - &pblk->uaddrf); >> + &pblk->uaddrf); >> break; >> default: >> - pr_err("pblk: OCSSD revision not supported (%d)\n", >> + pblk_err(pblk, "OCSSD revision not supported (%d)\n", >> geo->version); >> return -EINVAL; >> } >> @@ -375,7 +377,7 @@ static int pblk_core_init(struct pblk *pblk) >> pblk_set_sec_per_write(pblk, pblk->min_write_pgs); >> >> if (pblk->max_write_pgs > PBLK_MAX_REQ_ADDRS) { >> - pr_err("pblk: vector list too big(%u > %u)\n", >> + pblk_err(pblk, "vector list too big(%u > %u)\n", >> pblk->max_write_pgs, PBLK_MAX_REQ_ADDRS); >> return -EINVAL; >> } >> @@ -608,7 +610,7 @@ static int pblk_luns_init(struct pblk *pblk) >> >> /* TODO: Implement unbalanced LUN support */ >> if (geo->num_lun < 0) { >> - pr_err("pblk: unbalanced LUN config.\n"); >> + pblk_err(pblk, "unbalanced LUN config.\n"); >> return -EINVAL; >> } >> >> @@ -1027,7 +1029,7 @@ static int pblk_line_meta_init(struct pblk *pblk) >> lm->emeta_sec[0], geo->clba); >> >> if (lm->min_blk_line > lm->blk_per_line) { >> - pr_err("pblk: config. not supported. Min. LUN in line:%d\n", >> + pblk_err(pblk, "config. not supported. Min. LUN in line:%d\n", >> lm->blk_per_line); >> return -EINVAL; >> } >> @@ -1079,7 +1081,7 @@ static int pblk_lines_init(struct pblk *pblk) >> } >> >> if (!nr_free_chks) { >> - pr_err("pblk: too many bad blocks prevent for sane instance\n"); >> + pblk_err(pblk, "too many bad blocks prevent for sane instance\n"); >> return -EINTR; >> } >> >> @@ -1109,7 +1111,7 @@ static int pblk_writer_init(struct pblk *pblk) >> int err = PTR_ERR(pblk->writer_ts); >> >> if (err != -EINTR) >> - pr_err("pblk: could not allocate writer kthread (%d)\n", >> + pblk_err(pblk, "could not allocate writer kthread (%d)\n", >> err); >> return err; >> } >> @@ -1155,7 +1157,7 @@ static void pblk_tear_down(struct pblk *pblk, bool graceful) >> pblk_rb_sync_l2p(&pblk->rwb); >> pblk_rl_free(&pblk->rl); >> >> - pr_debug("pblk: consistent tear down (graceful:%d)\n", graceful); >> + pblk_debug(pblk, "consistent tear down (graceful:%d)\n", graceful); >> } >> >> static void pblk_exit(void *private, bool graceful) >> @@ -1167,7 +1169,7 @@ static void pblk_exit(void *private, bool graceful) >> pblk_tear_down(pblk, graceful); >> >> #ifdef CONFIG_NVM_PBLK_DEBUG >> - pr_info("pblk exit: L2P CRC: %x\n", pblk_l2p_crc(pblk)); >> + pblk_info(pblk, "exit: L2P CRC: %x\n", pblk_l2p_crc(pblk)); >> #endif >> >> pblk_free(pblk); >> @@ -1190,20 +1192,6 @@ static void *pblk_init(struct nvm_tgt_dev *dev, struct gendisk *tdisk, >> struct pblk *pblk; >> int ret; >> >> - /* pblk supports 1.2 and 2.0 versions */ >> - if (!(geo->version == NVM_OCSSD_SPEC_12 || >> - geo->version == NVM_OCSSD_SPEC_20)) { >> - pr_err("pblk: OCSSD version not supported (%u)\n", >> - geo->version); >> - return ERR_PTR(-EINVAL); >> - } >> - >> - if (geo->version == NVM_OCSSD_SPEC_12 && geo->dom & NVM_RSP_L2P) { >> - pr_err("pblk: host-side L2P table not supported. (%x)\n", >> - geo->dom); >> - return ERR_PTR(-EINVAL); >> - } >> - >> pblk = kzalloc(sizeof(struct pblk), GFP_KERNEL); >> if (!pblk) >> return ERR_PTR(-ENOMEM); >> @@ -1213,6 +1201,19 @@ static void *pblk_init(struct nvm_tgt_dev *dev, struct gendisk *tdisk, >> pblk->state = PBLK_STATE_RUNNING; >> pblk->gc.gc_enabled = 0; >> >> + if (!(geo->version == NVM_OCSSD_SPEC_12 || >> + geo->version == NVM_OCSSD_SPEC_20)) { >> + pblk_err(pblk, "OCSSD version not supported (%u)\n", >> + geo->version); >> + return ERR_PTR(-EINVAL); >> + } >> + >> + if (geo->version == NVM_OCSSD_SPEC_12 && geo->dom & NVM_RSP_L2P) { >> + pblk_err(pblk, "host-side L2P table not supported. (%x)\n", >> + geo->dom); >> + return ERR_PTR(-EINVAL); >> + } >> + > > Why move the check down? At this point the instance is not even created, > so you can fail directly. In any case, here you should set ret and goto > fail to free pblk. > pblk_err depends on the gendisk diskname, which is within the ->disk parameter. >