Index: sys/kern/vfs_bio.c =================================================================== --- sys/kern/vfs_bio.c +++ sys/kern/vfs_bio.c @@ -250,11 +250,11 @@ SYSCTL_INT(_vfs, OID_AUTO, bdwriteskip, CTLFLAG_RW, &bdwriteskip, 0, "Number of buffers supplied to bdwrite with snapshot deadlock risk"); int altbufferflushes; -SYSCTL_INT(_vfs, OID_AUTO, altbufferflushes, CTLFLAG_RW, &altbufferflushes, - 0, "Number of fsync flushes to limit dirty buffers"); +SYSCTL_INT(_vfs, OID_AUTO, altbufferflushes, CTLFLAG_RW | CTLFLAG_STATS, + &altbufferflushes, 0, "Number of fsync flushes to limit dirty buffers"); static int recursiveflushes; -SYSCTL_INT(_vfs, OID_AUTO, recursiveflushes, CTLFLAG_RW, &recursiveflushes, - 0, "Number of flushes skipped due to being recursive"); +SYSCTL_INT(_vfs, OID_AUTO, recursiveflushes, CTLFLAG_RW | CTLFLAG_STATS, + &recursiveflushes, 0, "Number of flushes skipped due to being recursive"); static int sysctl_numdirtybuffers(SYSCTL_HANDLER_ARGS); SYSCTL_PROC(_vfs, OID_AUTO, numdirtybuffers, CTLTYPE_INT|CTLFLAG_MPSAFE|CTLFLAG_RD, NULL, 0, sysctl_numdirtybuffers, "I", @@ -309,8 +309,8 @@ SYSCTL_COUNTER_U64(_vfs, OID_AUTO, notbufdflushes, CTLFLAG_RD, ¬bufdflushes, "Number of dirty buffer flushes done by the bufdaemon helpers"); static long barrierwrites; -SYSCTL_LONG(_vfs, OID_AUTO, barrierwrites, CTLFLAG_RW, &barrierwrites, 0, - "Number of barrier writes"); +SYSCTL_LONG(_vfs, OID_AUTO, barrierwrites, CTLFLAG_RW | CTLFLAG_STATS, + &barrierwrites, 0, "Number of barrier writes"); SYSCTL_INT(_vfs, OID_AUTO, unmapped_buf_allowed, CTLFLAG_RD, &unmapped_buf_allowed, 0, "Permit the use of the unmapped i/o"); @@ -3423,8 +3423,9 @@ * particularly sensitive to. */ static int flushwithdeps = 0; -SYSCTL_INT(_vfs, OID_AUTO, flushwithdeps, CTLFLAG_RW, &flushwithdeps, - 0, "Number of buffers flushed with dependecies that require rollbacks"); +SYSCTL_INT(_vfs, OID_AUTO, flushwithdeps, CTLFLAG_RW | CTLFLAG_STATS, + &flushwithdeps, 0, + "Number of buffers flushed with dependecies that require rollbacks"); static int flushbufqueues(struct vnode *lvp, struct bufdomain *bd, int target, Index: sys/kern/vfs_subr.c =================================================================== --- sys/kern/vfs_subr.c +++ sys/kern/vfs_subr.c @@ -210,8 +210,8 @@ * XXX these are probably of (very) limited utility now. */ static int reassignbufcalls; -SYSCTL_INT(_vfs, OID_AUTO, reassignbufcalls, CTLFLAG_RW, &reassignbufcalls, 0, - "Number of calls to reassignbuf"); +SYSCTL_INT(_vfs, OID_AUTO, reassignbufcalls, CTLFLAG_RW | CTLFLAG_STATS, + &reassignbufcalls, 0, "Number of calls to reassignbuf"); static counter_u64_t free_owe_inact; SYSCTL_COUNTER_U64(_vfs, OID_AUTO, free_owe_inact, CTLFLAG_RD, &free_owe_inact, Index: sys/sys/sysctl.h =================================================================== --- sys/sys/sysctl.h +++ sys/sys/sysctl.h @@ -699,7 +699,7 @@ /* Oid for a 64-bit unsigned counter(9). The pointer must be non NULL. */ #define SYSCTL_COUNTER_U64(parent, nbr, name, access, ptr, descr) \ SYSCTL_OID(parent, nbr, name, \ - CTLTYPE_U64 | CTLFLAG_MPSAFE | (access), \ + CTLTYPE_U64 | CTLFLAG_MPSAFE | CTLFLAG_STATS | (access), \ (ptr), 0, sysctl_handle_counter_u64, "QU", descr); \ CTASSERT((((access) & CTLTYPE) == 0 || \ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U64) && \ @@ -712,7 +712,7 @@ CTASSERT(((access) & CTLTYPE) == 0 || \ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U64); \ sysctl_add_oid(ctx, parent, nbr, name, \ - CTLTYPE_U64 | CTLFLAG_MPSAFE | (access), \ + CTLTYPE_U64 | CTLFLAG_MPSAFE | CTLFLAG_STATS | (access), \ __ptr, 0, sysctl_handle_counter_u64, "QU", __DESCR(descr), \ NULL); \ }) @@ -720,7 +720,7 @@ /* Oid for an array of counter(9)s. The pointer and length must be non zero. */ #define SYSCTL_COUNTER_U64_ARRAY(parent, nbr, name, access, ptr, len, descr) \ SYSCTL_OID(parent, nbr, name, \ - CTLTYPE_OPAQUE | CTLFLAG_MPSAFE | (access), \ + CTLTYPE_OPAQUE | CTLFLAG_MPSAFE | CTLFLAG_STATS | (access), \ (ptr), (len), sysctl_handle_counter_u64_array, "S", descr); \ CTASSERT((((access) & CTLTYPE) == 0 || \ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_OPAQUE) && \ @@ -734,7 +734,7 @@ CTASSERT(((access) & CTLTYPE) == 0 || \ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_OPAQUE); \ sysctl_add_oid(ctx, parent, nbr, name, \ - CTLTYPE_OPAQUE | CTLFLAG_MPSAFE | (access), \ + CTLTYPE_OPAQUE | CTLFLAG_MPSAFE | CTLFLAG_STATS | (access), \ __ptr, len, sysctl_handle_counter_u64_array, "S", \ __DESCR(descr), NULL); \ }) Index: sys/ufs/ffs/ffs_softdep.c =================================================================== --- sys/ufs/ffs/ffs_softdep.c +++ sys/ufs/ffs/ffs_softdep.c @@ -1311,54 +1311,55 @@ &tickdelay, 0, ""); SYSCTL_INT(_debug_softdep, OID_AUTO, flush_threads, CTLFLAG_RD, &stat_flush_threads, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, worklist_push, CTLFLAG_RW, - &stat_worklist_push, 0,""); -SYSCTL_INT(_debug_softdep, OID_AUTO, blk_limit_push, CTLFLAG_RW, - &stat_blk_limit_push, 0,""); -SYSCTL_INT(_debug_softdep, OID_AUTO, ino_limit_push, CTLFLAG_RW, - &stat_ino_limit_push, 0,""); -SYSCTL_INT(_debug_softdep, OID_AUTO, blk_limit_hit, CTLFLAG_RW, - &stat_blk_limit_hit, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, ino_limit_hit, CTLFLAG_RW, - &stat_ino_limit_hit, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, sync_limit_hit, CTLFLAG_RW, - &stat_sync_limit_hit, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, indir_blk_ptrs, CTLFLAG_RW, - &stat_indir_blk_ptrs, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, inode_bitmap, CTLFLAG_RW, - &stat_inode_bitmap, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, direct_blk_ptrs, CTLFLAG_RW, - &stat_direct_blk_ptrs, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, dir_entry, CTLFLAG_RW, - &stat_dir_entry, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, jaddref_rollback, CTLFLAG_RW, - &stat_jaddref, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, jnewblk_rollback, CTLFLAG_RW, - &stat_jnewblk, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, journal_low, CTLFLAG_RW, - &stat_journal_low, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, journal_min, CTLFLAG_RW, - &stat_journal_min, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, journal_wait, CTLFLAG_RW, - &stat_journal_wait, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, jwait_filepage, CTLFLAG_RW, - &stat_jwait_filepage, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, jwait_freeblks, CTLFLAG_RW, - &stat_jwait_freeblks, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, jwait_inode, CTLFLAG_RW, - &stat_jwait_inode, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, jwait_newblk, CTLFLAG_RW, - &stat_jwait_newblk, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, cleanup_blkrequests, CTLFLAG_RW, - &stat_cleanup_blkrequests, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, cleanup_inorequests, CTLFLAG_RW, - &stat_cleanup_inorequests, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, cleanup_high_delay, CTLFLAG_RW, - &stat_cleanup_high_delay, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, cleanup_retries, CTLFLAG_RW, - &stat_cleanup_retries, 0, ""); -SYSCTL_INT(_debug_softdep, OID_AUTO, cleanup_failures, CTLFLAG_RW, - &stat_cleanup_failures, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, worklist_push, + CTLFLAG_RW | CTLFLAG_STATS, &stat_worklist_push, 0,""); +SYSCTL_INT(_debug_softdep, OID_AUTO, blk_limit_push, + CTLFLAG_RW | CTLFLAG_STATS, &stat_blk_limit_push, 0,""); +SYSCTL_INT(_debug_softdep, OID_AUTO, ino_limit_push, + CTLFLAG_RW | CTLFLAG_STATS, &stat_ino_limit_push, 0,""); +SYSCTL_INT(_debug_softdep, OID_AUTO, blk_limit_hit, + CTLFLAG_RW | CTLFLAG_STATS, &stat_blk_limit_hit, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, ino_limit_hit, + CTLFLAG_RW | CTLFLAG_STATS, &stat_ino_limit_hit, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, sync_limit_hit, + CTLFLAG_RW | CTLFLAG_STATS, &stat_sync_limit_hit, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, indir_blk_ptrs, + CTLFLAG_RW | CTLFLAG_STATS, &stat_indir_blk_ptrs, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, inode_bitmap, + CTLFLAG_RW | CTLFLAG_STATS, &stat_inode_bitmap, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, direct_blk_ptrs, + CTLFLAG_RW | CTLFLAG_STATS, &stat_direct_blk_ptrs, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, dir_entry, + CTLFLAG_RW | CTLFLAG_STATS, &stat_dir_entry, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, jaddref_rollback, + CTLFLAG_RW | CTLFLAG_STATS, &stat_jaddref, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, jnewblk_rollback, + CTLFLAG_RW | CTLFLAG_STATS, &stat_jnewblk, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, journal_low, + CTLFLAG_RW | CTLFLAG_STATS, &stat_journal_low, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, journal_min, + CTLFLAG_RW | CTLFLAG_STATS, &stat_journal_min, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, journal_wait, + CTLFLAG_RW | CTLFLAG_STATS, &stat_journal_wait, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, jwait_filepage, + CTLFLAG_RW | CTLFLAG_STATS, &stat_jwait_filepage, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, jwait_freeblks, + CTLFLAG_RW | CTLFLAG_STATS, &stat_jwait_freeblks, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, jwait_inode, + CTLFLAG_RW | CTLFLAG_STATS, &stat_jwait_inode, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, jwait_newblk, + CTLFLAG_RW | CTLFLAG_STATS, &stat_jwait_newblk, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, cleanup_blkrequests, + CTLFLAG_RW | CTLFLAG_STATS, &stat_cleanup_blkrequests, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, cleanup_inorequests, + CTLFLAG_RW | CTLFLAG_STATS, &stat_cleanup_inorequests, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, cleanup_high_delay, + CTLFLAG_RW | CTLFLAG_STATS, &stat_cleanup_high_delay, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, cleanup_retries, + CTLFLAG_RW | CTLFLAG_STATS, &stat_cleanup_retries, 0, ""); +SYSCTL_INT(_debug_softdep, OID_AUTO, cleanup_failures, + CTLFLAG_RW | CTLFLAG_STATS, &stat_cleanup_failures, 0, ""); + SYSCTL_INT(_debug_softdep, OID_AUTO, flushcache, CTLFLAG_RW, &softdep_flushcache, 0, ""); SYSCTL_INT(_debug_softdep, OID_AUTO, emptyjblocks, CTLFLAG_RD, Index: sys/x86/x86/intr_machdep.c =================================================================== --- sys/x86/x86/intr_machdep.c +++ sys/x86/x86/intr_machdep.c @@ -750,7 +750,7 @@ sbuf_delete(&sbuf); return (error); } -SYSCTL_PROC(_hw, OID_AUTO, intrs, CTLTYPE_STRING | CTLFLAG_RW, +SYSCTL_PROC(_hw, OID_AUTO, intrs, CTLTYPE_STRING | CTLFLAG_RD, 0, 0, sysctl_hw_intrs, "A", "interrupt:number @cpu: count"); /* Index: tests/sys/kern/kern_descrip_test.c =================================================================== --- tests/sys/kern/kern_descrip_test.c +++ tests/sys/kern/kern_descrip_test.c @@ -28,16 +28,22 @@ __FBSDID("$FreeBSD$"); #include +#include +#include +#include +#include +#include +#include + #include #include #include #include #include +#include #include -#include -#include -#include #include + #include static volatile sig_atomic_t done; @@ -92,8 +98,13 @@ int r; errno = 0; - for (i = 0; i < n; i++) - ATF_REQUIRE((r = open(AFILE, O_RDONLY)) != -1); + for (i = 0; i < n; i++) { + r = open(AFILE, O_RDONLY); + if (r < 0) { + fprintf(stderr, "open: %s\n", strerror(errno)); + _exit(1); + } + } kill(getppid(), SIGUSR1); for (;;) { @@ -118,8 +129,11 @@ for (i = 0; i < PARALLEL; i++) if (fork() == 0) openfiles2(n / PARALLEL); - while (done != PARALLEL) + while (done != PARALLEL) { usleep(1000); + ATF_REQUIRE_EQ_MSG(0, waitpid(-1, NULL, WNOHANG), + "a child exited unexpectedly"); + } unlink(RENDEZVOUS); usleep(40000); } @@ -138,6 +152,7 @@ size_t oldlen; int maxfiles, oldmaxfiles, current; char buf[80]; + struct rlimit rl; oldlen = sizeof(maxfiles); if (sysctlbyname("kern.maxfiles", &maxfiles, &oldlen, NULL, 0) == -1) @@ -160,8 +175,11 @@ atf_tc_fail("getsysctlbyname(%s): %s", "kern.maxfiles", strerror(errno)); - openfiles(oldmaxfiles - current + 1); - (void)unlink(VALUE); + rl.rlim_cur = rl.rlim_max = maxfiles; + ATF_REQUIRE_EQ_MSG(0, setrlimit(RLIMIT_NOFILE, &rl), + "setrlimit(RLIMIT_NOFILE, %d): %s", maxfiles, strerror(errno)); + + openfiles(oldmaxfiles - current + EXPANDBY / 2); } ATF_TC_CLEANUP(kern_maxfiles__increase, tc) @@ -178,6 +196,8 @@ &oldmaxfiles, oldlen); } } + (void)unlink(VALUE); + (void)unlink(AFILE); } ATF_TP_ADD_TCS(tp)