]> git.tuebingen.mpg.de Git - dss.git/blobdiff - dss.c
Always try to keep one snapshot for recycling.
[dss.git] / dss.c
diff --git a/dss.c b/dss.c
index 95c4c03ab1c3467aa33507b35f7e57cc81d4aea9..a3bda5330510e5290ef234d0a8e67b29a726461d 100644 (file)
--- a/dss.c
+++ b/dss.c
@@ -606,9 +606,18 @@ static int try_to_free_disk_space(void)
                if (next_snapshot_is_due())
                        return 0;
        }
+       /*
+        * Idle and --keep_redundant not given, or low disk space. Look at
+        * existing snapshots.
+        */
        dss_get_snapshot_list(&sl);
        ret = 0;
-       if (!low_disk_space && sl.num_snapshots <= 1)
+       /*
+        * Don't remove anything if there is free space and we have fewer
+        * snapshots than configured, plus one. This way there is always one
+        * snapshot that can be recycled.
+        */
+       if (!low_disk_space && sl.num_snapshots <= 1 << conf.num_intervals_arg)
                goto out;
        why = "outdated";
        victim = find_outdated_snapshot(&sl);
@@ -1524,6 +1533,7 @@ int main(int argc, char **argv)
        if (ret < 0)
                goto out;
        ret = call_command_handler();
+       signal_shutdown();
 out:
        if (ret < 0)
                DSS_EMERG_LOG(("%s\n", dss_strerror(-ret)));