aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2008-07-24 07:42:05 -0400
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2008-08-13 04:34:27 -0400
commit547000da6412c45456ff2ff44a171d01027bd727 (patch)
tree2f99e7033dd87273876a36081cc42c9926dc6709
parentf769108424a19c7758546d1d7d19f098b1a33759 (diff)
UBIFS: improve budgeting checks
Budgeting is a crucial UBIFS subsystem - add more assertions to improve requests checking. This is not compiled in when UBIFS debugging is disabled. Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
-rw-r--r--fs/ubifs/budget.c12
-rw-r--r--fs/ubifs/ubifs.h8
2 files changed, 19 insertions, 1 deletions
diff --git a/fs/ubifs/budget.c b/fs/ubifs/budget.c
index 12a1717db87c..f5afce5f37bd 100644
--- a/fs/ubifs/budget.c
+++ b/fs/ubifs/budget.c
@@ -543,6 +543,12 @@ int ubifs_budget_space(struct ubifs_info *c, struct ubifs_budget_req *req)
543 int err, idx_growth, data_growth, dd_growth; 543 int err, idx_growth, data_growth, dd_growth;
544 struct retries_info ri; 544 struct retries_info ri;
545 545
546 ubifs_assert(req->new_page <= 1);
547 ubifs_assert(req->dirtied_page <= 1);
548 ubifs_assert(req->new_dent <= 1);
549 ubifs_assert(req->mod_dent <= 1);
550 ubifs_assert(req->new_ino <= 1);
551 ubifs_assert(req->new_ino_d <= UBIFS_MAX_INO_DATA);
546 ubifs_assert(req->dirtied_ino <= 4); 552 ubifs_assert(req->dirtied_ino <= 4);
547 ubifs_assert(req->dirtied_ino_d <= UBIFS_MAX_INO_DATA * 4); 553 ubifs_assert(req->dirtied_ino_d <= UBIFS_MAX_INO_DATA * 4);
548 554
@@ -618,6 +624,12 @@ again:
618 */ 624 */
619void ubifs_release_budget(struct ubifs_info *c, struct ubifs_budget_req *req) 625void ubifs_release_budget(struct ubifs_info *c, struct ubifs_budget_req *req)
620{ 626{
627 ubifs_assert(req->new_page <= 1);
628 ubifs_assert(req->dirtied_page <= 1);
629 ubifs_assert(req->new_dent <= 1);
630 ubifs_assert(req->mod_dent <= 1);
631 ubifs_assert(req->new_ino <= 1);
632 ubifs_assert(req->new_ino_d <= UBIFS_MAX_INO_DATA);
621 ubifs_assert(req->dirtied_ino <= 4); 633 ubifs_assert(req->dirtied_ino <= 4);
622 ubifs_assert(req->dirtied_ino_d <= UBIFS_MAX_INO_DATA * 4); 634 ubifs_assert(req->dirtied_ino_d <= UBIFS_MAX_INO_DATA * 4);
623 if (!req->recalculate) { 635 if (!req->recalculate) {
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h
index d342c6907244..565dca2ec0bd 100644
--- a/fs/ubifs/ubifs.h
+++ b/fs/ubifs/ubifs.h
@@ -812,17 +812,23 @@ struct ubifs_compressor {
812struct ubifs_budget_req { 812struct ubifs_budget_req {
813 unsigned int fast:1; 813 unsigned int fast:1;
814 unsigned int recalculate:1; 814 unsigned int recalculate:1;
815#ifndef UBIFS_DEBUG
815 unsigned int new_page:1; 816 unsigned int new_page:1;
816 unsigned int dirtied_page:1; 817 unsigned int dirtied_page:1;
817 unsigned int new_dent:1; 818 unsigned int new_dent:1;
818 unsigned int mod_dent:1; 819 unsigned int mod_dent:1;
819 unsigned int new_ino:1; 820 unsigned int new_ino:1;
820 unsigned int new_ino_d:13; 821 unsigned int new_ino_d:13;
821#ifndef UBIFS_DEBUG
822 unsigned int dirtied_ino:4; 822 unsigned int dirtied_ino:4;
823 unsigned int dirtied_ino_d:15; 823 unsigned int dirtied_ino_d:15;
824#else 824#else
825 /* Not bit-fields to check for overflows */ 825 /* Not bit-fields to check for overflows */
826 unsigned int new_page;
827 unsigned int dirtied_page;
828 unsigned int new_dent;
829 unsigned int mod_dent;
830 unsigned int new_ino;
831 unsigned int new_ino_d;
826 unsigned int dirtied_ino; 832 unsigned int dirtied_ino;
827 unsigned int dirtied_ino_d; 833 unsigned int dirtied_ino_d;
828#endif 834#endif