> +static void drop_all_caches()
> +{
> + int value = 3;
> + int fd;
> +
> + if ((fd = open("/proc/sys/vm/drop_caches", O_WRONLY)) < 0) {
> + fprintf(stderr, "Error opening drop caches: %d\n", errno);
> + return;
> + }
> +
> + write(fd, &value, sizeof(int));
> + close(fd);
> +}
fwiw drop_caches takes an ascii string, not a native int:
open("/proc/sys/vm/drop_caches", O_WRONLY) = 3
write(3, "\3\0\0\0", 4) = -1 EINVAL (Invalid argument)
--- test.c.busted 2013-04-22 15:22:57.593575545 -0700
+++ test.c 2013-04-22 15:29:25.358072087 -0700
@@ -7,7 +7,7 @@
static void drop_all_caches()
{
- int value = 3;
+ char value[] = "3\n";
int fd;
if ((fd = open("/proc/sys/vm/drop_caches", O_WRONLY)) < 0) {
@@ -15,7 +15,7 @@
return;
}
- write(fd, &value, sizeof(int));
+ write(fd, value, sizeof(value) - 1);
close(fd);
}
open("/proc/sys/vm/drop_caches", O_WRONLY) = 3
write(3, "3\n", 2) = 2
and all this makes me think that the write() return should probably have
been checked :).
- z
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html