Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp884886pxb; Wed, 27 Oct 2021 14:27:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx2OFMXa/hmWM+0h26A0ZJGkyQ0l4zPYmxMlQGdO5cHsrve7HnUpMMUmcQAv14ryeohhOl9 X-Received: by 2002:a17:907:16a3:: with SMTP id hc35mr38636ejc.497.1635370036030; Wed, 27 Oct 2021 14:27:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635370036; cv=none; d=google.com; s=arc-20160816; b=fwc5SiDAp2wDkD20OcIeEkcGXEf4bw7dIWc6mjd50OyhhAMNmRedl6pIQkR+FFC0/A kf5Z/yhgrYDnbzoBUIjr2euKTprUKVzxpYiMd1/CYeVnwbc7QUoARGQBZINHWKa72JAx 9r77MVJ/iSQbKwKnrsx20/VG5vx3IaPE7j7zA53KUOToZ6oIPKj+49EZXhyuq2arYouG QIFyD6Ow8kfECyIsEAULirZuYJeEtQEGGBtW7elV4e/T/+YsoTd2bpzUe4NvyJb/w6T4 EcSelo/G9SoLF874r3Ccy4Ljgr5cvsO3KHCQu133srlUREawrSVHl7MGyBnZOgR51oVl p08A== 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; bh=HXh9Im6H1WlP36b7+kQ51Buquet64G3Y4XUgpZghPto=; b=cBN3uScsAflBgpR/+CUFUqmfXgMaKirJ2I1c49MfgD6vaMq4l8gMH7QbSfewSS32yO OZQ6mKm5696gBFhNb7cKsxHFCijdDmSOsynU0VjQd86tntr2r0X+cOw47pkXnDdNZmx4 czDon1+JWJi8ttyRt2wQwbVCELK5JMJrZPioODJSv/kAgJnDR4XEflHgGYN27nl1MnSi gMK4nmywGuM+jEv72PAPN64xF6h6tQFWB2B8m0L3io102j7M1WgOq/ldKhKFXvnaCQPB 47pmld3RuuWgQrtiLqHd272JB2+lXeD9Q7Jt3dq23c1Y3HpP37ViQacFcKGwJB+GPnIf DnuA== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id cr12si1580703ejc.352.2021.10.27.14.26.53; Wed, 27 Oct 2021 14:27:16 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241737AbhJ0MMJ (ORCPT + 97 others); Wed, 27 Oct 2021 08:12:09 -0400 Received: from mga11.intel.com ([192.55.52.93]:22295 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235323AbhJ0MMI (ORCPT ); Wed, 27 Oct 2021 08:12:08 -0400 X-IronPort-AV: E=McAfee;i="6200,9189,10149"; a="227600324" X-IronPort-AV: E=Sophos;i="5.87,186,1631602800"; d="scan'208";a="227600324" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Oct 2021 05:09:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,186,1631602800"; d="scan'208";a="486649998" Received: from dev01.bj.intel.com ([10.238.158.57]) by orsmga007.jf.intel.com with ESMTP; 27 Oct 2021 05:09:40 -0700 From: Huaisheng Ye To: dan.j.williams@intel.com, hch@lst.de, vishal.l.verma@intel.com, dave.jiang@intel.com, ira.weiny@intel.com Cc: nvdimm@lists.linux.dev, linux-kernel@vger.kernel.org, Huaisheng Ye Subject: [PATCH 1/4] libnvdimm: add a ro state control function for nvdimm Date: Wed, 27 Oct 2021 20:09:34 +0800 Message-Id: <20211027120937.1163744-2-huaisheng.ye@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20211027120937.1163744-1-huaisheng.ye@intel.com> References: <20211027120937.1163744-1-huaisheng.ye@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org libndctl failed to pass when writing pmem disk. Here is the error message below, namespace6.0: failed to write /dev/pmem6 check_namespaces: namespace6.0 validate_bdev failed ndctl-test1 failed: -6 Commit 98f49b63e84d4ee1a5c327d0b5f4e8699f6c70fe removes set_device_ro and e00adcadf3af7a8335026d71ab9f0e0a922191ac adds a new set_read_only method to allow for driver-specific processing when changing the block device's read-only state. Current drivers nd_pmem, nd_blk and nd_btt don't have the capability to enable or disable write protect (read-only) state. Without that, blkdev_roset just modifies the value of bd_read_only of struct block_device and returns success to ioctl of block device. Error would happen when writing read-only disk next. Add ro state control function in libnvdimm for this purpose. Signed-off-by: Huaisheng Ye --- drivers/nvdimm/bus.c | 17 +++++++++++++++++ drivers/nvdimm/nd.h | 1 + 2 files changed, 18 insertions(+) diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c index 9dc7f3edd42b..299dd5e11ae7 100644 --- a/drivers/nvdimm/bus.c +++ b/drivers/nvdimm/bus.c @@ -636,6 +636,23 @@ void nvdimm_check_and_set_ro(struct gendisk *disk) } EXPORT_SYMBOL(nvdimm_check_and_set_ro); +int nd_set_ro(struct block_device *bdev, bool ro) +{ + struct gendisk *disk = bdev->bd_disk; + struct device *dev = disk_to_dev(disk)->parent; + int disk_ro = get_disk_ro(disk); + + /* nothing to change with ro state */ + if (disk_ro == ro) + return 0; + + dev_info(dev, "set %s to read-%s\n", + disk->disk_name, ro ? "only" : "write"); + set_disk_ro(disk, ro); + return 0; +} +EXPORT_SYMBOL(nd_set_ro); + static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf) { diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h index 5467ebbb4a6b..f1cf3eb21292 100644 --- a/drivers/nvdimm/nd.h +++ b/drivers/nvdimm/nd.h @@ -512,6 +512,7 @@ void nvdimm_bus_lock(struct device *dev); void nvdimm_bus_unlock(struct device *dev); bool is_nvdimm_bus_locked(struct device *dev); void nvdimm_check_and_set_ro(struct gendisk *disk); +int nd_set_ro(struct block_device *bdev, bool ro); void nvdimm_drvdata_release(struct kref *kref); void put_ndd(struct nvdimm_drvdata *ndd); int nd_label_reserve_dpa(struct nvdimm_drvdata *ndd); -- 2.27.0