sbin/hammer: Don't expose softprune specific data structure
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Mon, 29 Aug 2016 10:45:37 +0000 (19:45 +0900)
committerTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Mon, 29 Aug 2016 14:14:52 +0000 (23:14 +0900)
Expose softprune function rather than both function and data structure.

sbin/hammer/cmd_cleanup.c
sbin/hammer/cmd_softprune.c
sbin/hammer/hammer.h
sbin/hammer/hammer_util.h

index 0b420d9..c43f040 100644 (file)
@@ -1061,11 +1061,6 @@ cleanup_prune(const char *path, const char *snapshots_path,
                  int arg1 __unused, int arg2, int snapshots_disabled)
 {
        const char *path_or_snapshots_path;
-       struct softprune *base = NULL;
-       struct hammer_ioc_prune dummy_template;
-
-       bzero(&dummy_template, sizeof(dummy_template));
-       hammer_softprune_scandir(&base, &dummy_template, snapshots_path);
 
        /*
         * If the snapshots_path (e.g. /var/hammer/...) has no snapshots
@@ -1073,7 +1068,10 @@ cleanup_prune(const char *path, const char *snapshots_path,
         * containing the snapshots_path instead of the requested
         * filesystem.  De-confuse prune.  We need a better way.
         */
-       path_or_snapshots_path = base ? snapshots_path : path;
+       if (hammer_softprune_testdir(snapshots_path))
+               path_or_snapshots_path = snapshots_path;
+       else
+               path_or_snapshots_path = path;
 
        /*
         * If snapshots have been disabled run prune-everything instead
index d336da2..900ca02 100644 (file)
 
 #include "hammer.h"
 
-static void softprune_usage(int code);
+struct softprune {
+       struct softprune *next;
+       struct statfs fs;
+       char *filesystem;
+       struct hammer_ioc_prune prune;
+       int maxelms;
+       int prune_min;
+};
+
+static void hammer_softprune_scandir(struct softprune **basep,
+                       struct hammer_ioc_prune *template,
+                       const char *dirname);
 static int hammer_softprune_scanmeta(int fd, struct softprune *scan,
                        int delete_all);
 static void hammer_meta_flushdelete(int fd, struct hammer_ioc_snapshot *dsnap);
@@ -48,6 +59,7 @@ static struct softprune *hammer_softprune_addentry(struct softprune **basep,
 static void hammer_softprune_addelm(struct softprune *scan, hammer_tid_t tid,
                        time_t ct, time_t mt);
 static void hammer_softprune_finalize(struct softprune *scan);
+static void softprune_usage(int code);
 
 /*
  * prune <softlink-dir>
@@ -238,7 +250,7 @@ hammer_cmd_softprune(char **av, int ac, int everything_opt)
  *      snapshot mechanic we don't have to scan softlinks any more
  *      and can just use the meta-data.  But for now we do both.
  */
-void
+static void
 hammer_softprune_scandir(struct softprune **basep,
                         struct hammer_ioc_prune *template,
                         const char *dirname)
@@ -283,6 +295,24 @@ hammer_softprune_scandir(struct softprune **basep,
                free(path);
 }
 
+/*
+ * Scan a directory for softlinks representing snapshots.
+ * Return 1 if the directory contains snapshots, otherwise 0.
+ */
+int
+hammer_softprune_testdir(const char *dirname)
+{
+       struct softprune *base = NULL;
+       struct hammer_ioc_prune dummy_template;
+
+       bzero(&dummy_template, sizeof(dummy_template));
+       hammer_softprune_scandir(&base, &dummy_template, dirname);
+
+       if (base)
+               return(1);
+       return(0);
+}
+
 /*
  * Scan the metadata snapshots for the filesystem and either delete them
  * or add them to the pruning list.
index 7b13ade..266511a 100644 (file)
@@ -139,8 +139,6 @@ void hammer_reset_cycle(void);
 int getpfs(struct hammer_ioc_pseudofs_rw *pfs, char *path);
 void relpfs(int fd, struct hammer_ioc_pseudofs_rw *pfs);
 void dump_pfsd(hammer_pseudofs_data_t, int);
-void hammer_softprune_scandir(struct softprune **basep,
-                         struct hammer_ioc_prune *template,
-                         const char *dirname);
+int hammer_softprune_testdir(const char *dirname);
 
 #endif /* !HAMMER_HAMMER_H_ */
index 9cbf979..78923a8 100644 (file)
@@ -116,15 +116,6 @@ struct buffer_info {
        void                    *ondisk;
 };
 
-struct softprune {
-       struct softprune *next;
-       struct statfs fs;
-       char *filesystem;
-       struct hammer_ioc_prune prune;
-       int maxelms;
-       int prune_min;
-};
-
 /*
  * Data structure for zone statistics.
  */