Fix decoding of swapon flags
* swapon.c (SYS_FUNC(swapon)): Print priority regardless of SWAP_FLAG_PREFER flag being set. * tests/swap.c (error_msg): Handle EINVAL. (main): Check decoding of swapon flags.
This commit is contained in:
parent
f2f91c0933
commit
fcb94cded0
15
swapon.c
15
swapon.c
@ -6,14 +6,19 @@
|
||||
|
||||
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;
|
||||
}
|
||||
|
20
tests/swap.c
20
tests/swap.c
@ -14,6 +14,7 @@ error_msg(int error_num)
|
||||
switch (error_num) {
|
||||
case ENOSYS: return "ENOSYS";
|
||||
case EPERM: return "EPERM";
|
||||
case EINVAL: return "EINVAL";
|
||||
default: return "ENOENT";
|
||||
}
|
||||
}
|
||||
@ -27,6 +28,25 @@ main(void)
|
||||
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));
|
||||
|
Loading…
x
Reference in New Issue
Block a user