Received: by 2002:a05:6a10:6d25:0:0:0:0 with SMTP id gq37csp1994762pxb; Mon, 13 Sep 2021 09:40:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxKlCeL6viuKobOF2sXAtW8mxhnxQx2w3mFcD+YkqzNBLocaWSF1miEG0K7XC6IxJyDZWc1 X-Received: by 2002:a17:906:3146:: with SMTP id e6mr13640972eje.296.1631551219820; Mon, 13 Sep 2021 09:40:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631551219; cv=none; d=google.com; s=arc-20160816; b=fE9BjLKPuvzslF9TDFkp0DD2r11NZ2NXhRJ99OKxe8fDmBVpEQTA+jIKhmyPHnLKED KWU7xyPw15Shjq2XwBufFMMq5AQy0J7haiTPqGoFxy68t6LbGRiQGdsrqAc2bsWT9LJk v2Gf8n21+1nj5xSV/HGxuNpsXK2hkPCsio0SsmHf+3Y2zCSKcchZuxM55pt8jfwC5iFC f2mkn4uxwt4xxQVwb8tg7FXQX0w1+323rMzKeP5f0/M5CqpI8FSavJ58eBDEquizEUBs 7niy5vXyU1osc+wu0CGYTw7NChPSi+sNGTbbwQHkTO+++cSWBevSND23CCgqKRpy9n2L 1x7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-signature; bh=zRaFCkoSthGoCjkkPXvRjFDqiuQYb4slnaFkxKz+TyU=; b=hlLyKFkeddZ1HdpmRatprTzezYkezNItxJUDQexIVzc3oIix2A9xMQl6whcswNbPdi A/Vx1hur3pANACSxCrlhUrc0ofVUJ7ZctdTYePwXEsBL0K5+VqPsoF7YSUHhqKrlRkTn BqNlnKVy+fhFmXKvPuDAUUvqBeSozx/XWHY4F+p6w5YiPSLgf/jzlE5lzVcfPEsKBznI IfBEdUxjK/hnmZFtjS3WsWbV9qFMgTB/M5AnVn1HFqFmKmqWyjgo5py1FQ+arR6zdjV6 mkEvtMf+L6A2cs8W0wNv6U3DxsGeo5u1kHqN91Dg2AHlOD6u6F7wfmmUBr/bAiBOH7aT Mdiw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=2HIdOUIz; dkim=neutral (no key) header.i=@suse.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id hb44si7819848ejc.174.2021.09.13.09.39.54; Mon, 13 Sep 2021 09:40:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=2HIdOUIz; dkim=neutral (no key) header.i=@suse.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237952AbhIMQji (ORCPT + 99 others); Mon, 13 Sep 2021 12:39:38 -0400 Received: from smtp-out2.suse.de ([195.135.220.29]:56000 "EHLO smtp-out2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238062AbhIMQjh (ORCPT ); Mon, 13 Sep 2021 12:39:37 -0400 Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out2.suse.de (Postfix) with ESMTP id 73C6C20007; Mon, 13 Sep 2021 16:38:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1631551100; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=zRaFCkoSthGoCjkkPXvRjFDqiuQYb4slnaFkxKz+TyU=; b=2HIdOUIzyKR04FClgFsoqResbuxL6Q+Tdpiu+9HFvgxg1CQL+bwWW+UJeuDlTVBgjIfQTL J87c59gMvUB31cK0+FOu856SL+OJRrpOZlY6KLt/QV9BhhFonLA75UwInvKImMsGC0+wWR mZVog1lDInCwqAkhx7E+3d8fl4Fywr0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1631551100; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=zRaFCkoSthGoCjkkPXvRjFDqiuQYb4slnaFkxKz+TyU=; b=4wNuUlw36WyR6YGx1QOiXV6B/Cvj02g1082Fv9tzFqbukizcg4M7IvRSYcLV8vmpav2+i5 qv0RIRg0QxUkbNBg== Received: from localhost.localdomain (unknown [10.163.16.22]) by relay2.suse.de (Postfix) with ESMTP id 7FFDFA3B97; Mon, 13 Sep 2021 16:38:14 +0000 (UTC) From: Coly Li To: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, linux-raid@vger.kernel.org, nvdimm@lists.linux.dev Cc: antlists@youngman.org.uk, Coly Li , Dan Williams , Hannes Reinecke , Jens Axboe , NeilBrown , Richard Fan , Vishal L Verma Subject: [PATCH v3 1/6] badblocks: add more helper structure and routines in badblocks.h Date: Tue, 14 Sep 2021 00:36:37 +0800 Message-Id: <20210913163643.10233-2-colyli@suse.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210913163643.10233-1-colyli@suse.de> References: <20210913163643.10233-1-colyli@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds the following helper structure and routines into badblocks.h, - struct badblocks_context This structure is used in improved badblocks code for bad table iteration. - BB_END() The macro to culculate end LBA of a bad range record from bad table. - badblocks_full() and badblocks_empty() The inline routines to check whether bad table is full or empty. - set_changed() and clear_changed() The inline routines to set and clear 'changed' tag from struct badblocks. These new helper structure and routines can help to make the code more clear, they will be used in the improved badblocks code in following patches. Signed-off-by: Coly Li Cc: Dan Williams Cc: Hannes Reinecke Cc: Jens Axboe Cc: NeilBrown Cc: Richard Fan Cc: Vishal L Verma --- include/linux/badblocks.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/include/linux/badblocks.h b/include/linux/badblocks.h index 2426276b9bd3..166161842d1f 100644 --- a/include/linux/badblocks.h +++ b/include/linux/badblocks.h @@ -15,6 +15,7 @@ #define BB_OFFSET(x) (((x) & BB_OFFSET_MASK) >> 9) #define BB_LEN(x) (((x) & BB_LEN_MASK) + 1) #define BB_ACK(x) (!!((x) & BB_ACK_MASK)) +#define BB_END(x) (BB_OFFSET(x) + BB_LEN(x)) #define BB_MAKE(a, l, ack) (((a)<<9) | ((l)-1) | ((u64)(!!(ack)) << 63)) /* Bad block numbers are stored sorted in a single page. @@ -41,6 +42,14 @@ struct badblocks { sector_t size; /* in sectors */ }; +struct badblocks_context { + sector_t start; + sector_t len; + int ack; + sector_t orig_start; + sector_t orig_len; +}; + int badblocks_check(struct badblocks *bb, sector_t s, int sectors, sector_t *first_bad, int *bad_sectors); int badblocks_set(struct badblocks *bb, sector_t s, int sectors, @@ -63,4 +72,27 @@ static inline void devm_exit_badblocks(struct device *dev, struct badblocks *bb) } badblocks_exit(bb); } + +static inline int badblocks_full(struct badblocks *bb) +{ + return (bb->count >= MAX_BADBLOCKS); +} + +static inline int badblocks_empty(struct badblocks *bb) +{ + return (bb->count == 0); +} + +static inline void set_changed(struct badblocks *bb) +{ + if (bb->changed != 1) + bb->changed = 1; +} + +static inline void clear_changed(struct badblocks *bb) +{ + if (bb->changed != 0) + bb->changed = 0; +} + #endif -- 2.31.1