Added drop-caches command.

This commit is contained in:
Richard W.M. Jones
2009-05-01 11:18:44 +01:00
parent ac286b26df
commit 2dc9e8a858
3 changed files with 67 additions and 0 deletions

View File

@@ -29,6 +29,7 @@ guestfsd_SOURCES = \
debug.c \
devsparts.c \
dir.c \
dropcaches.c \
ext2.c \
file.c \
fsck.c \

52
daemon/dropcaches.c Normal file
View File

@@ -0,0 +1,52 @@
/* libguestfs - the guestfsd daemon
* Copyright (C) 2009 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include "daemon.h"
#include "actions.h"
#define PROCFILE "/proc/sys/vm/drop_caches"
int
do_drop_caches (int what)
{
FILE *fp;
sync ();
fp = fopen (PROCFILE, "w");
if (fp == NULL) {
reply_with_perror (PROCFILE);
return -1;
}
fprintf (fp, "%d", what);
if (fclose (fp) == EOF) {
reply_with_perror (PROCFILE);
return -1;
}
return 0;
}

View File

@@ -1737,6 +1737,20 @@ recursively using the C<cp -a> command.");
This moves a file from C<src> to C<dest> where C<dest> is
either a destination filename or destination directory.");
("drop_caches", (RErr, [Int "whattodrop"]), 90, [],
[InitEmpty, TestRun (
[["drop_caches"; "3"]])],
"drop kernel page cache, dentries and inodes",
"\
This instructs the guest kernel to drop its page cache,
and/or dentries and inode caches. The parameter C<whattodrop>
tells the kernel what precisely to drop, see
L<http://linux-mm.org/Drop_Caches>
Setting C<whattodrop> to 3 should drop everything.
This automatically calls L<sync(2)> before the operation,
so that the maximum guest memory is freed.");
]