Fixup for bz 501457. Problem: If the device list file contains the same device as supplied on the command line, blktrace stops immediately and further I/O tracing is impossible. Bug: device duplication in the devpaths ends with programm termination (BLKTRACESETUP ioctl returns error) while resources (open files in debugfs) are not released. Solution: Make sure devices are not duplicated in devpaths pool. Signed-off-by: Edward Shishkin <edward@xxxxxxxxxx> --- blktrace.c | 9 +++++++++ 1 file changed, 9 insertions(+) --- blktrace.orig/blktrace.c +++ blktrace/blktrace.c @@ -1200,8 +1200,17 @@ static int add_devpath(char *path) { int fd; struct devpath *dpp; + struct list_head *p; /* + * Verify device is not duplicated + */ + __list_for_each(p, &devpaths) { + struct devpath *tmp = list_entry(p, struct devpath, head); + if (!strcmp(tmp->path, path)) + return 0; + } + /* * Verify device is valid before going too far */ fd = my_open(path, O_RDONLY | O_NONBLOCK);