From d2ae1c99523ac4150a0d5536593781dbccfc1408 Mon Sep 17 00:00:00 2001 From: Tom Kula Date: Mon, 22 Dec 2008 19:01:46 +0000 Subject: [PATCH] vol-dump-incr-largefile-support-20081222 LICENSE IPL10 FIXES 123984 add large file support for >2gb dumps; add incremental support --- src/volser/vol-dump.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/volser/vol-dump.c b/src/volser/vol-dump.c index 0d5d2b455b..6bae9acee1 100644 --- a/src/volser/vol-dump.c +++ b/src/volser/vol-dump.c @@ -90,11 +90,11 @@ int VolumeChanged; /* needed by physio - leave alone */ int verbose = 0; /* Forward Declarations */ -void HandleVolume(struct DiskPartition64 *partP, char *name, char *filename); +void HandleVolume(struct DiskPartition64 *partP, char *name, char *filename, int fromtime); Volume *AttachVolume(struct DiskPartition64 *dp, char *volname, register struct VolumeHeader *header); static void DoMyVolDump(Volume * vp, struct DiskPartition64 *dp, - char *dumpfile); + char *dumpfile, int fromtime); #ifndef AFS_NT40_ENV #include "AFS_component_version_number.c" @@ -176,6 +176,8 @@ handleit(struct cmd_syndesc *as, void *arock) struct DiskPartition64 *partP = NULL; char name1[128]; char tmpPartName[20]; + int fromtime = 0; + afs_int32 code; #ifndef AFS_NT40_ENV @@ -195,6 +197,14 @@ handleit(struct cmd_syndesc *as, void *arock) fileName = ti->data; if ((ti = as->parms[3].items)) verbose = 1; + if (as->parms[4].items && strcmp(as->parms[4].items->data, "0")) { + code = ktime_DateToInt32(as->parms[4].items->data, &fromtime); + if (code) { + fprintf(STDERR, "failed to parse date '%s' (error=%d))\n", + as->parms[4].items->data, code); + return code; + } + } DInit(10); @@ -232,12 +242,12 @@ handleit(struct cmd_syndesc *as, void *arock) } (void)afs_snprintf(name1, sizeof name1, VFORMAT, (unsigned long)volumeId); - HandleVolume(partP, name1, fileName); + HandleVolume(partP, name1, fileName, fromtime); return 0; } void -HandleVolume(struct DiskPartition64 *dp, char *name, char *filename) +HandleVolume(struct DiskPartition64 *dp, char *name, char *filename, int fromtime) { struct VolumeHeader header; struct VolumeDiskHeader diskHeader; @@ -279,7 +289,7 @@ HandleVolume(struct DiskPartition64 *dp, char *name, char *filename) exit(1); } - DoMyVolDump(vp, dp, filename); + DoMyVolDump(vp, dp, filename, fromtime); } @@ -298,6 +308,7 @@ main(int argc, char **argv) cmd_AddParm(ts, "-file", CMD_LIST, CMD_OPTIONAL, "Dump filename"); cmd_AddParm(ts, "-verbose", CMD_FLAG, CMD_OPTIONAL, "Trace dump progress (very verbose)"); + cmd_AddParm(ts, "-time", CMD_SINGLE, CMD_OPTIONAL, "dump from time"); code = cmd_Dispatch(argc, argv); return code; } @@ -834,17 +845,16 @@ DumpPartial(int dumpfd, register Volume * vp, afs_int32 fromtime, static void -DoMyVolDump(Volume * vp, struct DiskPartition64 *dp, char *dumpfile) +DoMyVolDump(Volume * vp, struct DiskPartition64 *dp, char *dumpfile, int fromtime) { int code = 0; - int fromtime = 0; int dumpAllDirs = 0; int dumpfd = 0; if (dumpfile) { unlink(dumpfile); dumpfd = - open(dumpfile, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR); + afs_open(dumpfile, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR); if (dumpfd < 0) { fprintf(stderr, "Failed to open dump file! Exiting.\n"); exit(1);