From: Liu Yuan <tailai.ly at taobao.com> - use sys->disk_space instead of a duplicate sys call - use bytes internally for disk space calculation Signed-off-by: Liu Yuan <tailai.ly at taobao.com> --- sheep/ops.c | 11 ++--------- sheep/sheep.c | 2 +- sheep/store.c | 8 ++++---- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/sheep/ops.c b/sheep/ops.c index 0cddf66..8ca8748 100644 --- a/sheep/ops.c +++ b/sheep/ops.c @@ -63,7 +63,6 @@ struct sd_op_template { static int stat_sheep(uint64_t *store_size, uint64_t *store_free, uint32_t epoch) { - struct statvfs vs; int ret; DIR *dir; struct dirent *d; @@ -72,12 +71,6 @@ static int stat_sheep(uint64_t *store_size, uint64_t *store_free, uint32_t epoch char path[1024]; struct strbuf store_dir = STRBUF_INIT; - ret = statvfs(mnt_path, &vs); - if (ret) { - ret = SD_RES_EIO; - goto out; - } - strbuf_addf(&store_dir, "%s", obj_path); dir = opendir(store_dir.buf); if (!dir) { @@ -101,8 +94,8 @@ static int stat_sheep(uint64_t *store_size, uint64_t *store_free, uint32_t epoch closedir(dir); ret = SD_RES_SUCCESS; - *store_size = (uint64_t)vs.f_frsize * vs.f_bfree + used; - *store_free = (uint64_t)vs.f_frsize * vs.f_bfree; + *store_size = sys->disk_space; + *store_free = sys->disk_space - used; out: strbuf_release(&store_dir); return ret; diff --git a/sheep/sheep.c b/sheep/sheep.c index 1800178..c743184 100644 --- a/sheep/sheep.c +++ b/sheep/sheep.c @@ -294,7 +294,7 @@ int main(int argc, char **argv) optarg, UINT64_MAX); exit(1); } - sys->disk_space = free_space; + sys->disk_space = free_space * 1024 * 1024; break; case 'c': sys->cdrv = find_cdrv(optarg); diff --git a/sheep/store.c b/sheep/store.c index b093916..542804a 100644 --- a/sheep/store.c +++ b/sheep/store.c @@ -449,7 +449,7 @@ static int init_disk_space(const char *base_path) { int ret = SD_RES_SUCCESS; uint64_t space_size = 0; - struct statfs sf; + struct statvfs fs; if (sys->gateway_only) goto out; @@ -465,17 +465,17 @@ static int init_disk_space(const char *base_path) goto out; } - ret = statfs(base_path, &sf); + ret = statvfs(base_path, &fs); if (ret < 0) { dprintf("get disk space failed %m\n"); ret = SD_RES_EIO; goto out; } - sys->disk_space = sf.f_bfree * 4 / 1024; + sys->disk_space = (uint64_t)fs.f_frsize * fs.f_bfree; ret = set_cluster_space(sys->disk_space); out: - dprintf("disk free space is %" PRIu64 "M\n", sys->disk_space); + dprintf("disk free space is %" PRIu64 "\n", sys->disk_space); return ret; } -- 1.7.10.2 |