From patchwork Tue Sep 18 20:00:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Williams X-Patchwork-Id: 10604839 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 60CD4112B for ; Tue, 18 Sep 2018 20:12:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4F26E2BD9F for ; Tue, 18 Sep 2018 20:12:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4363C2BDB0; Tue, 18 Sep 2018 20:12:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from ml01.01.org (ml01.01.org [198.145.21.10]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id AEA212BD9F for ; Tue, 18 Sep 2018 20:12:21 +0000 (UTC) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id A6BD521140F32; Tue, 18 Sep 2018 13:12:21 -0700 (PDT) X-Original-To: linux-nvdimm@lists.01.org Delivered-To: linux-nvdimm@lists.01.org Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.115; helo=mga14.intel.com; envelope-from=dan.j.williams@intel.com; receiver=linux-nvdimm@lists.01.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 3764121139F7E for ; Tue, 18 Sep 2018 13:12:20 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Sep 2018 13:12:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,391,1531810800"; d="scan'208";a="258351650" Received: from dwillia2-desk3.jf.intel.com (HELO dwillia2-desk3.amr.corp.intel.com) ([10.54.39.16]) by orsmga005.jf.intel.com with ESMTP; 18 Sep 2018 13:12:19 -0700 Subject: [ndctl PATCH v2 3/3] ndctl: Revert "ndctl: Create ndctl udev rules for dirty shutdown" From: Dan Williams To: linux-nvdimm@lists.01.org Date: Tue, 18 Sep 2018 13:00:32 -0700 Message-ID: <153730083243.72626.11678125759926708172.stgit@dwillia2-desk3.amr.corp.intel.com> In-Reply-To: <153730081688.72626.14830966608644541641.stgit@dwillia2-desk3.amr.corp.intel.com> References: <153730081688.72626.14830966608644541641.stgit@dwillia2-desk3.amr.corp.intel.com> User-Agent: StGit/0.18-2-gc94f MIME-Version: 1.0 X-BeenThere: linux-nvdimm@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Linux-nvdimm developer list." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linux-nvdimm-bounces@lists.01.org Sender: "Linux-nvdimm" X-Virus-Scanned: ClamAV using ClamSMTP With the introduction of the 'ndctl dirty-dimm' command, environments that choose to implement dirty-shutdown mitigation can use 'dirty-dimm nmemX' and 'list --dimm --health nmemX' to acknowledge and retrieve these details. However, it should be noted that this is not the default. If the platform advertises support for "Memory Controller Flush to NVDIMM Durability on Power Loss Capable" then the default Linux policy is to trust that designation. A platform owner can override the default Linux policy by delaying namespace activation until after 'dirty-dimm' has been completed on all DIMMs that contribute to a given interleave-set. Without coordinating the latch with writes the dirty-shutdown counter could fail to reflect the dirty-state relative to failed write-buffer flush. Cc: Keith Busch Cc: Vishal Verma Signed-off-by: Dan Williams --- .gitignore | 1 Makefile.am | 3 - configure.ac | 10 --- contrib/80-ndctl.rules | 3 - ndctl.spec.in | 3 - ndctl/Makefile.am | 5 -- ndctl/ndctl-udev.c | 150 ------------------------------------------------ 7 files changed, 175 deletions(-) delete mode 100644 contrib/80-ndctl.rules delete mode 100644 ndctl/ndctl-udev.c diff --git a/.gitignore b/.gitignore index f13a7ef5a608..0baace4b457e 100644 --- a/.gitignore +++ b/.gitignore @@ -25,7 +25,6 @@ daxctl/lib/libdaxctl.pc *.a ndctl/lib/libndctl.pc ndctl/ndctl -ndctl/ndctl-udev rhel/ sles/ndctl.spec util/log.lo diff --git a/Makefile.am b/Makefile.am index 7880eef1c890..e0c463a3493a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -42,9 +42,6 @@ bashcompletiondir = $(BASH_COMPLETION_DIR) dist_bashcompletion_DATA = contrib/ndctl endif -udevrulesdir = $(UDEVDIR)/rules.d -dist_udevrules_DATA = contrib/80-ndctl.rules - noinst_LIBRARIES = libccan.a libccan_a_SOURCES = \ ccan/str/str.h \ diff --git a/configure.ac b/configure.ac index 9dc11da194d1..bb6b03324ea8 100644 --- a/configure.ac +++ b/configure.ac @@ -153,17 +153,8 @@ fi AC_SUBST([systemd_unitdir]) AM_CONDITIONAL([ENABLE_SYSTEMD_UNITS], [test "x$with_systemd" = "xyes"]) -AC_ARG_WITH([tmpfilesdir], - [AS_HELP_STRING([--with-tmpfilesdir=DIR], [Directory for temporary runtime files])], - [tmpfilesdir=$withval], - [tmpfilesdir="/run"]) - -UDEVDIR="$(pkg-config udev --variable=udevdir)" -AC_SUBST([UDEVDIR]) - my_CFLAGS="\ -D DEF_CONF_FILE='\"${sysconfdir}/ndctl/monitor.conf\"' \ --D DEF_TMPFS_DIR='\"${tmpfilesdir}/ndctl\"' \ -Wall \ -Wchar-subscripts \ -Wformat-security \ @@ -204,7 +195,6 @@ AC_MSG_RESULT([ sysconfdir: ${sysconfdir} libdir: ${libdir} includedir: ${includedir} - tmpfilesdir: ${tmpfilesdir} compiler: ${CC} cflags: ${CFLAGS} diff --git a/contrib/80-ndctl.rules b/contrib/80-ndctl.rules deleted file mode 100644 index 54788c40ea9d..000000000000 --- a/contrib/80-ndctl.rules +++ /dev/null @@ -1,3 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="add", KERNEL=="nmem*", RUN+="ndctl-udev $kernel" diff --git a/ndctl.spec.in b/ndctl.spec.in index 98394a924030..26396d4abad7 100644 --- a/ndctl.spec.in +++ b/ndctl.spec.in @@ -110,7 +110,6 @@ make check %postun -n DAX_LNAME -p /sbin/ldconfig %define bashcompdir %(pkg-config --variable=completionsdir bash-completion) -%define udevdir %(pkg-config --variable=udevdir udev) %files %defattr(-,root,root) @@ -120,8 +119,6 @@ make check %{bashcompdir}/ %{_sysconfdir}/ndctl/monitor.conf %{_unitdir}/ndctl-monitor.service -%{_udevrulesdir}/80-ndctl.rules -%{udevdir}/ndctl-udev %files -n daxctl %defattr(-,root,root) diff --git a/ndctl/Makefile.am b/ndctl/Makefile.am index d6839e4a9fb6..8a5e5f87e6c5 100644 --- a/ndctl/Makefile.am +++ b/ndctl/Makefile.am @@ -51,8 +51,3 @@ EXTRA_DIST += $(monitor_config_file) if ENABLE_SYSTEMD_UNITS systemd_unit_DATA = ndctl-monitor.service endif - -ndctl_udevdir = $(UDEVDIR) -ndctl_udev_PROGRAMS = ndctl-udev -ndctl_udev_SOURCES = ndctl-udev.c -ndctl_udev_LDADD = lib/libndctl.la diff --git a/ndctl/ndctl-udev.c b/ndctl/ndctl-udev.c deleted file mode 100644 index 7b174b61d8cd..000000000000 --- a/ndctl/ndctl-udev.c +++ /dev/null @@ -1,150 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* Copyright(c) 2018 Intel Corporation. All rights reserved. */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/** - * mkdir_p - * - * Copied from util-linux lib/fileutils.c - */ -static int mkdir_p(const char *path, mode_t mode) -{ - char *p, *dir; - int rc = 0; - - if (!path || !*path) - return -EINVAL; - - dir = p = strdup(path); - if (!dir) - return -ENOMEM; - - if (*p == '/') - p++; - - while (p && *p) { - char *e = strchr(p, '/'); - if (e) - *e = '\0'; - if (*p) { - rc = mkdir(dir, mode); - if (rc && errno != EEXIST) - break; - rc = 0; - } - if (!e) - break; - *e = '/'; - p = e + 1; - } - - free(dir); - return rc; -} - -static struct ndctl_dimm *find_dimm(struct ndctl_ctx *ctx, const char *devname) -{ - struct ndctl_bus *bus; - struct ndctl_dimm *dimm; - - ndctl_bus_foreach(ctx, bus) { - ndctl_dimm_foreach(bus, dimm) { - if (strcmp(ndctl_dimm_get_devname(dimm), devname) == 0) - return dimm; - } - } - return NULL; -} - -static void ack_shutdown(struct ndctl_dimm *dimm) -{ - struct ndctl_cmd *cmd; - - cmd = ndctl_dimm_cmd_new_ack_shutdown_count(dimm); - if (!cmd) - return; - ndctl_cmd_submit(cmd); - ndctl_cmd_unref(cmd); -} - -static void save_unsafe_shutdown_count(struct ndctl_dimm *dimm, - const char *devname) -{ - char *path, *usc, count[16]; - unsigned int shutdown; - struct ndctl_cmd *cmd; - int fd; - - cmd = ndctl_dimm_cmd_new_smart(dimm); - if (!cmd) - return; - - if (ndctl_cmd_submit(cmd)) - goto unref_cmd; - - shutdown = ndctl_cmd_smart_get_shutdown_count(cmd); - if (shutdown == UINT_MAX) - goto unref_cmd; - - if (asprintf(&path, DEF_TMPFS_DIR "/%s", devname) < 0) - goto unref_cmd; - - if (mkdir_p(path, 0755)) - goto free_path; - - if (asprintf(&usc, "%s/usc", path) < 0) - goto free_path; - - fd = open(usc, O_WRONLY | O_CREAT, 0644); - if (fd < 0) - goto free_usc; - - if (snprintf(count, sizeof(count), "%u\n", shutdown) < 0) - goto close_fd; - - if (write(fd, count, strlen(count)) < 0) - goto close_fd; - - close_fd: - close(fd); - free_usc: - free(usc); - free_path: - free(path); - unref_cmd: - ndctl_cmd_unref(cmd); -} - -int main(int argc, char *argv[]) -{ - struct ndctl_ctx *ctx; - struct ndctl_dimm *dimm = NULL; - const char *devname; - - if (argc < 2) - return EINVAL; - - devname = argv[1]; - if (ndctl_new(&ctx)) - return ENOMEM; - - dimm = find_dimm(ctx, devname); - if (!dimm) - return ENODEV; - - ack_shutdown(dimm); - save_unsafe_shutdown_count(dimm, devname); - - ndctl_unref(ctx); - return 0; -}