diff options
author | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2011-03-29 11:04:05 -0400 |
---|---|---|
committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2011-05-13 12:23:53 -0400 |
commit | b137545c44fc0c80fb778abb0c582bda5601e8f8 (patch) | |
tree | fb3da759a3c64587bee8bacf408cf774adb8b09a /fs | |
parent | cc64f774b4acd4954abe54f5919f50d78aba1e5f (diff) |
UBIFS: introduce a separate structure for budgeting info
This patch separates out all the budgeting-related information
from 'struct ubifs_info' to 'struct ubifs_budg_info'. This way the
code looks a bit cleaner. However, the main driver for this is
that we want to save budgeting information and print it later,
so a separate data structure for this is helpful.
This patch is a preparation for the further debugging output
improvements.
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ubifs/budget.c | 104 | ||||
-rw-r--r-- | fs/ubifs/commit.c | 2 | ||||
-rw-r--r-- | fs/ubifs/debug.c | 14 | ||||
-rw-r--r-- | fs/ubifs/dir.c | 4 | ||||
-rw-r--r-- | fs/ubifs/file.c | 4 | ||||
-rw-r--r-- | fs/ubifs/find.c | 10 | ||||
-rw-r--r-- | fs/ubifs/master.c | 8 | ||||
-rw-r--r-- | fs/ubifs/replay.c | 8 | ||||
-rw-r--r-- | fs/ubifs/super.c | 26 | ||||
-rw-r--r-- | fs/ubifs/tnc_commit.c | 10 | ||||
-rw-r--r-- | fs/ubifs/ubifs.h | 75 |
11 files changed, 135 insertions, 130 deletions
diff --git a/fs/ubifs/budget.c b/fs/ubifs/budget.c index 8b3a7da531eb..315de66e52b2 100644 --- a/fs/ubifs/budget.c +++ b/fs/ubifs/budget.c | |||
@@ -106,7 +106,7 @@ static long long get_liability(struct ubifs_info *c) | |||
106 | long long liab; | 106 | long long liab; |
107 | 107 | ||
108 | spin_lock(&c->space_lock); | 108 | spin_lock(&c->space_lock); |
109 | liab = c->budg_idx_growth + c->budg_data_growth + c->budg_dd_growth; | 109 | liab = c->bi.idx_growth + c->bi.data_growth + c->bi.dd_growth; |
110 | spin_unlock(&c->space_lock); | 110 | spin_unlock(&c->space_lock); |
111 | return liab; | 111 | return liab; |
112 | } | 112 | } |
@@ -180,7 +180,7 @@ int ubifs_calc_min_idx_lebs(struct ubifs_info *c) | |||
180 | int idx_lebs; | 180 | int idx_lebs; |
181 | long long idx_size; | 181 | long long idx_size; |
182 | 182 | ||
183 | idx_size = c->old_idx_sz + c->budg_idx_growth + c->budg_uncommitted_idx; | 183 | idx_size = c->bi.old_idx_sz + c->bi.idx_growth + c->bi.uncommitted_idx; |
184 | /* And make sure we have thrice the index size of space reserved */ | 184 | /* And make sure we have thrice the index size of space reserved */ |
185 | idx_size += idx_size << 1; | 185 | idx_size += idx_size << 1; |
186 | /* | 186 | /* |
@@ -292,13 +292,13 @@ static int can_use_rp(struct ubifs_info *c) | |||
292 | * budgeted index space to the size of the current index, multiplies this by 3, | 292 | * budgeted index space to the size of the current index, multiplies this by 3, |
293 | * and makes sure this does not exceed the amount of free LEBs. | 293 | * and makes sure this does not exceed the amount of free LEBs. |
294 | * | 294 | * |
295 | * Notes about @c->min_idx_lebs and @c->lst.idx_lebs variables: | 295 | * Notes about @c->bi.min_idx_lebs and @c->lst.idx_lebs variables: |
296 | * o @c->lst.idx_lebs is the number of LEBs the index currently uses. It might | 296 | * o @c->lst.idx_lebs is the number of LEBs the index currently uses. It might |
297 | * be large, because UBIFS does not do any index consolidation as long as | 297 | * be large, because UBIFS does not do any index consolidation as long as |
298 | * there is free space. IOW, the index may take a lot of LEBs, but the LEBs | 298 | * there is free space. IOW, the index may take a lot of LEBs, but the LEBs |
299 | * will contain a lot of dirt. | 299 | * will contain a lot of dirt. |
300 | * o @c->min_idx_lebs is the number of LEBS the index presumably takes. IOW, | 300 | * o @c->bi.min_idx_lebs is the number of LEBS the index presumably takes. IOW, |
301 | * the index may be consolidated to take up to @c->min_idx_lebs LEBs. | 301 | * the index may be consolidated to take up to @c->bi.min_idx_lebs LEBs. |
302 | * | 302 | * |
303 | * This function returns zero in case of success, and %-ENOSPC in case of | 303 | * This function returns zero in case of success, and %-ENOSPC in case of |
304 | * failure. | 304 | * failure. |
@@ -343,13 +343,13 @@ static int do_budget_space(struct ubifs_info *c) | |||
343 | c->lst.taken_empty_lebs; | 343 | c->lst.taken_empty_lebs; |
344 | if (unlikely(rsvd_idx_lebs > lebs)) { | 344 | if (unlikely(rsvd_idx_lebs > lebs)) { |
345 | dbg_budg("out of indexing space: min_idx_lebs %d (old %d), " | 345 | dbg_budg("out of indexing space: min_idx_lebs %d (old %d), " |
346 | "rsvd_idx_lebs %d", min_idx_lebs, c->min_idx_lebs, | 346 | "rsvd_idx_lebs %d", min_idx_lebs, c->bi.min_idx_lebs, |
347 | rsvd_idx_lebs); | 347 | rsvd_idx_lebs); |
348 | return -ENOSPC; | 348 | return -ENOSPC; |
349 | } | 349 | } |
350 | 350 | ||
351 | available = ubifs_calc_available(c, min_idx_lebs); | 351 | available = ubifs_calc_available(c, min_idx_lebs); |
352 | outstanding = c->budg_data_growth + c->budg_dd_growth; | 352 | outstanding = c->bi.data_growth + c->bi.dd_growth; |
353 | 353 | ||
354 | if (unlikely(available < outstanding)) { | 354 | if (unlikely(available < outstanding)) { |
355 | dbg_budg("out of data space: available %lld, outstanding %lld", | 355 | dbg_budg("out of data space: available %lld, outstanding %lld", |
@@ -360,7 +360,7 @@ static int do_budget_space(struct ubifs_info *c) | |||
360 | if (available - outstanding <= c->rp_size && !can_use_rp(c)) | 360 | if (available - outstanding <= c->rp_size && !can_use_rp(c)) |
361 | return -ENOSPC; | 361 | return -ENOSPC; |
362 | 362 | ||
363 | c->min_idx_lebs = min_idx_lebs; | 363 | c->bi.min_idx_lebs = min_idx_lebs; |
364 | return 0; | 364 | return 0; |
365 | } | 365 | } |
366 | 366 | ||
@@ -393,11 +393,11 @@ static int calc_data_growth(const struct ubifs_info *c, | |||
393 | { | 393 | { |
394 | int data_growth; | 394 | int data_growth; |
395 | 395 | ||
396 | data_growth = req->new_ino ? c->inode_budget : 0; | 396 | data_growth = req->new_ino ? c->bi.inode_budget : 0; |
397 | if (req->new_page) | 397 | if (req->new_page) |
398 | data_growth += c->page_budget; | 398 | data_growth += c->bi.page_budget; |
399 | if (req->new_dent) | 399 | if (req->new_dent) |
400 | data_growth += c->dent_budget; | 400 | data_growth += c->bi.dent_budget; |
401 | data_growth += req->new_ino_d; | 401 | data_growth += req->new_ino_d; |
402 | return data_growth; | 402 | return data_growth; |
403 | } | 403 | } |
@@ -413,12 +413,12 @@ static int calc_dd_growth(const struct ubifs_info *c, | |||
413 | { | 413 | { |
414 | int dd_growth; | 414 | int dd_growth; |
415 | 415 | ||
416 | dd_growth = req->dirtied_page ? c->page_budget : 0; | 416 | dd_growth = req->dirtied_page ? c->bi.page_budget : 0; |
417 | 417 | ||
418 | if (req->dirtied_ino) | 418 | if (req->dirtied_ino) |
419 | dd_growth += c->inode_budget << (req->dirtied_ino - 1); | 419 | dd_growth += c->bi.inode_budget << (req->dirtied_ino - 1); |
420 | if (req->mod_dent) | 420 | if (req->mod_dent) |
421 | dd_growth += c->dent_budget; | 421 | dd_growth += c->bi.dent_budget; |
422 | dd_growth += req->dirtied_ino_d; | 422 | dd_growth += req->dirtied_ino_d; |
423 | return dd_growth; | 423 | return dd_growth; |
424 | } | 424 | } |
@@ -460,19 +460,19 @@ int ubifs_budget_space(struct ubifs_info *c, struct ubifs_budget_req *req) | |||
460 | 460 | ||
461 | again: | 461 | again: |
462 | spin_lock(&c->space_lock); | 462 | spin_lock(&c->space_lock); |
463 | ubifs_assert(c->budg_idx_growth >= 0); | 463 | ubifs_assert(c->bi.idx_growth >= 0); |
464 | ubifs_assert(c->budg_data_growth >= 0); | 464 | ubifs_assert(c->bi.data_growth >= 0); |
465 | ubifs_assert(c->budg_dd_growth >= 0); | 465 | ubifs_assert(c->bi.dd_growth >= 0); |
466 | 466 | ||
467 | if (unlikely(c->nospace) && (c->nospace_rp || !can_use_rp(c))) { | 467 | if (unlikely(c->bi.nospace) && (c->bi.nospace_rp || !can_use_rp(c))) { |
468 | dbg_budg("no space"); | 468 | dbg_budg("no space"); |
469 | spin_unlock(&c->space_lock); | 469 | spin_unlock(&c->space_lock); |
470 | return -ENOSPC; | 470 | return -ENOSPC; |
471 | } | 471 | } |
472 | 472 | ||
473 | c->budg_idx_growth += idx_growth; | 473 | c->bi.idx_growth += idx_growth; |
474 | c->budg_data_growth += data_growth; | 474 | c->bi.data_growth += data_growth; |
475 | c->budg_dd_growth += dd_growth; | 475 | c->bi.dd_growth += dd_growth; |
476 | 476 | ||
477 | err = do_budget_space(c); | 477 | err = do_budget_space(c); |
478 | if (likely(!err)) { | 478 | if (likely(!err)) { |
@@ -484,9 +484,9 @@ again: | |||
484 | } | 484 | } |
485 | 485 | ||
486 | /* Restore the old values */ | 486 | /* Restore the old values */ |
487 | c->budg_idx_growth -= idx_growth; | 487 | c->bi.idx_growth -= idx_growth; |
488 | c->budg_data_growth -= data_growth; | 488 | c->bi.data_growth -= data_growth; |
489 | c->budg_dd_growth -= dd_growth; | 489 | c->bi.dd_growth -= dd_growth; |
490 | spin_unlock(&c->space_lock); | 490 | spin_unlock(&c->space_lock); |
491 | 491 | ||
492 | if (req->fast) { | 492 | if (req->fast) { |
@@ -506,9 +506,9 @@ again: | |||
506 | goto again; | 506 | goto again; |
507 | } | 507 | } |
508 | dbg_budg("FS is full, -ENOSPC"); | 508 | dbg_budg("FS is full, -ENOSPC"); |
509 | c->nospace = 1; | 509 | c->bi.nospace = 1; |
510 | if (can_use_rp(c) || c->rp_size == 0) | 510 | if (can_use_rp(c) || c->rp_size == 0) |
511 | c->nospace_rp = 1; | 511 | c->bi.nospace_rp = 1; |
512 | smp_wmb(); | 512 | smp_wmb(); |
513 | } else | 513 | } else |
514 | ubifs_err("cannot budget space, error %d", err); | 514 | ubifs_err("cannot budget space, error %d", err); |
@@ -523,8 +523,8 @@ again: | |||
523 | * This function releases the space budgeted by 'ubifs_budget_space()'. Note, | 523 | * This function releases the space budgeted by 'ubifs_budget_space()'. Note, |
524 | * since the index changes (which were budgeted for in @req->idx_growth) will | 524 | * since the index changes (which were budgeted for in @req->idx_growth) will |
525 | * only be written to the media on commit, this function moves the index budget | 525 | * only be written to the media on commit, this function moves the index budget |
526 | * from @c->budg_idx_growth to @c->budg_uncommitted_idx. The latter will be | 526 | * from @c->bi.idx_growth to @c->bi.uncommitted_idx. The latter will be zeroed |
527 | * zeroed by the commit operation. | 527 | * by the commit operation. |
528 | */ | 528 | */ |
529 | void ubifs_release_budget(struct ubifs_info *c, struct ubifs_budget_req *req) | 529 | void ubifs_release_budget(struct ubifs_info *c, struct ubifs_budget_req *req) |
530 | { | 530 | { |
@@ -553,23 +553,23 @@ void ubifs_release_budget(struct ubifs_info *c, struct ubifs_budget_req *req) | |||
553 | if (!req->data_growth && !req->dd_growth) | 553 | if (!req->data_growth && !req->dd_growth) |
554 | return; | 554 | return; |
555 | 555 | ||
556 | c->nospace = c->nospace_rp = 0; | 556 | c->bi.nospace = c->bi.nospace_rp = 0; |
557 | smp_wmb(); | 557 | smp_wmb(); |
558 | 558 | ||
559 | spin_lock(&c->space_lock); | 559 | spin_lock(&c->space_lock); |
560 | c->budg_idx_growth -= req->idx_growth; | 560 | c->bi.idx_growth -= req->idx_growth; |
561 | c->budg_uncommitted_idx += req->idx_growth; | 561 | c->bi.uncommitted_idx += req->idx_growth; |
562 | c->budg_data_growth -= req->data_growth; | 562 | c->bi.data_growth -= req->data_growth; |
563 | c->budg_dd_growth -= req->dd_growth; | 563 | c->bi.dd_growth -= req->dd_growth; |
564 | c->min_idx_lebs = ubifs_calc_min_idx_lebs(c); | 564 | c->bi.min_idx_lebs = ubifs_calc_min_idx_lebs(c); |
565 | 565 | ||
566 | ubifs_assert(c->budg_idx_growth >= 0); | 566 | ubifs_assert(c->bi.idx_growth >= 0); |
567 | ubifs_assert(c->budg_data_growth >= 0); | 567 | ubifs_assert(c->bi.data_growth >= 0); |
568 | ubifs_assert(c->budg_dd_growth >= 0); | 568 | ubifs_assert(c->bi.dd_growth >= 0); |
569 | ubifs_assert(c->min_idx_lebs < c->main_lebs); | 569 | ubifs_assert(c->bi.min_idx_lebs < c->main_lebs); |
570 | ubifs_assert(!(c->budg_idx_growth & 7)); | 570 | ubifs_assert(!(c->bi.idx_growth & 7)); |
571 | ubifs_assert(!(c->budg_data_growth & 7)); | 571 | ubifs_assert(!(c->bi.data_growth & 7)); |
572 | ubifs_assert(!(c->budg_dd_growth & 7)); | 572 | ubifs_assert(!(c->bi.dd_growth & 7)); |
573 | spin_unlock(&c->space_lock); | 573 | spin_unlock(&c->space_lock); |
574 | } | 574 | } |
575 | 575 | ||
@@ -586,13 +586,13 @@ void ubifs_convert_page_budget(struct ubifs_info *c) | |||
586 | { | 586 | { |
587 | spin_lock(&c->space_lock); | 587 | spin_lock(&c->space_lock); |
588 | /* Release the index growth reservation */ | 588 | /* Release the index growth reservation */ |
589 | c->budg_idx_growth -= c->max_idx_node_sz << UBIFS_BLOCKS_PER_PAGE_SHIFT; | 589 | c->bi.idx_growth -= c->max_idx_node_sz << UBIFS_BLOCKS_PER_PAGE_SHIFT; |
590 | /* Release the data growth reservation */ | 590 | /* Release the data growth reservation */ |
591 | c->budg_data_growth -= c->page_budget; | 591 | c->bi.data_growth -= c->bi.page_budget; |
592 | /* Increase the dirty data growth reservation instead */ | 592 | /* Increase the dirty data growth reservation instead */ |
593 | c->budg_dd_growth += c->page_budget; | 593 | c->bi.dd_growth += c->bi.page_budget; |
594 | /* And re-calculate the indexing space reservation */ | 594 | /* And re-calculate the indexing space reservation */ |
595 | c->min_idx_lebs = ubifs_calc_min_idx_lebs(c); | 595 | c->bi.min_idx_lebs = ubifs_calc_min_idx_lebs(c); |
596 | spin_unlock(&c->space_lock); | 596 | spin_unlock(&c->space_lock); |
597 | } | 597 | } |
598 | 598 | ||
@@ -612,7 +612,7 @@ void ubifs_release_dirty_inode_budget(struct ubifs_info *c, | |||
612 | 612 | ||
613 | memset(&req, 0, sizeof(struct ubifs_budget_req)); | 613 | memset(&req, 0, sizeof(struct ubifs_budget_req)); |
614 | /* The "no space" flags will be cleared because dd_growth is > 0 */ | 614 | /* The "no space" flags will be cleared because dd_growth is > 0 */ |
615 | req.dd_growth = c->inode_budget + ALIGN(ui->data_len, 8); | 615 | req.dd_growth = c->bi.inode_budget + ALIGN(ui->data_len, 8); |
616 | ubifs_release_budget(c, &req); | 616 | ubifs_release_budget(c, &req); |
617 | } | 617 | } |
618 | 618 | ||
@@ -682,9 +682,9 @@ long long ubifs_get_free_space_nolock(struct ubifs_info *c) | |||
682 | int rsvd_idx_lebs, lebs; | 682 | int rsvd_idx_lebs, lebs; |
683 | long long available, outstanding, free; | 683 | long long available, outstanding, free; |
684 | 684 | ||
685 | ubifs_assert(c->min_idx_lebs == ubifs_calc_min_idx_lebs(c)); | 685 | ubifs_assert(c->bi.min_idx_lebs == ubifs_calc_min_idx_lebs(c)); |
686 | outstanding = c->budg_data_growth + c->budg_dd_growth; | 686 | outstanding = c->bi.data_growth + c->bi.dd_growth; |
687 | available = ubifs_calc_available(c, c->min_idx_lebs); | 687 | available = ubifs_calc_available(c, c->bi.min_idx_lebs); |
688 | 688 | ||
689 | /* | 689 | /* |
690 | * When reporting free space to user-space, UBIFS guarantees that it is | 690 | * When reporting free space to user-space, UBIFS guarantees that it is |
@@ -697,8 +697,8 @@ long long ubifs_get_free_space_nolock(struct ubifs_info *c) | |||
697 | * Note, the calculations below are similar to what we have in | 697 | * Note, the calculations below are similar to what we have in |
698 | * 'do_budget_space()', so refer there for comments. | 698 | * 'do_budget_space()', so refer there for comments. |
699 | */ | 699 | */ |
700 | if (c->min_idx_lebs > c->lst.idx_lebs) | 700 | if (c->bi.min_idx_lebs > c->lst.idx_lebs) |
701 | rsvd_idx_lebs = c->min_idx_lebs - c->lst.idx_lebs; | 701 | rsvd_idx_lebs = c->bi.min_idx_lebs - c->lst.idx_lebs; |
702 | else | 702 | else |
703 | rsvd_idx_lebs = 0; | 703 | rsvd_idx_lebs = 0; |
704 | lebs = c->lst.empty_lebs + c->freeable_cnt + c->idx_gc_cnt - | 704 | lebs = c->lst.empty_lebs + c->freeable_cnt + c->idx_gc_cnt - |
diff --git a/fs/ubifs/commit.c b/fs/ubifs/commit.c index 1bd01ded7123..87cd0ead8633 100644 --- a/fs/ubifs/commit.c +++ b/fs/ubifs/commit.c | |||
@@ -182,7 +182,7 @@ static int do_commit(struct ubifs_info *c) | |||
182 | c->mst_node->root_len = cpu_to_le32(zroot.len); | 182 | c->mst_node->root_len = cpu_to_le32(zroot.len); |
183 | c->mst_node->ihead_lnum = cpu_to_le32(c->ihead_lnum); | 183 | c->mst_node->ihead_lnum = cpu_to_le32(c->ihead_lnum); |
184 | c->mst_node->ihead_offs = cpu_to_le32(c->ihead_offs); | 184 | c->mst_node->ihead_offs = cpu_to_le32(c->ihead_offs); |
185 | c->mst_node->index_size = cpu_to_le64(c->old_idx_sz); | 185 | c->mst_node->index_size = cpu_to_le64(c->bi.old_idx_sz); |
186 | c->mst_node->lpt_lnum = cpu_to_le32(c->lpt_lnum); | 186 | c->mst_node->lpt_lnum = cpu_to_le32(c->lpt_lnum); |
187 | c->mst_node->lpt_offs = cpu_to_le32(c->lpt_offs); | 187 | c->mst_node->lpt_offs = cpu_to_le32(c->lpt_offs); |
188 | c->mst_node->nhead_lnum = cpu_to_le32(c->nhead_lnum); | 188 | c->mst_node->nhead_lnum = cpu_to_le32(c->nhead_lnum); |
diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c index fa65b2931034..c58867cbd019 100644 --- a/fs/ubifs/debug.c +++ b/fs/ubifs/debug.c | |||
@@ -614,14 +614,14 @@ void dbg_dump_budg(struct ubifs_info *c) | |||
614 | spin_lock(&dbg_lock); | 614 | spin_lock(&dbg_lock); |
615 | printk(KERN_DEBUG "(pid %d) Budgeting info: budg_data_growth %lld, " | 615 | printk(KERN_DEBUG "(pid %d) Budgeting info: budg_data_growth %lld, " |
616 | "budg_dd_growth %lld, budg_idx_growth %lld\n", current->pid, | 616 | "budg_dd_growth %lld, budg_idx_growth %lld\n", current->pid, |
617 | c->budg_data_growth, c->budg_dd_growth, c->budg_idx_growth); | 617 | c->bi.data_growth, c->bi.dd_growth, c->bi.idx_growth); |
618 | printk(KERN_DEBUG "\tdata budget sum %lld, total budget sum %lld, " | 618 | printk(KERN_DEBUG "\tdata budget sum %lld, total budget sum %lld, " |
619 | "freeable_cnt %d\n", c->budg_data_growth + c->budg_dd_growth, | 619 | "freeable_cnt %d\n", c->bi.data_growth + c->bi.dd_growth, |
620 | c->budg_data_growth + c->budg_dd_growth + c->budg_idx_growth, | 620 | c->bi.data_growth + c->bi.dd_growth + c->bi.idx_growth, |
621 | c->freeable_cnt); | 621 | c->freeable_cnt); |
622 | printk(KERN_DEBUG "\tmin_idx_lebs %d, old_idx_sz %lld, " | 622 | printk(KERN_DEBUG "\tmin_idx_lebs %d, old_idx_sz %lld, " |
623 | "calc_idx_sz %lld, idx_gc_cnt %d\n", c->min_idx_lebs, | 623 | "calc_idx_sz %lld, idx_gc_cnt %d\n", c->bi.min_idx_lebs, |
624 | c->old_idx_sz, c->calc_idx_sz, c->idx_gc_cnt); | 624 | c->bi.old_idx_sz, c->calc_idx_sz, c->idx_gc_cnt); |
625 | printk(KERN_DEBUG "\tdirty_pg_cnt %ld, dirty_zn_cnt %ld, " | 625 | printk(KERN_DEBUG "\tdirty_pg_cnt %ld, dirty_zn_cnt %ld, " |
626 | "clean_zn_cnt %ld\n", atomic_long_read(&c->dirty_pg_cnt), | 626 | "clean_zn_cnt %ld\n", atomic_long_read(&c->dirty_pg_cnt), |
627 | atomic_long_read(&c->dirty_zn_cnt), | 627 | atomic_long_read(&c->dirty_zn_cnt), |
@@ -648,8 +648,8 @@ void dbg_dump_budg(struct ubifs_info *c) | |||
648 | printk(KERN_DEBUG "\tcommit state %d\n", c->cmt_state); | 648 | printk(KERN_DEBUG "\tcommit state %d\n", c->cmt_state); |
649 | 649 | ||
650 | /* Print budgeting predictions */ | 650 | /* Print budgeting predictions */ |
651 | available = ubifs_calc_available(c, c->min_idx_lebs); | 651 | available = ubifs_calc_available(c, c->bi.min_idx_lebs); |
652 | outstanding = c->budg_data_growth + c->budg_dd_growth; | 652 | outstanding = c->bi.data_growth + c->bi.dd_growth; |
653 | free = ubifs_get_free_space_nolock(c); | 653 | free = ubifs_get_free_space_nolock(c); |
654 | printk(KERN_DEBUG "Budgeting predictions:\n"); | 654 | printk(KERN_DEBUG "Budgeting predictions:\n"); |
655 | printk(KERN_DEBUG "\tavailable: %lld, outstanding %lld, free %lld\n", | 655 | printk(KERN_DEBUG "\tavailable: %lld, outstanding %lld, free %lld\n", |
diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c index 7217d67a80a6..ef5abd38f0bf 100644 --- a/fs/ubifs/dir.c +++ b/fs/ubifs/dir.c | |||
@@ -603,7 +603,7 @@ static int ubifs_unlink(struct inode *dir, struct dentry *dentry) | |||
603 | ubifs_release_budget(c, &req); | 603 | ubifs_release_budget(c, &req); |
604 | else { | 604 | else { |
605 | /* We've deleted something - clean the "no space" flags */ | 605 | /* We've deleted something - clean the "no space" flags */ |
606 | c->nospace = c->nospace_rp = 0; | 606 | c->bi.nospace = c->bi.nospace_rp = 0; |
607 | smp_wmb(); | 607 | smp_wmb(); |
608 | } | 608 | } |
609 | return 0; | 609 | return 0; |
@@ -693,7 +693,7 @@ static int ubifs_rmdir(struct inode *dir, struct dentry *dentry) | |||
693 | ubifs_release_budget(c, &req); | 693 | ubifs_release_budget(c, &req); |
694 | else { | 694 | else { |
695 | /* We've deleted something - clean the "no space" flags */ | 695 | /* We've deleted something - clean the "no space" flags */ |
696 | c->nospace = c->nospace_rp = 0; | 696 | c->bi.nospace = c->bi.nospace_rp = 0; |
697 | smp_wmb(); | 697 | smp_wmb(); |
698 | } | 698 | } |
699 | return 0; | 699 | return 0; |
diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c index 3f254e37b25b..3594aae12a88 100644 --- a/fs/ubifs/file.c +++ b/fs/ubifs/file.c | |||
@@ -212,7 +212,7 @@ static void release_new_page_budget(struct ubifs_info *c) | |||
212 | */ | 212 | */ |
213 | static void release_existing_page_budget(struct ubifs_info *c) | 213 | static void release_existing_page_budget(struct ubifs_info *c) |
214 | { | 214 | { |
215 | struct ubifs_budget_req req = { .dd_growth = c->page_budget}; | 215 | struct ubifs_budget_req req = { .dd_growth = c->bi.page_budget}; |
216 | 216 | ||
217 | ubifs_release_budget(c, &req); | 217 | ubifs_release_budget(c, &req); |
218 | } | 218 | } |
@@ -1189,7 +1189,7 @@ out_budg: | |||
1189 | if (budgeted) | 1189 | if (budgeted) |
1190 | ubifs_release_budget(c, &req); | 1190 | ubifs_release_budget(c, &req); |
1191 | else { | 1191 | else { |
1192 | c->nospace = c->nospace_rp = 0; | 1192 | c->bi.nospace = c->bi.nospace_rp = 0; |
1193 | smp_wmb(); | 1193 | smp_wmb(); |
1194 | } | 1194 | } |
1195 | return err; | 1195 | return err; |
diff --git a/fs/ubifs/find.c b/fs/ubifs/find.c index 1d54383d1269..2559d174e004 100644 --- a/fs/ubifs/find.c +++ b/fs/ubifs/find.c | |||
@@ -252,8 +252,8 @@ int ubifs_find_dirty_leb(struct ubifs_info *c, struct ubifs_lprops *ret_lp, | |||
252 | * But if the index takes fewer LEBs than it is reserved for it, | 252 | * But if the index takes fewer LEBs than it is reserved for it, |
253 | * this function must avoid picking those reserved LEBs. | 253 | * this function must avoid picking those reserved LEBs. |
254 | */ | 254 | */ |
255 | if (c->min_idx_lebs >= c->lst.idx_lebs) { | 255 | if (c->bi.min_idx_lebs >= c->lst.idx_lebs) { |
256 | rsvd_idx_lebs = c->min_idx_lebs - c->lst.idx_lebs; | 256 | rsvd_idx_lebs = c->bi.min_idx_lebs - c->lst.idx_lebs; |
257 | exclude_index = 1; | 257 | exclude_index = 1; |
258 | } | 258 | } |
259 | spin_unlock(&c->space_lock); | 259 | spin_unlock(&c->space_lock); |
@@ -276,7 +276,7 @@ int ubifs_find_dirty_leb(struct ubifs_info *c, struct ubifs_lprops *ret_lp, | |||
276 | pick_free = 0; | 276 | pick_free = 0; |
277 | } else { | 277 | } else { |
278 | spin_lock(&c->space_lock); | 278 | spin_lock(&c->space_lock); |
279 | exclude_index = (c->min_idx_lebs >= c->lst.idx_lebs); | 279 | exclude_index = (c->bi.min_idx_lebs >= c->lst.idx_lebs); |
280 | spin_unlock(&c->space_lock); | 280 | spin_unlock(&c->space_lock); |
281 | } | 281 | } |
282 | 282 | ||
@@ -501,8 +501,8 @@ int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *offs, | |||
501 | 501 | ||
502 | /* Check if there are enough empty LEBs for commit */ | 502 | /* Check if there are enough empty LEBs for commit */ |
503 | spin_lock(&c->space_lock); | 503 | spin_lock(&c->space_lock); |
504 | if (c->min_idx_lebs > c->lst.idx_lebs) | 504 | if (c->bi.min_idx_lebs > c->lst.idx_lebs) |
505 | rsvd_idx_lebs = c->min_idx_lebs - c->lst.idx_lebs; | 505 | rsvd_idx_lebs = c->bi.min_idx_lebs - c->lst.idx_lebs; |
506 | else | 506 | else |
507 | rsvd_idx_lebs = 0; | 507 | rsvd_idx_lebs = 0; |
508 | lebs = c->lst.empty_lebs + c->freeable_cnt + c->idx_gc_cnt - | 508 | lebs = c->lst.empty_lebs + c->freeable_cnt + c->idx_gc_cnt - |
diff --git a/fs/ubifs/master.c b/fs/ubifs/master.c index 21f47afdacff..278c2382e8c2 100644 --- a/fs/ubifs/master.c +++ b/fs/ubifs/master.c | |||
@@ -148,7 +148,7 @@ static int validate_master(const struct ubifs_info *c) | |||
148 | } | 148 | } |
149 | 149 | ||
150 | main_sz = (long long)c->main_lebs * c->leb_size; | 150 | main_sz = (long long)c->main_lebs * c->leb_size; |
151 | if (c->old_idx_sz & 7 || c->old_idx_sz >= main_sz) { | 151 | if (c->bi.old_idx_sz & 7 || c->bi.old_idx_sz >= main_sz) { |
152 | err = 9; | 152 | err = 9; |
153 | goto out; | 153 | goto out; |
154 | } | 154 | } |
@@ -218,7 +218,7 @@ static int validate_master(const struct ubifs_info *c) | |||
218 | } | 218 | } |
219 | 219 | ||
220 | if (c->lst.total_dead + c->lst.total_dark + | 220 | if (c->lst.total_dead + c->lst.total_dark + |
221 | c->lst.total_used + c->old_idx_sz > main_sz) { | 221 | c->lst.total_used + c->bi.old_idx_sz > main_sz) { |
222 | err = 21; | 222 | err = 21; |
223 | goto out; | 223 | goto out; |
224 | } | 224 | } |
@@ -286,7 +286,7 @@ int ubifs_read_master(struct ubifs_info *c) | |||
286 | c->gc_lnum = le32_to_cpu(c->mst_node->gc_lnum); | 286 | c->gc_lnum = le32_to_cpu(c->mst_node->gc_lnum); |
287 | c->ihead_lnum = le32_to_cpu(c->mst_node->ihead_lnum); | 287 | c->ihead_lnum = le32_to_cpu(c->mst_node->ihead_lnum); |
288 | c->ihead_offs = le32_to_cpu(c->mst_node->ihead_offs); | 288 | c->ihead_offs = le32_to_cpu(c->mst_node->ihead_offs); |
289 | c->old_idx_sz = le64_to_cpu(c->mst_node->index_size); | 289 | c->bi.old_idx_sz = le64_to_cpu(c->mst_node->index_size); |
290 | c->lpt_lnum = le32_to_cpu(c->mst_node->lpt_lnum); | 290 | c->lpt_lnum = le32_to_cpu(c->mst_node->lpt_lnum); |
291 | c->lpt_offs = le32_to_cpu(c->mst_node->lpt_offs); | 291 | c->lpt_offs = le32_to_cpu(c->mst_node->lpt_offs); |
292 | c->nhead_lnum = le32_to_cpu(c->mst_node->nhead_lnum); | 292 | c->nhead_lnum = le32_to_cpu(c->mst_node->nhead_lnum); |
@@ -305,7 +305,7 @@ int ubifs_read_master(struct ubifs_info *c) | |||
305 | c->lst.total_dead = le64_to_cpu(c->mst_node->total_dead); | 305 | c->lst.total_dead = le64_to_cpu(c->mst_node->total_dead); |
306 | c->lst.total_dark = le64_to_cpu(c->mst_node->total_dark); | 306 | c->lst.total_dark = le64_to_cpu(c->mst_node->total_dark); |
307 | 307 | ||
308 | c->calc_idx_sz = c->old_idx_sz; | 308 | c->calc_idx_sz = c->bi.old_idx_sz; |
309 | 309 | ||
310 | if (c->mst_node->flags & cpu_to_le32(UBIFS_MST_NO_ORPHS)) | 310 | if (c->mst_node->flags & cpu_to_le32(UBIFS_MST_NO_ORPHS)) |
311 | c->no_orphs = 1; | 311 | c->no_orphs = 1; |
diff --git a/fs/ubifs/replay.c b/fs/ubifs/replay.c index d3d6d365bfc1..c29c4687cc52 100644 --- a/fs/ubifs/replay.c +++ b/fs/ubifs/replay.c | |||
@@ -1065,13 +1065,13 @@ int ubifs_replay_journal(struct ubifs_info *c) | |||
1065 | goto out; | 1065 | goto out; |
1066 | 1066 | ||
1067 | /* | 1067 | /* |
1068 | * UBIFS budgeting calculations use @c->budg_uncommitted_idx variable | 1068 | * UBIFS budgeting calculations use @c->bi.uncommitted_idx variable |
1069 | * to roughly estimate index growth. Things like @c->min_idx_lebs | 1069 | * to roughly estimate index growth. Things like @c->bi.min_idx_lebs |
1070 | * depend on it. This means we have to initialize it to make sure | 1070 | * depend on it. This means we have to initialize it to make sure |
1071 | * budgeting works properly. | 1071 | * budgeting works properly. |
1072 | */ | 1072 | */ |
1073 | c->budg_uncommitted_idx = atomic_long_read(&c->dirty_zn_cnt); | 1073 | c->bi.uncommitted_idx = atomic_long_read(&c->dirty_zn_cnt); |
1074 | c->budg_uncommitted_idx *= c->max_idx_node_sz; | 1074 | c->bi.uncommitted_idx *= c->max_idx_node_sz; |
1075 | 1075 | ||
1076 | ubifs_assert(c->bud_bytes <= c->max_bud_bytes || c->need_recovery); | 1076 | ubifs_assert(c->bud_bytes <= c->max_bud_bytes || c->need_recovery); |
1077 | dbg_mnt("finished, log head LEB %d:%d, max_sqnum %llu, " | 1077 | dbg_mnt("finished, log head LEB %d:%d, max_sqnum %llu, " |
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index a089cca63436..a0aa95117ea1 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c | |||
@@ -375,7 +375,7 @@ out: | |||
375 | ubifs_release_dirty_inode_budget(c, ui); | 375 | ubifs_release_dirty_inode_budget(c, ui); |
376 | else { | 376 | else { |
377 | /* We've deleted something - clean the "no space" flags */ | 377 | /* We've deleted something - clean the "no space" flags */ |
378 | c->nospace = c->nospace_rp = 0; | 378 | c->bi.nospace = c->bi.nospace_rp = 0; |
379 | smp_wmb(); | 379 | smp_wmb(); |
380 | } | 380 | } |
381 | done: | 381 | done: |
@@ -694,11 +694,11 @@ static int init_constants_sb(struct ubifs_info *c) | |||
694 | * be compressed and direntries are of the maximum size. | 694 | * be compressed and direntries are of the maximum size. |
695 | * | 695 | * |
696 | * Note, data, which may be stored in inodes is budgeted separately, so | 696 | * Note, data, which may be stored in inodes is budgeted separately, so |
697 | * it is not included into 'c->inode_budget'. | 697 | * it is not included into 'c->bi.inode_budget'. |
698 | */ | 698 | */ |
699 | c->page_budget = UBIFS_MAX_DATA_NODE_SZ * UBIFS_BLOCKS_PER_PAGE; | 699 | c->bi.page_budget = UBIFS_MAX_DATA_NODE_SZ * UBIFS_BLOCKS_PER_PAGE; |
700 | c->inode_budget = UBIFS_INO_NODE_SZ; | 700 | c->bi.inode_budget = UBIFS_INO_NODE_SZ; |
701 | c->dent_budget = UBIFS_MAX_DENT_NODE_SZ; | 701 | c->bi.dent_budget = UBIFS_MAX_DENT_NODE_SZ; |
702 | 702 | ||
703 | /* | 703 | /* |
704 | * When the amount of flash space used by buds becomes | 704 | * When the amount of flash space used by buds becomes |
@@ -742,7 +742,7 @@ static void init_constants_master(struct ubifs_info *c) | |||
742 | { | 742 | { |
743 | long long tmp64; | 743 | long long tmp64; |
744 | 744 | ||
745 | c->min_idx_lebs = ubifs_calc_min_idx_lebs(c); | 745 | c->bi.min_idx_lebs = ubifs_calc_min_idx_lebs(c); |
746 | c->report_rp_size = ubifs_reported_space(c, c->rp_size); | 746 | c->report_rp_size = ubifs_reported_space(c, c->rp_size); |
747 | 747 | ||
748 | /* | 748 | /* |
@@ -1304,7 +1304,7 @@ static int mount_ubifs(struct ubifs_info *c) | |||
1304 | if (err) | 1304 | if (err) |
1305 | goto out_lpt; | 1305 | goto out_lpt; |
1306 | 1306 | ||
1307 | err = dbg_check_idx_size(c, c->old_idx_sz); | 1307 | err = dbg_check_idx_size(c, c->bi.old_idx_sz); |
1308 | if (err) | 1308 | if (err) |
1309 | goto out_lpt; | 1309 | goto out_lpt; |
1310 | 1310 | ||
@@ -1313,7 +1313,7 @@ static int mount_ubifs(struct ubifs_info *c) | |||
1313 | goto out_journal; | 1313 | goto out_journal; |
1314 | 1314 | ||
1315 | /* Calculate 'min_idx_lebs' after journal replay */ | 1315 | /* Calculate 'min_idx_lebs' after journal replay */ |
1316 | c->min_idx_lebs = ubifs_calc_min_idx_lebs(c); | 1316 | c->bi.min_idx_lebs = ubifs_calc_min_idx_lebs(c); |
1317 | 1317 | ||
1318 | err = ubifs_mount_orphans(c, c->need_recovery, c->ro_mount); | 1318 | err = ubifs_mount_orphans(c, c->need_recovery, c->ro_mount); |
1319 | if (err) | 1319 | if (err) |
@@ -1442,7 +1442,8 @@ static int mount_ubifs(struct ubifs_info *c) | |||
1442 | c->main_lebs, c->main_first, c->leb_cnt - 1); | 1442 | c->main_lebs, c->main_first, c->leb_cnt - 1); |
1443 | dbg_msg("index LEBs: %d", c->lst.idx_lebs); | 1443 | dbg_msg("index LEBs: %d", c->lst.idx_lebs); |
1444 | dbg_msg("total index bytes: %lld (%lld KiB, %lld MiB)", | 1444 | dbg_msg("total index bytes: %lld (%lld KiB, %lld MiB)", |
1445 | c->old_idx_sz, c->old_idx_sz >> 10, c->old_idx_sz >> 20); | 1445 | c->bi.old_idx_sz, c->bi.old_idx_sz >> 10, |
1446 | c->bi.old_idx_sz >> 20); | ||
1446 | dbg_msg("key hash type: %d", c->key_hash_type); | 1447 | dbg_msg("key hash type: %d", c->key_hash_type); |
1447 | dbg_msg("tree fanout: %d", c->fanout); | 1448 | dbg_msg("tree fanout: %d", c->fanout); |
1448 | dbg_msg("reserved GC LEB: %d", c->gc_lnum); | 1449 | dbg_msg("reserved GC LEB: %d", c->gc_lnum); |
@@ -1766,10 +1767,9 @@ static void ubifs_put_super(struct super_block *sb) | |||
1766 | * to write them back because of I/O errors. | 1767 | * to write them back because of I/O errors. |
1767 | */ | 1768 | */ |
1768 | if (!c->ro_error) { | 1769 | if (!c->ro_error) { |
1769 | ubifs_assert(atomic_long_read(&c->dirty_pg_cnt) == 0); | 1770 | ubifs_assert(c->bi.idx_growth == 0); |
1770 | ubifs_assert(c->budg_idx_growth == 0); | 1771 | ubifs_assert(c->bi.dd_growth == 0); |
1771 | ubifs_assert(c->budg_dd_growth == 0); | 1772 | ubifs_assert(c->bi.data_growth == 0); |
1772 | ubifs_assert(c->budg_data_growth == 0); | ||
1773 | } | 1773 | } |
1774 | 1774 | ||
1775 | /* | 1775 | /* |
diff --git a/fs/ubifs/tnc_commit.c b/fs/ubifs/tnc_commit.c index 53288e5d604e..9c376b9e74ff 100644 --- a/fs/ubifs/tnc_commit.c +++ b/fs/ubifs/tnc_commit.c | |||
@@ -796,16 +796,16 @@ int ubifs_tnc_start_commit(struct ubifs_info *c, struct ubifs_zbranch *zroot) | |||
796 | spin_lock(&c->space_lock); | 796 | spin_lock(&c->space_lock); |
797 | /* | 797 | /* |
798 | * Although we have not finished committing yet, update size of the | 798 | * Although we have not finished committing yet, update size of the |
799 | * committed index ('c->old_idx_sz') and zero out the index growth | 799 | * committed index ('c->bi.old_idx_sz') and zero out the index growth |
800 | * budget. It is OK to do this now, because we've reserved all the | 800 | * budget. It is OK to do this now, because we've reserved all the |
801 | * space which is needed to commit the index, and it is save for the | 801 | * space which is needed to commit the index, and it is save for the |
802 | * budgeting subsystem to assume the index is already committed, | 802 | * budgeting subsystem to assume the index is already committed, |
803 | * even though it is not. | 803 | * even though it is not. |
804 | */ | 804 | */ |
805 | ubifs_assert(c->min_idx_lebs == ubifs_calc_min_idx_lebs(c)); | 805 | ubifs_assert(c->bi.min_idx_lebs == ubifs_calc_min_idx_lebs(c)); |
806 | c->old_idx_sz = c->calc_idx_sz; | 806 | c->bi.old_idx_sz = c->calc_idx_sz; |
807 | c->budg_uncommitted_idx = 0; | 807 | c->bi.uncommitted_idx = 0; |
808 | c->min_idx_lebs = ubifs_calc_min_idx_lebs(c); | 808 | c->bi.min_idx_lebs = ubifs_calc_min_idx_lebs(c); |
809 | spin_unlock(&c->space_lock); | 809 | spin_unlock(&c->space_lock); |
810 | mutex_unlock(&c->tnc_mutex); | 810 | mutex_unlock(&c->tnc_mutex); |
811 | 811 | ||
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h index d4c07a9b8211..26a7ebe56d2e 100644 --- a/fs/ubifs/ubifs.h +++ b/fs/ubifs/ubifs.h | |||
@@ -937,6 +937,40 @@ struct ubifs_mount_opts { | |||
937 | unsigned int compr_type:2; | 937 | unsigned int compr_type:2; |
938 | }; | 938 | }; |
939 | 939 | ||
940 | /** | ||
941 | * struct ubifs_budg_info - UBIFS budgeting information. | ||
942 | * @idx_growth: amount of bytes budgeted for index growth | ||
943 | * @data_growth: amount of bytes budgeted for cached data | ||
944 | * @dd_growth: amount of bytes budgeted for cached data that will make | ||
945 | * other data dirty | ||
946 | * @uncommitted_idx: amount of bytes were budgeted for growth of the index, but | ||
947 | * which still have to be taken into account because the index | ||
948 | * has not been committed so far | ||
949 | * @old_idx_sz: size of index on flash | ||
950 | * @min_idx_lebs: minimum number of LEBs required for the index | ||
951 | * @nospace: non-zero if the file-system does not have flash space (used as | ||
952 | * optimization) | ||
953 | * @nospace_rp: the same as @nospace, but additionally means that even reserved | ||
954 | * pool is full | ||
955 | * @page_budget: budget for a page (constant, nenver changed after mount) | ||
956 | * @inode_budget: budget for an inode (constant, nenver changed after mount) | ||
957 | * @dent_budget: budget for a directory entry (constant, nenver changed after | ||
958 | * mount) | ||
959 | */ | ||
960 | struct ubifs_budg_info { | ||
961 | long long idx_growth; | ||
962 | long long data_growth; | ||
963 | long long dd_growth; | ||
964 | long long uncommitted_idx; | ||
965 | unsigned long long old_idx_sz; | ||
966 | int min_idx_lebs; | ||
967 | unsigned int nospace:1; | ||
968 | unsigned int nospace_rp:1; | ||
969 | int page_budget; | ||
970 | int inode_budget; | ||
971 | int dent_budget; | ||
972 | }; | ||
973 | |||
940 | struct ubifs_debug_info; | 974 | struct ubifs_debug_info; |
941 | 975 | ||
942 | /** | 976 | /** |
@@ -1057,32 +1091,14 @@ struct ubifs_debug_info; | |||
1057 | * @dirty_zn_cnt: number of dirty znodes | 1091 | * @dirty_zn_cnt: number of dirty znodes |
1058 | * @clean_zn_cnt: number of clean znodes | 1092 | * @clean_zn_cnt: number of clean znodes |
1059 | * | 1093 | * |
1060 | * @budg_idx_growth: amount of bytes budgeted for index growth | 1094 | * @space_lock: protects @bi and @lst |
1061 | * @budg_data_growth: amount of bytes budgeted for cached data | 1095 | * @lst: lprops statistics |
1062 | * @budg_dd_growth: amount of bytes budgeted for cached data that will make | 1096 | * @bi: budgeting information |
1063 | * other data dirty | ||
1064 | * @budg_uncommitted_idx: amount of bytes were budgeted for growth of the index, | ||
1065 | * but which still have to be taken into account because | ||
1066 | * the index has not been committed so far | ||
1067 | * @space_lock: protects @budg_idx_growth, @budg_data_growth, @budg_dd_growth, | ||
1068 | * @budg_uncommited_idx, @min_idx_lebs, @old_idx_sz, @lst, | ||
1069 | * @nospace, and @nospace_rp; | ||
1070 | * @min_idx_lebs: minimum number of LEBs required for the index | ||
1071 | * @old_idx_sz: size of index on flash | ||
1072 | * @calc_idx_sz: temporary variable which is used to calculate new index size | 1097 | * @calc_idx_sz: temporary variable which is used to calculate new index size |
1073 | * (contains accurate new index size at end of TNC commit start) | 1098 | * (contains accurate new index size at end of TNC commit start) |
1074 | * @lst: lprops statistics | ||
1075 | * @nospace: non-zero if the file-system does not have flash space (used as | ||
1076 | * optimization) | ||
1077 | * @nospace_rp: the same as @nospace, but additionally means that even reserved | ||
1078 | * pool is full | ||
1079 | * | ||
1080 | * @page_budget: budget for a page | ||
1081 | * @inode_budget: budget for an inode | ||
1082 | * @dent_budget: budget for a directory entry | ||
1083 | * | 1099 | * |
1084 | * @ref_node_alsz: size of the LEB reference node aligned to the min. flash | 1100 | * @ref_node_alsz: size of the LEB reference node aligned to the min. flash |
1085 | * I/O unit | 1101 | * I/O unit |
1086 | * @mst_node_alsz: master node aligned size | 1102 | * @mst_node_alsz: master node aligned size |
1087 | * @min_idx_node_sz: minimum indexing node aligned on 8-bytes boundary | 1103 | * @min_idx_node_sz: minimum indexing node aligned on 8-bytes boundary |
1088 | * @max_idx_node_sz: maximum indexing node aligned on 8-bytes boundary | 1104 | * @max_idx_node_sz: maximum indexing node aligned on 8-bytes boundary |
@@ -1308,21 +1324,10 @@ struct ubifs_info { | |||
1308 | atomic_long_t dirty_zn_cnt; | 1324 | atomic_long_t dirty_zn_cnt; |
1309 | atomic_long_t clean_zn_cnt; | 1325 | atomic_long_t clean_zn_cnt; |
1310 | 1326 | ||
1311 | long long budg_idx_growth; | ||
1312 | long long budg_data_growth; | ||
1313 | long long budg_dd_growth; | ||
1314 | long long budg_uncommitted_idx; | ||
1315 | spinlock_t space_lock; | 1327 | spinlock_t space_lock; |
1316 | int min_idx_lebs; | ||
1317 | unsigned long long old_idx_sz; | ||
1318 | unsigned long long calc_idx_sz; | ||
1319 | struct ubifs_lp_stats lst; | 1328 | struct ubifs_lp_stats lst; |
1320 | unsigned int nospace:1; | 1329 | struct ubifs_budg_info bi; |
1321 | unsigned int nospace_rp:1; | 1330 | unsigned long long calc_idx_sz; |
1322 | |||
1323 | int page_budget; | ||
1324 | int inode_budget; | ||
1325 | int dent_budget; | ||
1326 | 1331 | ||
1327 | int ref_node_alsz; | 1332 | int ref_node_alsz; |
1328 | int mst_node_alsz; | 1333 | int mst_node_alsz; |