]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-vol-dump-incr-largefile-support-20081222
authorTom Kula <tkula@umich.edu>
Mon, 22 Dec 2008 19:02:09 +0000 (19:02 +0000)
committerDerrick Brashear <shadow@dementia.org>
Mon, 22 Dec 2008 19:02:09 +0000 (19:02 +0000)
LICENSE IPL10
FIXES 123984

add large file support for >2gb dumps; add incremental support

(cherry picked from commit d2ae1c99523ac4150a0d5536593781dbccfc1408)

src/volser/vol-dump.c

index e9a78cdaa2d70d350ccfafa16a5e47e1a8a6bec0..cd1893c4088b09fd93966f333ef5633528d771fa 100644 (file)
@@ -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;
 }
@@ -831,17 +842,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);