SYS_FUNC(swapon)
{
- int flags = tcp->u_arg[1];
+ unsigned int flags = tcp->u_arg[1];
+ unsigned int prio = flags & SWAP_FLAG_PRIO_MASK;
+ flags &= ~SWAP_FLAG_PRIO_MASK;
printpath(tcp, tcp->u_arg[0]);
tprints(", ");
- printflags(swap_flags, flags & ~SWAP_FLAG_PRIO_MASK,
- "SWAP_FLAG_???");
- if (flags & SWAP_FLAG_PREFER)
- tprintf("|%d", flags & SWAP_FLAG_PRIO_MASK);
+ if (flags) {
+ printflags(swap_flags, flags, "SWAP_FLAG_???");
+ if (prio)
+ tprintf("|%u", prio);
+ } else {
+ tprintf("%u", prio);
+ }
return RVAL_DECODED;
}
switch (error_num) {
case ENOSYS: return "ENOSYS";
case EPERM: return "EPERM";
+ case EINVAL: return "EINVAL";
default: return "ENOENT";
}
}
printf("swapon(\"%s\", 0) = %d %s (%m)\n",
sample, rc, error_msg(errno));
+ rc = syscall(__NR_swapon, sample, 42);
+ printf("swapon(\"%s\", %s) = %d %s (%m)\n",
+ sample, "42", rc, error_msg(errno));
+
+ rc = syscall(__NR_swapon, sample, SWAP_FLAG_PREFER);
+ printf("swapon(\"%s\", %s) = %d %s (%m)\n",
+ sample, "SWAP_FLAG_PREFER", rc, error_msg(errno));
+
+ rc = syscall(__NR_swapon, sample, SWAP_FLAG_PREFER | 42);
+ printf("swapon(\"%s\", %s) = %d %s (%m)\n",
+ sample, "SWAP_FLAG_PREFER|42", rc, error_msg(errno));
+
+ rc = syscall(__NR_swapon, sample, -1L);
+ printf("swapon(\"%s\", %s) = %d %s (%m)\n",
+ sample,
+ "SWAP_FLAG_PREFER|SWAP_FLAG_DISCARD|SWAP_FLAG_DISCARD_ONCE"
+ "|SWAP_FLAG_DISCARD_PAGES|0xfff80000|32767",
+ rc, error_msg(errno));
+
rc = syscall(__NR_swapoff, sample);
printf("swapoff(\"%s\") = %d %s (%m)\n",
sample, rc, error_msg(errno));