sbin/hammer: Add verbose volume message while recovering
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Sun, 7 Aug 2016 08:59:07 +0000 (17:59 +0900)
committerTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Sun, 7 Aug 2016 12:10:10 +0000 (21:10 +0900)
sizetostr() is brought from newfs_hammer code.

newfs_hammer should use sizetostr() by linking sbin/hammer/misc.o,
as it already has dependencies on other sbin/hammer/*.o.
(Also note that hammer2 also has sizetostr() in both directories)

sbin/hammer/cmd_recover.c
sbin/hammer/hammer.h
sbin/hammer/misc.c

index 0a19b5a..6655079 100644 (file)
@@ -78,6 +78,9 @@ hammer_cmd_recover(const char *target_dir)
 
        data_buffer = NULL;
        TAILQ_FOREACH(volume, &VolList, entry) {
+               check_volume(volume);
+               printf("Scanning volume %d size %s\n",
+                       volume->vol_no, sizetostr(volume->size));
                off = HAMMER_ENCODE_RAW_BUFFER(volume->vol_no, 0);
                off_end = off + HAMMER_VOL_BUF_SIZE(volume->ondisk);
                while (off < off_end) {
index 6215dd6..706c45e 100644 (file)
@@ -134,6 +134,7 @@ void relpfs(int fd, struct hammer_ioc_pseudofs_rw *pfs);
 void dump_pfsd(hammer_pseudofs_data_t, int);
 void hammer_check_restrict(const char *path);
 int getyn(void);
+const char *sizetostr(off_t size);
 int hammer_fs_to_vol(const char *fs, struct hammer_ioc_volume_list *iocp);
 int hammer_fs_to_rootvol(const char *fs, char *buf, int len);
 void hammer_softprune_scandir(struct softprune **basep,
index 1f49592..15e4b35 100644 (file)
@@ -218,6 +218,29 @@ getyn(void)
        return(0);
 }
 
+const char *
+sizetostr(off_t size)
+{
+       static char buf[32];
+
+       if (size < 1024 / 2) {
+               snprintf(buf, sizeof(buf), "%6.2f", (double)size);
+       } else if (size < 1024 * 1024 / 2) {
+               snprintf(buf, sizeof(buf), "%6.2fKB",
+                       (double)size / 1024);
+       } else if (size < 1024 * 1024 * 1024LL / 2) {
+               snprintf(buf, sizeof(buf), "%6.2fMB",
+                       (double)size / (1024 * 1024));
+       } else if (size < 1024 * 1024 * 1024LL * 1024LL / 2) {
+               snprintf(buf, sizeof(buf), "%6.2fGB",
+                       (double)size / (1024 * 1024 * 1024LL));
+       } else {
+               snprintf(buf, sizeof(buf), "%6.2fTB",
+                       (double)size / (1024 * 1024 * 1024LL * 1024LL));
+       }
+       return(buf);
+}
+
 int
 hammer_fs_to_vol(const char *fs, struct hammer_ioc_volume_list *p)
 {