lkml.org 
[lkml]   [2017]   [Jun]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRE: [PATCH v2] libnvdimm, pmem: Add sysfs notifications to badblocks
Date
> On Mon, Jun 12, 2017 at 3:25 PM, Toshi Kani <toshi.kani@hpe.com> wrote:
> > Sysfs "badblocks" information may be updated during run-time that:
> > - MCE, SCI, and sysfs "scrub" may add new bad blocks
> > - Writes and ioctl() may clear bad blocks
> >
> > Add support to send sysfs notifications to sysfs "badblocks" file
> > under region and pmem directories when their badblocks information
> > is re-evaluated (but is not necessarily changed) during run-time.
> >
> > Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
> > Cc: Dan Williams <dan.j.williams@intel.com>
> > Cc: Vishal Verma <vishal.l.verma@intel.com>
> > Cc: Linda Knippers <linda.knippers@hpe.com>
> > ---
> > v2: Send notifications for the clearing case
> > ---
>
> This looks good to me, I've applied it, but I also want to extend the
> ndctl unit tests to cover this mechanism.

Right. For the time being, would you mind to use the attached test
program for your sanity tests? It simply monitors sysfs notifications
and prints badblocks info... Sorry for inconvenience.

Since I am not familiar with the ndctl unit tests and I am traveling for
the rest of the month, I may have to look into it after I am back.

Thanks!
-Toshi


/*
* Copyright (C) 2017 Hewlett Packard Enterprise Development LP
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

int main(int argc, char **argv)
{
int fd, ret;
fd_set fds;
char buf[256];

if (argc != 2) {
printf("USAGE: test_sysfs_notify badblocks-path\n");
exit(1);
}

if ((fd = open(argv[1], O_RDONLY)) < 0) {
printf("Unable to open %s\n", argv[1]);
exit(1);
}
printf("Monitoring %s - ctl-c to stop\n", argv[1]);

while (1) {
memset(buf, 0, sizeof(buf));
ret = lseek(fd, 0, SEEK_SET);
ret = read(fd, buf, sizeof(buf));
printf("%s\n", buf);

FD_ZERO(&fds);
FD_SET(fd, &fds);

ret = select(fd + 1, NULL, NULL, &fds, NULL);
if (ret <= 0) {
printf("error (%d)\n", ret);
exit(1);
} else if (FD_ISSET(fd, &fds)) {
printf("NOTIFIED!!\n");
}
}

close(fd);
}
\
 
 \ /
  Last update: 2017-06-17 02:36    [W:1.242 / U:0.148 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site