* SYSCTL_SWAP_FRAGMENTATION() - produce raw swap space stats */
| 905 | * SYSCTL_SWAP_FRAGMENTATION() - produce raw swap space stats |
| 906 | */ |
| 907 | static int |
| 908 | sysctl_swap_fragmentation(SYSCTL_HANDLER_ARGS) |
| 909 | { |
| 910 | struct sbuf sbuf; |
| 911 | struct swdevt *sp; |
| 912 | const char *devname; |
| 913 | int error; |
| 914 | |
| 915 | error = sysctl_wire_old_buffer(req, 0); |
| 916 | if (error != 0) |
| 917 | return (error); |
| 918 | sbuf_new_for_sysctl(&sbuf, NULL, 128, req); |
| 919 | mtx_lock(&sw_dev_mtx); |
| 920 | TAILQ_FOREACH(sp, &swtailq, sw_list) { |
| 921 | if (vn_isdisk(sp->sw_vp)) |
| 922 | devname = devtoname(sp->sw_vp->v_rdev); |
| 923 | else |
| 924 | devname = "[file]"; |
| 925 | sbuf_printf(&sbuf, "\nFree space on device %s:\n", devname); |
| 926 | blist_stats(sp->sw_blist, &sbuf); |
| 927 | } |
| 928 | mtx_unlock(&sw_dev_mtx); |
| 929 | error = sbuf_finish(&sbuf); |
| 930 | sbuf_delete(&sbuf); |
| 931 | return (error); |
| 932 | } |
| 933 | |
| 934 | /* |
| 935 | * SWAP_PAGER_FREESPACE() - frees swap blocks associated with a page |
nothing calls this directly
no test coverage detected