From patchwork Wed Oct 27 12:09:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ye, Huaisheng" X-Patchwork-Id: 12587157 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EBD42C87 for ; Wed, 27 Oct 2021 12:09:43 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10149"; a="290980277" X-IronPort-AV: E=Sophos;i="5.87,186,1631602800"; d="scan'208";a="290980277" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga104.jf.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> Precedence: bulk X-Mailing-List: nvdimm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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); From patchwork Wed Oct 27 12:09:35 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ye, Huaisheng" X-Patchwork-Id: 12587159 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 090172C87 for ; Wed, 27 Oct 2021 12:09:46 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10149"; a="290980294" X-IronPort-AV: E=Sophos;i="5.87,186,1631602800"; d="scan'208";a="290980294" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Oct 2021 05:09:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,186,1631602800"; d="scan'208";a="486650016" Received: from dev01.bj.intel.com ([10.238.158.57]) by orsmga007.jf.intel.com with ESMTP; 27 Oct 2021 05:09:43 -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 2/4] libnvdimm/pmem: implement ->set_read_only to hook into BLKROSET processing Date: Wed, 27 Oct 2021 20:09:35 +0800 Message-Id: <20211027120937.1163744-3-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> Precedence: bulk X-Mailing-List: nvdimm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Implement the ->set_read_only method for nd_pmem. Signed-off-by: Huaisheng Ye --- drivers/nvdimm/pmem.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c index ef4950f80832..38ede1f44f5f 100644 --- a/drivers/nvdimm/pmem.c +++ b/drivers/nvdimm/pmem.c @@ -282,6 +282,7 @@ static const struct block_device_operations pmem_fops = { .owner = THIS_MODULE, .submit_bio = pmem_submit_bio, .rw_page = pmem_rw_page, + .set_read_only = nd_set_ro, }; static int pmem_dax_zero_page_range(struct dax_device *dax_dev, pgoff_t pgoff, From patchwork Wed Oct 27 12:09:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ye, Huaisheng" X-Patchwork-Id: 12587161 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 624062C87 for ; Wed, 27 Oct 2021 12:09:48 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10149"; a="290980302" X-IronPort-AV: E=Sophos;i="5.87,186,1631602800"; d="scan'208";a="290980302" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Oct 2021 05:09:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,186,1631602800"; d="scan'208";a="486650038" Received: from dev01.bj.intel.com ([10.238.158.57]) by orsmga007.jf.intel.com with ESMTP; 27 Oct 2021 05:09:45 -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 3/4] libnvdimm/blk: implement ->set_read_only to hook into BLKROSET processing Date: Wed, 27 Oct 2021 20:09:36 +0800 Message-Id: <20211027120937.1163744-4-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> Precedence: bulk X-Mailing-List: nvdimm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Implement the ->set_read_only method for nd_blk. Signed-off-by: Huaisheng Ye --- drivers/nvdimm/blk.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/nvdimm/blk.c b/drivers/nvdimm/blk.c index 088d3dd6f6fa..9d76980ebff7 100644 --- a/drivers/nvdimm/blk.c +++ b/drivers/nvdimm/blk.c @@ -226,6 +226,7 @@ static int nsblk_rw_bytes(struct nd_namespace_common *ndns, static const struct block_device_operations nd_blk_fops = { .owner = THIS_MODULE, .submit_bio = nd_blk_submit_bio, + .set_read_only = nd_set_ro, }; static void nd_blk_release_disk(void *disk) From patchwork Wed Oct 27 12:09:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ye, Huaisheng" X-Patchwork-Id: 12587163 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E46D22C87 for ; Wed, 27 Oct 2021 12:09:50 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10149"; a="290980320" X-IronPort-AV: E=Sophos;i="5.87,186,1631602800"; d="scan'208";a="290980320" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Oct 2021 05:09:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,186,1631602800"; d="scan'208";a="486650066" Received: from dev01.bj.intel.com ([10.238.158.57]) by orsmga007.jf.intel.com with ESMTP; 27 Oct 2021 05:09:48 -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 4/4] libnvdimm/btt: implement ->set_read_only to hook into BLKROSET processing Date: Wed, 27 Oct 2021 20:09:37 +0800 Message-Id: <20211027120937.1163744-5-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> Precedence: bulk X-Mailing-List: nvdimm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Implement the ->set_read_only method for nd_btt. Signed-off-by: Huaisheng Ye --- drivers/nvdimm/btt.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c index 92dec4952297..91fcdac7858f 100644 --- a/drivers/nvdimm/btt.c +++ b/drivers/nvdimm/btt.c @@ -1514,6 +1514,7 @@ static const struct block_device_operations btt_fops = { .submit_bio = btt_submit_bio, .rw_page = btt_rw_page, .getgeo = btt_getgeo, + .set_read_only = nd_set_ro, }; static int btt_blk_init(struct btt *btt)