From: George Dunlap <George.Dunlap@eu.citrix.com>
To: xen-devel@lists.xensource.com
Subject: [PATCH 2/4] xentrace: Add option to reserve disk space
Date: Mon, 25 Feb 2008 16:58:46 +0000 [thread overview]
Message-ID: <47C2F3C6.4060101@eu.citrix.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1 bytes --]
[-- Attachment #2: 02.xentrace.disk-reservation.patch --]
[-- Type: text/x-patch, Size: 3056 bytes --]
xentrace: Add option to reserve disk space
Before writing records, xentrace will check to make sure that there is a
minimum amount of space left on the output filesystem.
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
diff -r c8b6db963a29 tools/xentrace/xentrace.c
--- a/tools/xentrace/xentrace.c Mon Feb 25 15:49:36 2008 +0000
+++ b/tools/xentrace/xentrace.c Mon Feb 25 15:53:22 2008 +0000
@@ -15,6 +15,7 @@
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
+#include <sys/vfs.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
@@ -53,6 +54,7 @@ typedef struct settings_st {
uint32_t evt_mask;
uint32_t cpu_mask;
unsigned long tbuf_size;
+ unsigned long disk_rsvd;
uint8_t discard:1;
} settings_t;
@@ -83,8 +85,36 @@ void write_buffer(unsigned int cpu, unsi
void write_buffer(unsigned int cpu, unsigned char *start, int size,
int total_size, int outfd)
{
+ struct statfs stat;
size_t written = 0;
+ if ( opts.disk_rsvd != 0 )
+ {
+ unsigned long long freespace;
+
+ /* Check that filesystem has enough space. */
+ if ( fstatfs (outfd, &stat) )
+ {
+ fprintf(stderr, "Statfs failed!\n");
+ goto fail;
+ }
+
+ freespace = stat.f_bsize * (unsigned long long)stat.f_bfree;
+
+ if ( total_size )
+ freespace -= total_size;
+ else
+ freespace -= size;
+
+ freespace >>= 20; /* Convert to MB */
+
+ if ( freespace <= opts.disk_rsvd )
+ {
+ fprintf(stderr, "Disk space limit reached (free space: %lluMB, limit: %luMB).\n", freespace, opts.disk_rsvd);
+ exit (EXIT_FAILURE);
+ }
+ }
+
/* Write a CPU_BUF record on each buffer "window" written. Wrapped
* windows may involve two writes, so only write the record on the
* first write. */
@@ -541,6 +571,7 @@ void parse_args(int argc, char **argv)
{ "cpu-mask", required_argument, 0, 'c' },
{ "evt-mask", required_argument, 0, 'e' },
{ "trace-buf-size", required_argument, 0, 'S' },
+ { "reserve-disk-space", required_argument, 0, 'r' },
{ "discard-buffers", no_argument, 0, 'D' },
{ "help", no_argument, 0, '?' },
{ "version", no_argument, 0, 'V' },
@@ -572,11 +603,15 @@ void parse_args(int argc, char **argv)
printf("%s\n", program_version);
exit(EXIT_SUCCESS);
break;
-
+
case 'D': /* Discard traces currently in buffer */
opts.discard = 1;
break;
-
+
+ case 'r': /* Disk-space reservation */
+ opts.disk_rsvd = argtol(optarg, 0);
+ break;
+
default:
usage();
}
@@ -604,6 +639,7 @@ int main(int argc, char **argv)
opts.poll_sleep = POLL_SLEEP_MILLIS;
opts.evt_mask = 0;
opts.cpu_mask = 0;
+ opts.disk_rsvd = 0;
parse_args(argc, argv);
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
reply other threads:[~2008-02-25 16:58 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=47C2F3C6.4060101@eu.citrix.com \
--to=george.dunlap@eu.citrix.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.