vol-salvage: VOL_DONE deleted volumes
[openafs.git] / src / vol / vol-salvage.h
index e68ea4d..da86c6c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright 2000, International Business Machines Corporation and others.
  * All Rights Reserved.
- * 
+ *
  * This software has been released under the terms of the IBM Public
  * License.  For details, see the LICENSE file in the top-level source
  * directory or online at http://www.openafs.org/dl/license10.html
@@ -45,7 +45,7 @@ struct InodeSummary {         /* Inode summary file--an entry for each
     /* Either a pointer to the original volume
      * header summary, or constructed summary
      * information */
-} *inodeSummary;
+};
 #define readOnly(isp)  ((isp)->volumeId != (isp)->RWvolumeId)
 
 struct VolumeSummary {         /* Volume summary an entry for each
@@ -59,6 +59,7 @@ struct VolumeSummary {                /* Volume summary an entry for each
      * numbers of each major component of
      * the volume */
     IHandle_t *volumeInfoHandle;
+    char deleted;               /* did we delete this volume? */
     byte wouldNeedCallback;    /* set if the file server should issue
                                 * call backs for all the files in this volume when
                                 * the volume goes back on line */
@@ -66,8 +67,8 @@ struct VolumeSummary {                /* Volume summary an entry for each
 
 struct VnodeInfo {
     IHandle_t *handle;         /* Inode containing this index */
-    int nVnodes;               /* Total number of vnodes in index */
-    int nAllocatedVnodes;      /* Total number actually used */
+    afs_sfsize_t nVnodes;      /* Total number of vnodes in index */
+    afs_sfsize_t nAllocatedVnodes;     /* Total number actually used */
     int volumeBlockCount;      /* Total number of blocks used by volume */
     Inode *inodes;             /* Directory only */
     struct VnodeEssence {
@@ -110,6 +111,8 @@ struct DirSummary {
     IHandle_t *ds_linkH;
 };
 
+struct SalvInfo;
+
 #define ORPH_IGNORE 0
 #define ORPH_REMOVE 1
 #define ORPH_ATTACH 2
@@ -144,40 +147,8 @@ extern int ForceSalvage;           /* If salvage should occur despite the DONT_SALVAGE fl
 
 #define ROOTINODE      2       /* Root inode of a 4.2 Unix file system
                                 * partition */
-extern Device fileSysDevice;   /* The device number of the current
-                                * partition being salvaged */
-#ifdef AFS_NT40_ENV
-extern char fileSysPath[8];
-#else
-extern char *fileSysPath;      /* The path of the mounted partition currently
-                                * being salvaged, i.e. the directory
-                                * containing the volume headers */
-#endif /* AFS_NT40_ENV */
-extern char *fileSysPathName;  /* NT needs this to make name pretty in log. */
-extern IHandle_t *VGLinkH;     /* Link handle for current volume group. */
-extern int VGLinkH_cnt;                /* # of references to lnk handle. */
-extern struct DiskPartition64 *fileSysPartition;       /* Partition  being salvaged */
-#ifndef AFS_NT40_ENV
-extern char *fileSysDeviceName;        /* The block device where the file system
-                                * being salvaged was mounted */
-extern char *filesysfulldev;
-#endif /* AFS_NT40_ENV */
-extern int VolumeChanged;      /* Set by any routine which would change the volume in
-                                * a way which would require callback is to be broken if the
-                                * volume was put back on line by an active file server */
-
-extern VolumeDiskData VolInfo; /* A copy of the last good or salvaged volume header dealt with */
-
-extern int nVolumesInInodeFile;        /* Number of read-write volumes summarized */
-extern int inodeFd;            /* File descriptor for inode file */
 
 
-extern struct VnodeInfo vnodeInfo[nVNODECLASSES];
-
-
-extern struct VolumeSummary *volumeSummaryp;   /* Holds all the volumes in a part */
-extern int nVolumes;           /* Number of volumes (read-write and read-only)
-                                * in volume summary */
 
 extern char * tmpdir;
 extern FILE *logFile;          /* one of {/usr/afs/logs,/vice/file}/SalvageLog */
@@ -210,6 +181,7 @@ extern int nt_SetupPartitionSalvage(void *datap, int len);
 typedef struct {
     struct InodeSummary *svgp_inodeSummaryp;
     int svgp_count;
+    struct SalvInfo *svgp_salvinfo;
 } SVGParms_t;
 #endif /* AFS_NT40_ENV */
 
@@ -217,63 +189,71 @@ extern int canfork;
 
 
 /* prototypes */
-extern void Exit(int code);
+extern void Exit(int code) AFS_NORETURN;
 extern int Fork(void);
 extern int Wait(char *prog);
 extern char *ToString(const char *s);
-extern void AskOffline(VolumeId volumeId, char * partition);
-extern void AskOnline(VolumeId volumeId, char *partition);
+extern void AskOffline(struct SalvInfo *salvinfo, VolumeId volumeId);
+extern void AskOnline(struct SalvInfo *salvinfo, VolumeId volumeId);
+extern void AskDelete(struct SalvInfo *salvinfo, VolumeId volumeId);
 extern void CheckLogFile(char * log_path);
 #ifndef AFS_NT40_ENV
 extern void TimeStampLogFile(char * log_path);
 #endif
 extern void ClearROInUseBit(struct VolumeSummary *summary);
-extern void CopyAndSalvage(register struct DirSummary *dir);
+extern void CopyAndSalvage(struct SalvInfo *salvinfo, struct DirSummary *dir);
 extern int CopyInode(Device device, Inode inode1, Inode inode2, int rwvolume);
-extern void CopyOnWrite(register struct DirSummary *dir);
+extern void CopyOnWrite(struct SalvInfo *salvinfo, struct DirSummary *dir);
 extern void CountVolumeInodes(register struct ViceInodeInfo *ip, int maxInodes,
                       register struct InodeSummary *summary);
-extern void DeleteExtraVolumeHeaderFile(register struct VolumeSummary *vsp);
-extern void DistilVnodeEssence(VolumeId vid, VnodeClass class, Inode ino,
-                              Unique * maxu);
-extern int GetInodeSummary(FILE *inodeFile, VolumeId singleVolumeNumber);
-extern int GetVolumeSummary(VolumeId singleVolumeNumber);
+extern void DeleteExtraVolumeHeaderFile(struct SalvInfo *salvinfo,
+                                        struct VolumeSummary *vsp);
+extern void DistilVnodeEssence(struct SalvInfo *salvinfo, VolumeId vid,
+                               VnodeClass class, Inode ino, Unique * maxu);
+extern int GetInodeSummary(struct SalvInfo *salvinfo, FILE *inodeFile,
+                           VolumeId singleVolumeNumber);
+extern int GetVolumeSummary(struct SalvInfo *salvinfo,
+                           VolumeId singleVolumeNumber);
 extern int JudgeEntry(void *dirVal, char *name, afs_int32 vnodeNumber,
                      afs_int32 unique);
-extern void MaybeZapVolume(register struct InodeSummary *isp, char *message,
-                          int deleteMe, int check);
+extern void MaybeZapVolume(struct SalvInfo *salvinfo, struct InodeSummary *isp,
+                           char *message, int deleteMe, int check);
 extern void ObtainSalvageLock(void);
 extern void ObtainSharedSalvageLock(void);
-extern void PrintInodeList(void);
-extern void PrintInodeSummary(void);
-extern void PrintVolumeSummary(void);
-extern int QuickCheck(register struct InodeSummary *isp, int nVols);
+extern void PrintInodeList(struct SalvInfo *salvinfo);
+extern void PrintInodeSummary(struct SalvInfo *salvinfo);
+extern void PrintVolumeSummary(struct SalvInfo *salvinfo);
+extern int QuickCheck(struct SalvInfo *salvinfo, struct InodeSummary *isp,
+                      int nVols);
 extern void RemoveTheForce(char *path);
-extern void SalvageDir(char *name, VolumeId rwVid, struct VnodeInfo *dirVnodeInfo,
-                      IHandle_t * alinkH, int i, struct DirSummary *rootdir,
-                      int *rootdirfound);
+extern void SalvageDir(struct SalvInfo *salvinfo, char *name, VolumeId rwVid,
+                      struct VnodeInfo *dirVnodeInfo, IHandle_t * alinkH,
+                      int i, struct DirSummary *rootdir, int *rootdirfound);
 extern void SalvageFileSysParallel(struct DiskPartition64 *partP);
 extern void SalvageFileSys(struct DiskPartition64 *partP, VolumeId singleVolumeNumber);
 extern void SalvageFileSys1(struct DiskPartition64 *partP,
                            VolumeId singleVolumeNumber);
-extern int SalvageHeader(register struct stuff *sp, struct InodeSummary *isp,
-                        int check, int *deleteMe);
-extern int SalvageIndex(Inode ino, VnodeClass class, int RW,
-                       register struct ViceInodeInfo *ip, int nInodes,
-                       struct VolumeSummary *volSummary, int check);
-extern int SalvageVnodes(register struct InodeSummary *rwIsp,
-                        register struct InodeSummary *thisIsp,
-                        register struct ViceInodeInfo *inodes, int check);
-extern int SalvageVolume(register struct InodeSummary *rwIsp, IHandle_t * alinkH);
-extern void DoSalvageVolumeGroup(register struct InodeSummary *isp, int nVols);
+extern int SalvageHeader(struct SalvInfo *salvinfo, struct afs_inode_info *sp,
+                        struct InodeSummary *isp, int check, int *deleteMe);
+extern int SalvageIndex(struct SalvInfo *salvinfo, Inode ino, VnodeClass class,
+                        int RW, struct ViceInodeInfo *ip, int nInodes,
+                        struct VolumeSummary *volSummary, int check);
+extern int SalvageVnodes(struct SalvInfo *salvinfo, struct InodeSummary *rwIsp,
+                        struct InodeSummary *thisIsp,
+                        struct ViceInodeInfo *inodes, int check);
+extern int SalvageVolume(struct SalvInfo *salvinfo, struct InodeSummary *rwIsp,
+                         IHandle_t * alinkH);
+extern void DoSalvageVolumeGroup(struct SalvInfo *salvinfo,
+                                 struct InodeSummary *isp, int nVols);
 #ifdef AFS_NT40_ENV
-extern void SalvageVolumeGroup(register struct InodeSummary *isp, int nVols);
+extern void SalvageVolumeGroup(struct SalvInfo *salvinfo, struct InodeSummary *isp, int nVols);
 #else
 #define SalvageVolumeGroup DoSalvageVolumeGroup
 #endif
-extern int SalvageVolumeHeaderFile(register struct InodeSummary *isp,
-                                  register struct ViceInodeInfo *inodes, int RW,
-                                  int check, int *deleteMe);
+extern int SalvageVolumeHeaderFile(struct SalvInfo *salvinfo,
+                                   struct InodeSummary *isp,
+                                   struct ViceInodeInfo *inodes, int RW,
+                                   int check, int *deleteMe);
 extern void showlog(void);
 extern int UseTheForceLuke(char *path);