f2fstat.c revision c15df2285d1e6b7cee8bd9fd23007ab23db16d82
131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project#include <stdio.h> 231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project#include <unistd.h> 331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project#include <stdlib.h> 431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project#include <string.h> 531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project#include <fcntl.h> 631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project#include <libgen.h> 731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project#ifdef DEBUG 931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project#define dbg(fmt, args...) printf(fmt, __VA_ARGS__); 1031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project#else 1131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project#define dbg(fmt, args...) 1231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project#endif 1331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 1431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/* 1531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * f2fs status 1631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 17a5902524d4403885eb4c50360bf3465c6be796efJoe Onorato#define F2FS_STATUS "/sys/kernel/debug/f2fs/status" 1831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 198f573952b8729b4319043ae0908997ecd2d68951Dianne Hackborn#define KEY_NODE 0x00000001 20629de3ef739883c0962423cc0c3a26299f162d3dRomain Guy#define KEY_META 0x00000010 21629de3ef739883c0962423cc0c3a26299f162d3dRomain Guy 2231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long util; 2331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long used_node_blks; 2431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long used_data_blks; 255c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy//unsigned long inline_inode; 2631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 279c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratounsigned long free_segs; 2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long valid_segs; 2931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long dirty_segs; 30f96811cdf564469a7a654a0c876288c9fd14f35eThe Android Open Source Projectunsigned long prefree_segs; 315c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy 32080d9b614e609826dce2606f9e474af674ead933Joe Onoratounsigned long gc, bg_gc; 33080d9b614e609826dce2606f9e474af674ead933Joe Onoratounsigned long cp; 3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long gc_data_blks; 3531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long gc_node_blks; 3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 3731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project//unsigned long extent_hit_ratio; 3831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 3931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long dirty_node, node_kb; 4031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long dirty_dents; 4131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long dirty_meta, meta_kb; 42f96811cdf564469a7a654a0c876288c9fd14f35eThe Android Open Source Projectunsigned long nat_caches; 4331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long dirty_sit; 4431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 4531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long free_nids; 4631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 4731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long ssr_blks; 4831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long lfs_blks; 4931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectunsigned long memory_kb; 5031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 5185a02a8d13eced310aee4c2a795e9c9c5435038fJoe Onoratostruct options { 52e47f55c30b9c24f01f2be861247c92f17fbe4a61Romain Guy int delay; 533a8820bdbad90642cf5cda4b00a8c92ecb699159Joe Onorato int interval; 5431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project char partname[32]; 5570864289fba6daf07b8de98524cdfb765a62552dJeff Sharkey}; 5631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 5731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectstruct mm_table { 5831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project const char *name; 5931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project unsigned long *val; 6031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project int flag; 618f573952b8729b4319043ae0908997ecd2d68951Dianne Hackborn}; 628f573952b8729b4319043ae0908997ecd2d68951Dianne Hackborn 6331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectstatic int compare_mm_table(const void *a, const void *b) 6431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project{ 6531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project dbg("[COMPARE] %s, %s\n", ((struct mm_table *)a)->name, ((struct mm_table *)b)->name); 6631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project return strcmp(((struct mm_table *)a)->name, ((struct mm_table *)b)->name); 6731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project} 6831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 6931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectstatic inline void remove_newline(char **head) 7031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project{ 7131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectagain: 7231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (**head == '\n') { 7331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *head = *head + 1; 7431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project goto again; 7531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 7670864289fba6daf07b8de98524cdfb765a62552dJeff Sharkey} 7770864289fba6daf07b8de98524cdfb765a62552dJeff Sharkey 7870864289fba6daf07b8de98524cdfb765a62552dJeff Sharkeyvoid f2fstat(struct options *opt) 7970864289fba6daf07b8de98524cdfb765a62552dJeff Sharkey{ 8070864289fba6daf07b8de98524cdfb765a62552dJeff Sharkey int fd; 8131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project int ret; 8231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project char keyname[32]; 8331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project char buf[4096]; 84f8bbd34d7d4705b49db202be92b920196bc7ea38Mike Cleron struct mm_table key = { keyname, NULL }; 8531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project struct mm_table *found; 8631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project int f2fstat_table_cnt; 8731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project char *head, *tail; 8831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project int found_cnt = 0; 8931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 9031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project static struct mm_table f2fstat_table[] = { 9131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project { " - Data", &used_data_blks, 0 }, 9231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project { " - Dirty", &dirty_segs, 0 }, 930589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato { " - Free", &free_segs, 0 }, 9400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato { " - NATs", &nat_caches, 0 }, 9570864289fba6daf07b8de98524cdfb765a62552dJeff Sharkey { " - Node", &used_node_blks, 0 }, 9670864289fba6daf07b8de98524cdfb765a62552dJeff Sharkey { " - Prefree", &prefree_segs, 0 }, 9770864289fba6daf07b8de98524cdfb765a62552dJeff Sharkey { " - SITs", &dirty_sit, 0 }, 9870864289fba6daf07b8de98524cdfb765a62552dJeff Sharkey { " - Valid", &valid_segs, 0 }, 9970864289fba6daf07b8de98524cdfb765a62552dJeff Sharkey { " - dents", &dirty_dents, 0 }, 10070864289fba6daf07b8de98524cdfb765a62552dJeff Sharkey { " - free_nids", &free_nids, 0 }, 10131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project { " - meta", &dirty_meta, KEY_META }, 10270864289fba6daf07b8de98524cdfb765a62552dJeff Sharkey { " - nodes", &dirty_node, KEY_NODE }, 10331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project { "CP calls", &cp, 0 }, 104a9c28f6f97a4b34d9527c786e3aa8f02d92d9e07Joe Onorato { "GC calls", &gc, 0 }, 10531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project { "LFS", &lfs_blks, 0 }, 10631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project { "Memory", &memory_kb, 0 }, 107a206daaed1318005d1534cca2e4eeec56144d104Romain Guy { "SSR", &ssr_blks, 0 }, 10831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project { "Utilization", &util, 0 }, 1098a73c51ee87b6d9b12daba188034889caf7a905bRomain Guy }; 1108a73c51ee87b6d9b12daba188034889caf7a905bRomain Guy 1118a73c51ee87b6d9b12daba188034889caf7a905bRomain Guy f2fstat_table_cnt = sizeof(f2fstat_table)/sizeof(struct mm_table); 11231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 11331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project fd = open(F2FS_STATUS, O_RDONLY); 11431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (fd < 0) { 11531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project perror("open " F2FS_STATUS); 11631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project exit(EXIT_FAILURE); 11731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 11831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 11931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project ret = read(fd, buf, 4096); 12031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (ret < 0) { 12131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project perror("read " F2FS_STATUS); 12231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project exit(EXIT_FAILURE); 12331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 12431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project buf[ret] = '\0'; 12531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 12631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project head = buf; 12731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 12831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (opt->partname[0] != '\0') { 12931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project head = strstr(buf, opt->partname); 13031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (head == NULL) 13131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project exit(EXIT_FAILURE); 1328f573952b8729b4319043ae0908997ecd2d68951Dianne Hackborn } 1338f573952b8729b4319043ae0908997ecd2d68951Dianne Hackborn 13431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project for (;;) { 13531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project remove_newline(&head); 13631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project tail = strchr(head, ':'); 13731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (!tail) 1380d44e9482b95d8f163b28bf20131c4349185b589Joe Onorato break; 13931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *tail = '\0'; 14031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (strlen(head) >= sizeof(keyname)) { 14131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project dbg("[OVER] %s\n", head); 14231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *tail = ':'; 14331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project tail = strchr(head, '\n'); 14431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project head = tail + 1; 14531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project continue; 1460589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato } 1470589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato 14831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project strcpy(keyname, head); 14931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 1500589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato found = bsearch(&key, f2fstat_table, f2fstat_table_cnt, sizeof(struct mm_table), compare_mm_table); 1510589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato dbg("[RESULT] %s (%s)\n", head, (found) ? "O" : "X"); 15231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project head = tail + 1; 153a206daaed1318005d1534cca2e4eeec56144d104Romain Guy if (!found) 154a206daaed1318005d1534cca2e4eeec56144d104Romain Guy goto nextline; 155a206daaed1318005d1534cca2e4eeec56144d104Romain Guy 15631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *(found->val) = strtoul(head, &tail, 10); 15731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (found->flag) { 15831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project int npages; 15931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project tail = strstr(head, "in"); 16031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project head = tail + 2; 16131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project npages = strtoul(head, &tail, 10); 16231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project switch (found->flag & (KEY_NODE | KEY_META)) { 16331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project case KEY_NODE: 16431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project node_kb = npages * 4; 16531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project break; 16631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project case KEY_META: 16731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project meta_kb = npages * 4; 16831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project break; 16931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 17031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 17131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (++found_cnt == f2fstat_table_cnt) 17231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project break; 17331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectnextline: 17431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project tail = strchr(head, '\n'); 17531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (!tail) 17631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project break; 17731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project head = tail + 1; 17831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 17931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 18031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project close(fd); 18131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project} 18231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 18331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectvoid usage(void) 18431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project{ 18531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project printf("Usage: f2fstat [option]\n" 18631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project " -d delay (secs)\n" 18731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project " -i interval of head info\n" 18831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project " -p partition name (e.g. /dev/sda3)\n"); 18931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project exit(EXIT_FAILURE); 19031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project} 19131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 19231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectvoid parse_option(int argc, char *argv[], struct options *opt) 19331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project{ 19431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project char option; 19531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project const char *option_string = "d:i:p:h"; 19631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 19731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project while ((option = getopt(argc, argv, option_string)) != EOF) { 19831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project switch (option) { 19931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project case 'd': 20031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project opt->delay = atoi(optarg); 20131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project break; 20231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project case 'i': 20331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project opt->interval = atoi(optarg); 20431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project break; 20531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project case 'p': 20631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project strcpy(opt->partname, basename(optarg)); 20731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project break; 20831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project default: 20931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project usage(); 21031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project break; 21131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 21231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 21331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project} 21431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 21531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectvoid print_head(void) 21631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project{ 21731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project fprintf(stderr, "---utilization--- -----------main area-------- ---------balancing async------- ---gc--- ---alloc--- -----memory-----\n"); 21831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project fprintf(stderr, "util node data free valid dirty prefree node dent meta sit nat fnid cp gc ssr lfs total node meta\n"); 21931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project} 22031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 22131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectint main(int argc, char *argv[]) 22231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project{ 22331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project char format[] = "%3ld %6ld %6ld %6ld %6ld %6ld %6ld %5ld %5ld %3ld %5ld %5ld %3ld %3ld %3ld %6ld %6ld %6ld %6ld %6ld\n"; 22431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project int head_interval; 22531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project struct options opt = { 22631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project .delay = 1, 22731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project .interval = 20, 22831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project .partname = { 0, }, 22931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project }; 23031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 23131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project parse_option(argc, argv, &opt); 23231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project head_interval = opt.interval; 23331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 23431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project print_head(); 23531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project while (1) { 23631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project if (head_interval-- == 0) { 23731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project print_head(); 23831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project head_interval = opt.interval; 23931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 24031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 24131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project f2fstat(&opt); 24231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 24331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project fprintf(stderr, format, util, used_node_blks, used_data_blks, 24431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project free_segs, valid_segs, dirty_segs, prefree_segs, 24531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project dirty_node, dirty_dents, dirty_meta, dirty_sit, nat_caches, free_nids, 24631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project cp, gc, ssr_blks, lfs_blks, memory_kb, node_kb, meta_kb); 24731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 24831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project sleep(opt.delay); 24931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 25031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 25131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project return 0; 25231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project} 253c45b16862918a0c6c253bba12032165b030565afJoe Onorato