]> granicus.if.org Git - zfs/commit
Fixes for procfs files backed by linked lists
authorJohn Gallagher <jgallag88@gmail.com>
Wed, 26 Sep 2018 18:08:12 +0000 (11:08 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 26 Sep 2018 18:08:12 +0000 (11:08 -0700)
commitd12614521a307c709778e5f7f91ae6085f63f9e0
tree130e6dde286d0da760612a7f4d9595a660777011
parent3ed2fbcc1ce36fdc516aa11848692a4e4c4a2bc0
Fixes for procfs files backed by linked lists

There are some issues with the way the seq_file interface is implemented
for kstats backed by linked lists (zfs_dbgmsgs and certain per-pool
debugging info):

* We don't account for the fact that seq_file sometimes visits a node
  multiple times, which results in missing messages when read through
  procfs.
* We don't keep separate state for each reader of a file, so concurrent
  readers will receive incorrect results.
* We don't account for the fact that entries may have been removed from
  the list between read syscalls, so reading from these files in procfs
  can cause the system to crash.

This change fixes these issues and adds procfs_list, a wrapper around a
linked list which abstracts away the details of implementing the
seq_file interface for a list and exposing the contents of the list
through procfs.

Reviewed by: Don Brady <don.brady@delphix.com>
Reviewed-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Reviewed by: Brad Lewis <brad.lewis@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: John Gallagher <john.gallagher@delphix.com>
External-issue: LX-1211
Closes #7819
24 files changed:
configure.ac
include/spl/sys/Makefile.am
include/spl/sys/kstat.h
include/spl/sys/procfs_list.h [new file with mode: 0644]
include/sys/spa.h
include/sys/zfs_context.h
include/sys/zfs_debug.h
lib/libzpool/kernel.c
module/spl/Makefile.in
module/spl/spl-kstat.c
module/spl/spl-procfs-list.c [new file with mode: 0644]
module/zfs/spa_stats.c
module/zfs/vdev_queue.c
module/zfs/zfs_debug.c
tests/runfiles/linux.run
tests/zfs-tests/tests/functional/Makefile.am
tests/zfs-tests/tests/functional/kstat/Makefile.am [deleted file]
tests/zfs-tests/tests/functional/procfs/Makefile.am [new file with mode: 0644]
tests/zfs-tests/tests/functional/procfs/cleanup.ksh [moved from tests/zfs-tests/tests/functional/kstat/cleanup.ksh with 92% similarity]
tests/zfs-tests/tests/functional/procfs/pool_state.ksh [moved from tests/zfs-tests/tests/functional/kstat/state.ksh with 100% similarity]
tests/zfs-tests/tests/functional/procfs/procfs_list_basic.ksh [new file with mode: 0755]
tests/zfs-tests/tests/functional/procfs/procfs_list_concurrent_readers.ksh [new file with mode: 0755]
tests/zfs-tests/tests/functional/procfs/procfs_list_stale_read.ksh [new file with mode: 0755]
tests/zfs-tests/tests/functional/procfs/setup.ksh [moved from tests/zfs-tests/tests/functional/kstat/setup.ksh with 86% similarity]