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, URIBL_BLOCKED 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 7A73BC43141 for ; Fri, 29 Jun 2018 11:08:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 13C2127DB0 for ; Fri, 29 Jun 2018 11:08:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=cnexlabs.onmicrosoft.com header.i=@cnexlabs.onmicrosoft.com header.b="P7YCpiww" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 13C2127DB0 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=cnexlabs.com 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 S935760AbeF2LIE (ORCPT ); Fri, 29 Jun 2018 07:08:04 -0400 Received: from mail-sn1nam02on0075.outbound.protection.outlook.com ([104.47.36.75]:36256 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932119AbeF2LIA (ORCPT ); Fri, 29 Jun 2018 07:08:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cnexlabs.onmicrosoft.com; s=selector1-cnexlabs-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sEX6WkNWKnqQdDY19vl0yFaAk4AULmrnvzz74Nga1v4=; b=P7YCpiwwa/74+bwOFK3RR95gB24T4OvUhi0EAZs78gn8P9iXTwQcv8uL7CZhHkAZeAbBUkI7BGGHbPtEnWz9YMeVmyzCuGYMm2v0XY2W9iKRYWZLMfdwCiw+15e5vtbaDtLVIzED2S14/AbtvRSi8batiVLLwzAMDah+xRhtSCo= Received: from CO2PR06MB538.namprd06.prod.outlook.com (10.141.199.23) by CO2PR06MB537.namprd06.prod.outlook.com (10.141.199.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.906.23; Fri, 29 Jun 2018 11:07:54 +0000 Received: from CO2PR06MB538.namprd06.prod.outlook.com ([fe80::f168:d301:338d:cdc2]) by CO2PR06MB538.namprd06.prod.outlook.com ([fe80::f168:d301:338d:cdc2%5]) with mapi id 15.20.0906.025; Fri, 29 Jun 2018 11:07:52 +0000 From: Javier Gonzalez To: =?utf-8?B?TWF0aWFzIEJqw7hybGluZw==?= CC: "Konopko, Igor J" , "marcin.dziegielewski@intel.com" , Hans Holmberg , Heiner Litz , Young Tack Tack Jin , "linux-block@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v2] lightnvm: pblk: expose generic disk name on pr_* msgs Thread-Topic: [PATCH v2] lightnvm: pblk: expose generic disk name on pr_* msgs Thread-Index: AQHUDuX5AIAcX9DAS0q5o9m/mfO50KR2+5CAgAAXOoCAAAI+gA== Date: Fri, 29 Jun 2018 11:07:52 +0000 Message-ID: References: <20180628134305.26910-1-mb@lightnvm.io> <72C0D646-DD42-4DE9-877B-27A028A0C7DA@cnexlabs.com> <0a83d2bd-c41b-4ecc-5ee8-f1e7e6aae30c@lightnvm.io> In-Reply-To: <0a83d2bd-c41b-4ecc-5ee8-f1e7e6aae30c@lightnvm.io> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=javier@cnexlabs.com; x-originating-ip: [193.106.164.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;CO2PR06MB537;7:qqmUd9sekMeFQOgtmxE+Lypu3n6dhwrcRWt6enzXyDM/bOFLllkdDCZgGjCjS63G1cUaWZRyEU/HzCXwPTeG7evVo+DCH/B1hCLFn+6mlB62hJ1lF/2vNDJ+i75o8Gk0L/OLpTKPSujDKCobWFJDsc9X3wmEtSSWwOjpGwRnYyCnHUrviXoSDNiWQZdvvRGRkFHoejLmsNkJOURvr0TmjBqPCjR9FzNZXlVxMrUdinpt0BhcuhYA13a09f/0CLnX x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-forefront-antispam-report: SFV:SKI;SCL:-1;SFV:NSPM;SFS:(10009020)(366004)(346002)(39840400004)(376002)(396003)(136003)(199004)(189003)(186003)(2616005)(486006)(446003)(476003)(26005)(11346002)(99286004)(106356001)(105586002)(5250100002)(6506007)(53546011)(76176011)(6246003)(4326008)(53936002)(25786009)(53946003)(5660300001)(54906003)(33656002)(66066001)(316002)(102836004)(6116002)(6436002)(478600001)(81166006)(81156014)(8936002)(229853002)(6486002)(14454004)(82746002)(97736004)(6916009)(8676002)(3846002)(99936001)(2906002)(68736007)(2900100001)(83716003)(305945005)(14444005)(6512007)(256004)(86362001)(36756003)(7736002)(41533002)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:CO2PR06MB537;H:CO2PR06MB538.namprd06.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; x-ms-office365-filtering-correlation-id: 59db1f76-5abf-4752-6081-08d5ddb08f14 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989117)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600026)(711020)(2017052603328)(7153060)(49563074)(7193020);SRVR:CO2PR06MB537; x-ms-traffictypediagnostic: CO2PR06MB537: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(211171220733660); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(102415395)(6040522)(2401047)(5005006)(8121501046)(3002001)(93006095)(93001095)(10201501046)(3231254)(944501410)(52105095)(149027)(150027)(6041310)(20161123564045)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(6072148)(201708071742011)(7699016);SRVR:CO2PR06MB537;BCL:0;PCL:0;RULEID:;SRVR:CO2PR06MB537; x-forefront-prvs: 0718908305 received-spf: None (protection.outlook.com: cnexlabs.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: PI4a2nITSZ+OlYkyYYCucl6fR3Idirs/4HEdxXgIcqg9C9sDfBO4s/rX1/4OtSm4lthirrgntRR5Tb2tByNKAWrGGJ8Qy7btw1k6nJ9b0sVS9WFwmX4yiDmVEnqcVET+C8x+k91LUn4L4qGclDggF24oUjjgaOBcEA6e5/p7fGZ1vPWgCsPVmvtVNOUa/fexDi0h755D0Ivhs+AsUPAZcAvrmBaNM2M3uS1rqPQBJG2raIzpPaRn+zvBTA4EYV30N/Btxf+FRTGYz1J3GG8lHjLIQycKZmVSKc0vcccxY0Bk7VK/d61nZoSuFKyB8vkgImiONgceEFByQschMPo12HsVd6/LPOv/Oe3JHZeRhbs= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/signed; boundary="Apple-Mail=_FA1B5D04-6D25-4DF8-8F89-59A1F11AB659"; protocol="application/pgp-signature"; micalg=pgp-sha512 MIME-Version: 1.0 X-OriginatorOrg: cnexlabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 59db1f76-5abf-4752-6081-08d5ddb08f14 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jun 2018 11:07:52.4753 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: e40dfc2e-c6c1-463a-a598-38602b2c3cff X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR06MB537 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --Apple-Mail=_FA1B5D04-6D25-4DF8-8F89-59A1F11AB659 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On 29 Jun 2018, at 12.59, Matias Bj=C3=B8rling wrote: >=20 > On 06/29/2018 11:36 AM, Javier Gonzalez wrote: >>> On 28 Jun 2018, at 15.43, Matias Bj=C3=B8rling = wrote: >>>=20 >>> 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. >>>=20 >>> Signed-off-by: Matias Bj=C3=B8rling >> This could be a good moment to make error reporting mroe consistent. >> Some times we used "could not ..." and others "failed to ...". >=20 > Agree. This should properly be another patch, such that it does not > pollute the raw conversion. >=20 Cool. >> There is also an unnecessary error for a memory allocation (see >> checkpatch). >=20 > 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). >=20 Ok. We can have a separate patch to make this better, as mentioned below. >> See below. >>> --- >>>=20 >>> 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(-) >>>=20 >>> 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 =3D &pblk->lines[pblk_ppa_to_line(*ppa)]; >>> pos =3D pblk_ppa_to_pos(&dev->geo, *ppa); >>>=20 >>> - 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); >>> } >>>=20 >>> @@ -51,12 +51,12 @@ static void pblk_mark_bb(struct pblk *pblk, = struct pblk_line *line, >>> struct ppa_addr *ppa; >>> int pos =3D pblk_ppa_to_pos(geo, ppa_addr); >>>=20 >>> - 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); >>>=20 >>> 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); >>>=20 >>> /* 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 =3D &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; >>> } >>>=20 >>> @@ -310,7 +310,7 @@ int pblk_bio_add_pages(struct pblk *pblk, struct = bio *bio, gfp_t flags, >>>=20 >>> ret =3D bio_add_pc_page(q, bio, page, = PBLK_EXPOSED_PAGE_SIZE, 0); >>> if (ret !=3D 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 =3D PBLK_LINESTATE_CORRUPT; >>> line->gc_group =3D PBLK_LINEGC_NONE; >>> move_list =3D &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 =3D 0; i < nr_secs; i++) { >>> page =3D 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 =3D ERR_PTR(-ENOMEM); >>> goto out; >>> @@ -525,7 +525,7 @@ struct bio *pblk_bio_map_addr(struct pblk *pblk, = void *data, >>>=20 >>> ret =3D bio_add_pc_page(dev->q, bio, page, PAGE_SIZE, = 0); >>> if (ret !=3D 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 =3D 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 +=3D 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 =3D -EINTR; >>> @@ -723,7 +723,7 @@ static int pblk_line_submit_emeta_io(struct pblk = *pblk, struct pblk_line *line, >>> } >>>=20 >>> 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 =3D -EINTR; >>> @@ -738,7 +738,7 @@ static int pblk_line_submit_emeta_io(struct pblk = *pblk, struct pblk_line *line, >>>=20 >>> ret =3D 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 =3D 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 =3D pblk->dev; >>> struct nvm_geo *geo =3D &dev->geo; >>>=20 >>> - 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)); >>>=20 >>> @@ -945,7 +945,7 @@ int pblk_line_erase(struct pblk *pblk, struct = pblk_line *line) >>>=20 >>> ret =3D 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); >>>=20 >>> - pr_debug("pblk: line %d is bad\n", line->id); >>> + pblk_debug(pblk, "line %d is bad\n", line->id); >>>=20 >>> return 0; >>> } >>> @@ -1122,7 +1122,7 @@ static int pblk_line_init_bb(struct pblk = *pblk, struct pblk_line *line, >>> line->cur_sec =3D off + lm->smeta_sec; >>>=20 >>> 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; >>> } >>>=20 >>> @@ -1154,7 +1154,7 @@ static int pblk_line_init_bb(struct pblk = *pblk, struct pblk_line *line, >>> spin_unlock(&line->lock); >>>=20 >>> 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); >>>=20 >>> return 0; >>> } >>> @@ -1299,7 +1299,7 @@ struct pblk_line *pblk_line_get(struct pblk = *pblk) >>>=20 >>> retry: >>> if (list_empty(&l_mg->free_list)) { >>> - pr_err("pblk: no free lines\n"); >>> + pblk_err(pblk, "no free lines\n"); >>> return NULL; >>> } >>>=20 >>> @@ -1315,7 +1315,7 @@ struct pblk_line *pblk_line_get(struct pblk = *pblk) >>>=20 >>> list_add_tail(&line->list, &l_mg->bad_list); >>>=20 >>> - pr_debug("pblk: line %d is bad\n", line->id); >>> + pblk_debug(pblk, "line %d is bad\n", line->id); >>> goto retry; >>> } >>>=20 >>> @@ -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) >>>=20 >>> ret =3D 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) >>>=20 >>> ret =3D 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; >>> } >>>=20 >>> @@ -1687,7 +1687,7 @@ int pblk_blk_erase_async(struct pblk *pblk, = struct ppa_addr ppa) >>> struct nvm_tgt_dev *dev =3D pblk->dev; >>> struct nvm_geo *geo =3D &dev->geo; >>>=20 >>> - 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, >>>=20 >>> ret =3D down_timeout(&rlun->wr_sem, msecs_to_jiffies(30000)); >>> if (ret =3D=3D -ETIME || ret =3D=3D -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); >>> } >>>=20 >>> 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) >>>=20 >>> gc_rq->data =3D 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 =3D 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, >>>=20 >>> ret =3D 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, >>>=20 >>> ret =3D 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 =3D 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); >>>=20 >>> 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; >>> } >>>=20 >>> @@ -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); >>>=20 >>> - pr_err("pblk: Failed to GC line %d\n", line->id); >>> + pblk_err(pblk, "failed to GC line %d\n", line->id); >>> } >>>=20 >>> 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 =3D &pblk->gc; >>> struct pblk_line_ws *line_ws; >>>=20 >>> - pr_debug("pblk: line '%d' being reclaimed for GC\n", line->id); >>> + pblk_debug(pblk, "line '%d' being reclaimed for GC\n", = line->id); >>>=20 >>> line_ws =3D 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); >>>=20 >>> 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); >>>=20 >>> return 0; >>> } >>> @@ -523,7 +523,7 @@ static int pblk_gc_reader_ts(void *data) >>> } >>>=20 >>> #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 >>>=20 >>> @@ -540,7 +540,7 @@ static int pblk_gc_reader_ts(void *data) >>> static void pblk_gc_start(struct pblk *pblk) >>> { >>> pblk->gc.gc_active =3D 1; >>> - pr_debug("pblk: gc start\n"); >>> + pblk_debug(pblk, "gc start\n"); >>> } >>>=20 >>> void pblk_gc_should_start(struct pblk *pblk) >>> @@ -605,14 +605,14 @@ int pblk_gc_init(struct pblk *pblk) >>>=20 >>> gc->gc_ts =3D 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); >>> } >>>=20 >>> gc->gc_writer_ts =3D 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 =3D 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 =3D 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 =3D 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 =3D = 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 =3D -ENOMEM; >>> goto fail_free_reader_kthread; >>> } >>> @@ -650,7 +650,7 @@ int pblk_gc_init(struct pblk *pblk) >>> gc->gc_reader_wq =3D 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 =3D -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 =3D 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; >>> } >>> } >>>=20 >>> #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 >>>=20 >>> /* 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"); >>>=20 >>> 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 >>>=20 >>> -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 =3D (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 =3D get_count_order(geo->num_ch); >>> if (1 << power_len !=3D 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 =3D power_len; >>>=20 >>> power_len =3D get_count_order(geo->num_lun); >>> if (1 << power_len !=3D 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 =3D 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; >>> } >>>=20 >>> - pblk->addrf_len =3D pblk_set_addrf_12(geo, (void = *)&pblk->addrf); >>> + pblk->addrf_len =3D pblk_set_addrf_12(pblk, geo, >>> + (void = *)&pblk->addrf); >>> break; >>> case NVM_OCSSD_SPEC_20: >>> pblk->addrf_len =3D 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); >>>=20 >>> 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) >>>=20 >>> /* 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; >>> } >>>=20 >>> @@ -1027,7 +1029,7 @@ static int pblk_line_meta_init(struct pblk = *pblk) >>> lm->emeta_sec[0], geo->clba); >>>=20 >>> 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) >>> } >>>=20 >>> 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; >>> } >>>=20 >>> @@ -1109,7 +1111,7 @@ static int pblk_writer_init(struct pblk *pblk) >>> int err =3D PTR_ERR(pblk->writer_ts); >>>=20 >>> if (err !=3D -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); >>>=20 >>> - pr_debug("pblk: consistent tear down (graceful:%d)\n", = graceful); >>> + pblk_debug(pblk, "consistent tear down (graceful:%d)\n", = graceful); >>> } >>>=20 >>> 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); >>>=20 >>> #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 >>>=20 >>> pblk_free(pblk); >>> @@ -1190,20 +1192,6 @@ static void *pblk_init(struct nvm_tgt_dev = *dev, struct gendisk *tdisk, >>> struct pblk *pblk; >>> int ret; >>>=20 >>> - /* pblk supports 1.2 and 2.0 versions */ >>> - if (!(geo->version =3D=3D NVM_OCSSD_SPEC_12 || >>> - geo->version =3D=3D = NVM_OCSSD_SPEC_20)) { >>> - pr_err("pblk: OCSSD version not supported (%u)\n", >>> - geo->version); >>> - return ERR_PTR(-EINVAL); >>> - } >>> - >>> - if (geo->version =3D=3D 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 =3D 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 =3D PBLK_STATE_RUNNING; >>> pblk->gc.gc_enabled =3D 0; >>>=20 >>> + if (!(geo->version =3D=3D NVM_OCSSD_SPEC_12 || >>> + geo->version =3D=3D = NVM_OCSSD_SPEC_20)) { >>> + pblk_err(pblk, "OCSSD version not supported (%u)\n", >>> + geo->version); >>> + return ERR_PTR(-EINVAL); >>> + } >>> + >>> + if (geo->version =3D=3D 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. >=20 > pblk_err depends on the gendisk diskname, which is within the ->disk = parameter. I was suggesting to fail directly on tdisk - no need to allocate pblk and then pblk->disk =3D tdisk to use a given error interface. If = you have a strong feeling about this, I'm ok with it, but then please free struct pblk *pblk on the error path. --Apple-Mail=_FA1B5D04-6D25-4DF8-8F89-59A1F11AB659 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEE+ws7Qq+qZPG1bJoyIX4xUKFRnnQFAls2EwUACgkQIX4xUKFR nnTy8RAAnh5lWYDj7BH44eGeiJg4U/t5p1ZOyspp0QbK9oCyjOfvJWcNqqQw6Y4R RDUTRJF1xwa5A7fxn12dhygHFLv5keYqhWxahMPBNG7vzZxG4lDd4kuX2r6NY3C1 /+3KWHVLbSjyVQjGdn3nnzTkwjGvlVlwDzv7j3klsZPFjTdiGSdjg4FBZ1d/PFd9 X/kIBG1B7ybnWo/zOkBNq0VgH+jsWwbHFN5APRWCKHTU16D6Dh30ZRZuf7Yh7ta+ k0IvfPZBvwuIn9L/83yUWdugqjzHGS082Gxsf3n3Yqll/a4bCCToitugpk5iCcjd UAl0kIzPyxTi0kgP7ydFQyFs4qsYAz/sHY7wDosIjb8ehTs90v4eM6MFKXxjR2k6 Y7I4QdbkXEBlkNouJqBS8NXeE7gY4RUSZmtittxDjeFRW9xvEM6XPiCugQNhlDRC 132V4XMEJNX0O5OYeaZz9n4W3DEjWkJgNbeLhu/GmbxHIQ64Qv+U4i0v/mybYD0o KIks4FSbnmA9hclnSKttd7kGSG3xz93FDfhOEybaZPmLfkO/jMZ9SJ32vT+quDUO rbfcJKZcPXORJ2LR3YhtSSNjHvi5a4IXA0+4J1FenTFzL1x8lvBHYqvF1eCpm7Fk NCZdLzg1StFt5OKTSMZa2xK29gvISoWY9rXCIUrTAMH1/rfyBQs= =qKip -----END PGP SIGNATURE----- --Apple-Mail=_FA1B5D04-6D25-4DF8-8F89-59A1F11AB659--