From patchwork Fri Sep 1 01:49:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: QI Fuli X-Patchwork-Id: 9933281 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 766D5602F0 for ; Fri, 1 Sep 2017 01:49:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6896327F10 for ; Fri, 1 Sep 2017 01:49:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5D73827F7F; Fri, 1 Sep 2017 01:49:36 +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=-1.9 required=2.0 tests=BAYES_00, 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 0A66627F10 for ; Fri, 1 Sep 2017 01:49:35 +0000 (UTC) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id DF40D21E95E15; Thu, 31 Aug 2017 18:46:50 -0700 (PDT) X-Original-To: linux-nvdimm@lists.01.org Delivered-To: linux-nvdimm@lists.01.org Received: from mgwkm03.jp.fujitsu.com (mgwkm03.jp.fujitsu.com [202.219.69.170]) (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 F082B21E79027 for ; Thu, 31 Aug 2017 18:46:48 -0700 (PDT) Received: from kw-mxauth.gw.nic.fujitsu.com (unknown [192.168.231.132]) by mgwkm03.jp.fujitsu.com with smtp id 3ab0_25b6_af607c38_0513_4574_b9db_6c2058afc479; Fri, 01 Sep 2017 10:49:30 +0900 Received: from g01jpfmpwkw01.exch.g01.fujitsu.local (g01jpfmpwkw01.exch.g01.fujitsu.local [10.0.193.38]) by kw-mxauth.gw.nic.fujitsu.com (Postfix) with ESMTP id E978AAC00E0 for ; Fri, 1 Sep 2017 10:49:29 +0900 (JST) Received: from G01JPEXCHKW15.g01.fujitsu.local (G01JPEXCHKW15.g01.fujitsu.local [10.0.194.54]) by g01jpfmpwkw01.exch.g01.fujitsu.local (Postfix) with ESMTP id 4B1C6692756 for ; Fri, 1 Sep 2017 10:49:29 +0900 (JST) Received: from G01JPEXMBKW01.g01.fujitsu.local ([10.0.194.65]) by g01jpexchkw15 ([10.0.194.54]) with mapi id 14.03.0352.000; Fri, 1 Sep 2017 10:49:29 +0900 From: "Qi, Fuli" To: "linux-nvdimm@lists.01.org" Subject: [RFC patch 4/4]ndctl: nvdimmd: notify/monitor the feathers of over threshold event Thread-Topic: [RFC patch 4/4]ndctl: nvdimmd: notify/monitor the feathers of over threshold event Thread-Index: AdMixIBHYW6lun1pQGq0lrj9mAB6Pg== Date: Fri, 1 Sep 2017 01:49:28 +0000 Message-ID: <0DEDF3B159719A448A49EF0E7B11E3222756C92E@g01jpexmbkw01> Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: X-MS-TNEF-Correlator: x-securitypolicycheck: OK by SHieldMailChecker v2.5.2 x-shieldmailcheckerpolicyversion: FJ-ISEC-20170217-enc x-shieldmailcheckermailid: 45bd17b257854c0e8438d47dd8d6f8fc x-originating-ip: [10.17.204.163] MIME-Version: 1.0 X-SecurityPolicyCheck-GC: OK by FENCE-Mail X-TM-AS-MML: disable X-BeenThere: linux-nvdimm@lists.01.org X-Mailman-Version: 2.1.22 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 Notify.c is used to call the emulation of event of over threshold. You can test nvdimm daemon with the following command. notify [nmemX] [all] Signed-off-by: QI Fuli --- nvdimmd/Makefile | 6 ++- nvdimmd/notify.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+), 1 deletion(-) +} -- QI Fuli diff --git a/nvdimmd/Makefile b/nvdimmd/Makefile index df7eb46..9fb37ec 100644 --- a/nvdimmd/Makefile +++ b/nvdimmd/Makefile @@ -3,7 +3,7 @@ LIBS = -ludev -luuid -lkmod DEST = /usr/bin OBJS = ../ndctl/lib/.libs/libndctl.o ../daxctl/lib/.libs/libdaxctl.o ../util/.libs/sysfs.o ../util/.libs/log.o ../ndctl/lib/.libs/libndctl-smart.o IDIR = -I../ -I../ndctl -PROGRAM = nvdimmd +PROGRAM = nvdimmd notify all: $(PROGRAM) nvdimmd: $(OBJS) nvdimmd.o libnvdimmd.o @@ -12,6 +12,10 @@ libnvdimmd.o: libnvdimmd.c $(CC) -o libnvdimmd.o $(IDIR) -c libnvdimmd.c nvdimmd.o: nvdimmd.c $(CC) -o nvdimmd.o $(IDIR) -c nvdimmd.c +notify: $(OBJS) notify.o libnvdimmd.o + $(CC) $(OBJS) notify.o libnvdimmd.o $(LIBS) $(IDIR) -o notify +notify.o: notify.c + $(CC) -o notify.o $(IDIR) -c notify.c install: nvdimmd nvdimmd.service install -s nvdimmd $(DEST) cp nvdimmd.service /usr/lib/systemd/system/ diff --git a/nvdimmd/notify.c b/nvdimmd/notify.c new file mode 100644 index 0000000..f83e60d --- /dev/null +++ b/nvdimmd/notify.c @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2017, FUJITSU LIMITED. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU Lesser General Public License, + * version 2.1, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + */ + +/* + * This program is used to call the emulation of event of over threshold. + * You can test nvdimmd daemon with the following command. + * notify [nmemX] [all] + */ + +#include +#include +#include +#include +#include +#include +#include +#include "libnvdimmd.h" + +const char *notify_help_info = "notify [nmemX] [all]"; + +static int notify_submit_cmd(threshold_dimm *t_dimm) +{ + struct ndctl_cmd *cmd; + const char *msg = "command to call over threshold event notification: "; + + cmd = ndctl_dimm_cmd_new_smart_threshold(t_dimm->dimm); + if (!cmd) { + printf("failed to prepare %s[%s]\n", msg, t_dimm->devname); + return -1; + } + if(ndctl_cmd_submit(cmd)) { + printf("failed to submit %s[%s]\n", msg, t_dimm->devname); + return -1; + } + ndctl_cmd_unref(cmd); + return 0; +} + +static int +notify_submit(threshold_dimm *t_dimm, int count_dimm, char *notify_devname) +{ + int count_notify = 0; + + for (int i= 0; i < count_dimm; i++) { + if (!strcmp(notify_devname, "all")) { + if (!notify_submit_cmd(&t_dimm[i])) + count_notify++; + continue; + } + if (!strcmp(notify_devname, t_dimm[i].devname)) { + if (!notify_submit_cmd(&t_dimm[i])) + count_notify++; + else + count_notify--; + break; + } + } + return count_notify; +} + +int main(int argc, char *argv[]) +{ + struct ndctl_ctx *ctx; + int rc, count_dimm; + char *notify_devname; + threshold_dimm *t_dimm; + + if (argc < 1) { + printf("usage: %s\n", notify_help_info); + goto out; + } + + notify_devname = argv[1]; + if (!notify_devname || !strcmp(notify_devname, "--help")){ + printf("usage: %s\n", notify_help_info); + goto out; + } + rc = ndctl_new(&ctx); + if (rc) + goto out; + + t_dimm = calloc(NUM_MAX_DIMM, sizeof(threshold_dimm)); + if (!t_dimm) { + printf("notify error: memory not allocate\n"); + goto out; + } + + count_dimm = get_threshold_dimm(ctx, t_dimm, NULL, NULL); + if (count_dimm == 0) { + printf("notify error: no dimm support over threshold notify\n"); + goto out; + } + + rc = notify_submit(t_dimm, count_dimm, notify_devname); + + if (!rc && strcmp(notify_devname, "all")) + printf("UNKNOWM DIMM_NAME\n"); + else if (rc >= 0) + printf("%d notify submit: [%s]\n", rc, notify_devname); + + ndctl_unref(ctx); +out: + return 1;