33
44#include <vm/vm_param.h>
55#include <sys/stat.h>
6+ #include <sys/param.h>
7+
8+ static void addSwapEntry (FFlist * result , struct xswdev * xsw , uint32_t pageSize )
9+ {
10+ if (xsw -> xsw_nblks == 0 ) // DFBSD reports some /dev/wdog devices with nblks == 0
11+ return ;
12+
13+ FFSwapResult * swap = ffListAdd (result );
14+ if (xsw -> xsw_dev == NODEV )
15+ ffStrbufInitStatic (& swap -> name , "[NFS]" );
16+ else
17+ ffStrbufInitF (& swap -> name , "/dev/%s" , devname (xsw -> xsw_dev , S_IFCHR ));
18+ swap -> bytesUsed = (uint64_t ) xsw -> xsw_used * pageSize ;
19+ swap -> bytesTotal = (uint64_t ) xsw -> xsw_nblks * pageSize ;
20+ }
21+
22+ #if __DragonFly__
23+
24+ const char * ffDetectSwap (FFlist * result )
25+ {
26+ struct xswdev xsws [32 ];
27+ size_t size = sizeof (xsws );
28+ if (sysctlbyname ("vm.swap_info_array" , xsws , & size , NULL , 0 ) < 0 )
29+ return "sysctlbyname(\"vm.swap_info_array\") failed" ;
30+
31+ uint32_t pageSize = instance .state .platform .sysinfo .pageSize ;
32+
33+ size_t count = size / sizeof (struct xswdev );
34+ if (count == 0 )
35+ return NULL ;
36+
37+ if (xsws -> xsw_version != XSWDEV_VERSION )
38+ return "xswdev version mismatch" ;
39+
40+ for (uint32_t i = 0 ; i < count ; ++ i )
41+ addSwapEntry (result , & xsws [i ], pageSize );
42+
43+ return NULL ;
44+ }
45+
46+ #elif __FreeBSD__
647
748const char * ffDetectSwap (FFlist * result )
849{
@@ -12,7 +53,7 @@ const char* ffDetectSwap(FFlist* result)
1253 return "sysctlnametomib(\"vm.swap_info\") failed" ;
1354
1455 uint32_t pageSize = instance .state .platform .sysinfo .pageSize ;
15-
56+
1657 for (int n = 0 ; ; ++ n )
1758 {
1859 mib [mibsize ] = n ;
@@ -22,12 +63,11 @@ const char* ffDetectSwap(FFlist* result)
2263 break ;
2364 if (xsw .xsw_version != XSWDEV_VERSION )
2465 return "xswdev version mismatch" ;
25-
26- FFSwapResult * swap = ffListAdd (result );
27- ffStrbufInitF (& swap -> name , "/dev/%s" , devname (xsw .xsw_dev , S_IFCHR ));
28- swap -> bytesUsed = (uint64_t ) xsw .xsw_used * pageSize ;
29- swap -> bytesTotal = (uint64_t ) xsw .xsw_nblks * pageSize ;
66+
67+ addSwapEntry (result , & xsw , pageSize );
3068 }
3169
3270 return NULL ;
3371}
72+
73+ #endif
0 commit comments