From patchwork Sat Jan 2 07:12:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Coly Li X-Patchwork-Id: 11995075 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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 39E08C43332 for ; Sat, 2 Jan 2021 07:14:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1C94722482 for ; Sat, 2 Jan 2021 07:14:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726573AbhABHN4 (ORCPT ); Sat, 2 Jan 2021 02:13:56 -0500 Received: from mx2.suse.de ([195.135.220.15]:47732 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726560AbhABHN4 (ORCPT ); Sat, 2 Jan 2021 02:13:56 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 443BDADE1; Sat, 2 Jan 2021 07:12:58 +0000 (UTC) From: Coly Li To: linux-bcache@vger.kernel.org Cc: linux-block@vger.kernel.org, Coly Li Subject: [PATCH 4/6] bcache-tools: check incompatible feature set Date: Sat, 2 Jan 2021 15:12:42 +0800 Message-Id: <20210102071244.58353-5-colyli@suse.de> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210102071244.58353-1-colyli@suse.de> References: <20210102071244.58353-1-colyli@suse.de> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org When bcache-tools is not updated with kernel driver (or on the versus), we need to make sure the feature set conflict can be detected to avoid unexpected data operation. This patch checks whether there is unsupported {compatc, ro_compat, incompat} features detected in detail_dev(). If there is, prints out error message and return error to its caller. Signed-off-by: Coly Li --- lib.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/lib.c b/lib.c index 29172f5..a529ad3 100644 --- a/lib.c +++ b/lib.c @@ -442,6 +442,33 @@ int detail_dev(char *devname, struct bdev *bd, struct cdev *cd, int *type) goto Fail; } + /* Check for incompat feature set */ + if (sb.version >= BCACHE_SB_VERSION_BDEV_WITH_FEATURES || + sb.version >= BCACHE_SB_VERSION_CDEV_WITH_FEATURES) { + uint64_t features; + + features = sb.feature_compat & ~BCH_FEATURE_COMPAT_SUPP; + if (features) { + fprintf(stderr, + "Unsupported compatible feature found\n"); + goto Fail; + } + + features = sb.feature_ro_compat & ~BCH_FEATURE_RO_COMPAT_SUPP; + if (features) { + fprintf(stderr, + "Unsupported read-only compatible feature found\n"); + goto Fail; + } + + features = sb.feature_incompat & ~BCH_FEATURE_INCOMPAT_SUPP; + if (features) { + fprintf(stderr, + "Unsupported incompatible feature found\n"); + goto Fail; + } + } + *type = sb.version; if (sb.version == BCACHE_SB_VERSION_BDEV || sb.version == BCACHE_SB_VERSION_BDEV_WITH_OFFSET ||