diff options
Diffstat (limited to 'fs/ubifs/super.c')
-rw-r--r-- | fs/ubifs/super.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index a6a7798d020b..c3cefc841374 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include <linux/parser.h> | 34 | #include <linux/parser.h> |
35 | #include <linux/seq_file.h> | 35 | #include <linux/seq_file.h> |
36 | #include <linux/mount.h> | 36 | #include <linux/mount.h> |
37 | #include <linux/math64.h> | ||
37 | #include "ubifs.h" | 38 | #include "ubifs.h" |
38 | 39 | ||
39 | /* | 40 | /* |
@@ -612,7 +613,7 @@ static int bud_wbuf_callback(struct ubifs_info *c, int lnum, int free, int pad) | |||
612 | static int init_constants_late(struct ubifs_info *c) | 613 | static int init_constants_late(struct ubifs_info *c) |
613 | { | 614 | { |
614 | int tmp, err; | 615 | int tmp, err; |
615 | uint64_t tmp64; | 616 | long long tmp64; |
616 | 617 | ||
617 | c->main_bytes = (long long)c->main_lebs * c->leb_size; | 618 | c->main_bytes = (long long)c->main_lebs * c->leb_size; |
618 | c->max_znode_sz = sizeof(struct ubifs_znode) + | 619 | c->max_znode_sz = sizeof(struct ubifs_znode) + |
@@ -639,9 +640,8 @@ static int init_constants_late(struct ubifs_info *c) | |||
639 | * Make sure that the log is large enough to fit reference nodes for | 640 | * Make sure that the log is large enough to fit reference nodes for |
640 | * all buds plus one reserved LEB. | 641 | * all buds plus one reserved LEB. |
641 | */ | 642 | */ |
642 | tmp64 = c->max_bud_bytes; | 643 | tmp64 = c->max_bud_bytes + c->leb_size - 1; |
643 | tmp = do_div(tmp64, c->leb_size); | 644 | c->max_bud_cnt = div_u64(tmp64, c->leb_size); |
644 | c->max_bud_cnt = tmp64 + !!tmp; | ||
645 | tmp = (c->ref_node_alsz * c->max_bud_cnt + c->leb_size - 1); | 645 | tmp = (c->ref_node_alsz * c->max_bud_cnt + c->leb_size - 1); |
646 | tmp /= c->leb_size; | 646 | tmp /= c->leb_size; |
647 | tmp += 1; | 647 | tmp += 1; |
@@ -677,7 +677,7 @@ static int init_constants_late(struct ubifs_info *c) | |||
677 | * Consequently, if the journal is too small, UBIFS will treat it as | 677 | * Consequently, if the journal is too small, UBIFS will treat it as |
678 | * always full. | 678 | * always full. |
679 | */ | 679 | */ |
680 | tmp64 = (uint64_t)(c->jhead_cnt + 1) * c->leb_size + 1; | 680 | tmp64 = (long long)(c->jhead_cnt + 1) * c->leb_size + 1; |
681 | if (c->bg_bud_bytes < tmp64) | 681 | if (c->bg_bud_bytes < tmp64) |
682 | c->bg_bud_bytes = tmp64; | 682 | c->bg_bud_bytes = tmp64; |
683 | if (c->max_bud_bytes < tmp64 + c->leb_size) | 683 | if (c->max_bud_bytes < tmp64 + c->leb_size) |
@@ -699,7 +699,7 @@ static int init_constants_late(struct ubifs_info *c) | |||
699 | * head is available. | 699 | * head is available. |
700 | */ | 700 | */ |
701 | tmp64 = c->main_lebs - 1 - 1 - MIN_INDEX_LEBS - c->jhead_cnt + 1; | 701 | tmp64 = c->main_lebs - 1 - 1 - MIN_INDEX_LEBS - c->jhead_cnt + 1; |
702 | tmp64 *= (uint64_t)c->leb_size - c->leb_overhead; | 702 | tmp64 *= (long long)c->leb_size - c->leb_overhead; |
703 | tmp64 = ubifs_reported_space(c, tmp64); | 703 | tmp64 = ubifs_reported_space(c, tmp64); |
704 | c->block_cnt = tmp64 >> UBIFS_BLOCK_SHIFT; | 704 | c->block_cnt = tmp64 >> UBIFS_BLOCK_SHIFT; |
705 | 705 | ||