diff options
author | Mark Fasheh <mfasheh@suse.com> | 2010-03-17 00:01:00 -0400 |
---|---|---|
committer | Joel Becker <joel.becker@oracle.com> | 2010-05-05 21:17:31 -0400 |
commit | a57c8fd2ad238258cc983049008aea5f985804b2 (patch) | |
tree | 2d9142401ca7a03df6edaefcc3fd937f2f24fc8d | |
parent | 33d5d380d667ad264675cfdb297dfc3c5b6542cc (diff) |
ocfs2: remove ocfs2_local_alloc_in_range()
Inodes are always allocated from the global bitmap now so we don't need this
any more. Also, the existing implementation bounces reservations around
needlessly.
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
-rw-r--r-- | fs/ocfs2/localalloc.c | 51 | ||||
-rw-r--r-- | fs/ocfs2/suballoc.c | 6 |
2 files changed, 1 insertions, 56 deletions
diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c index 7fe8149a0002..880e4bc827be 100644 --- a/fs/ocfs2/localalloc.c +++ b/fs/ocfs2/localalloc.c | |||
@@ -479,46 +479,6 @@ out: | |||
479 | return status; | 479 | return status; |
480 | } | 480 | } |
481 | 481 | ||
482 | /* Check to see if the local alloc window is within ac->ac_max_block */ | ||
483 | static int ocfs2_local_alloc_in_range(struct inode *inode, | ||
484 | struct ocfs2_alloc_context *ac, | ||
485 | u32 bits_wanted) | ||
486 | { | ||
487 | struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); | ||
488 | struct ocfs2_dinode *alloc; | ||
489 | struct ocfs2_local_alloc *la; | ||
490 | int start; | ||
491 | u64 block_off; | ||
492 | |||
493 | if (!ac->ac_max_block) | ||
494 | return 1; | ||
495 | |||
496 | alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data; | ||
497 | la = OCFS2_LOCAL_ALLOC(alloc); | ||
498 | |||
499 | start = ocfs2_local_alloc_find_clear_bits(osb, alloc, &bits_wanted, NULL); | ||
500 | if (start == -1) { | ||
501 | mlog_errno(-ENOSPC); | ||
502 | return 0; | ||
503 | } | ||
504 | |||
505 | /* | ||
506 | * Converting (bm_off + start + bits_wanted) to blocks gives us | ||
507 | * the blkno just past our actual allocation. This is perfect | ||
508 | * to compare with ac_max_block. | ||
509 | */ | ||
510 | block_off = ocfs2_clusters_to_blocks(inode->i_sb, | ||
511 | le32_to_cpu(la->la_bm_off) + | ||
512 | start + bits_wanted); | ||
513 | mlog(0, "Checking %llu against %llu\n", | ||
514 | (unsigned long long)block_off, | ||
515 | (unsigned long long)ac->ac_max_block); | ||
516 | if (block_off > ac->ac_max_block) | ||
517 | return 0; | ||
518 | |||
519 | return 1; | ||
520 | } | ||
521 | |||
522 | /* | 482 | /* |
523 | * make sure we've got at least bits_wanted contiguous bits in the | 483 | * make sure we've got at least bits_wanted contiguous bits in the |
524 | * local alloc. You lose them when you drop i_mutex. | 484 | * local alloc. You lose them when you drop i_mutex. |
@@ -611,17 +571,6 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb, | |||
611 | mlog(0, "Calling in_range for max block %llu\n", | 571 | mlog(0, "Calling in_range for max block %llu\n", |
612 | (unsigned long long)ac->ac_max_block); | 572 | (unsigned long long)ac->ac_max_block); |
613 | 573 | ||
614 | if (!ocfs2_local_alloc_in_range(local_alloc_inode, ac, | ||
615 | bits_wanted)) { | ||
616 | /* | ||
617 | * The window is outside ac->ac_max_block. | ||
618 | * This errno tells the caller to keep localalloc enabled | ||
619 | * but to get the allocation from the main bitmap. | ||
620 | */ | ||
621 | status = -EFBIG; | ||
622 | goto bail; | ||
623 | } | ||
624 | |||
625 | ac->ac_inode = local_alloc_inode; | 574 | ac->ac_inode = local_alloc_inode; |
626 | /* We should never use localalloc from another slot */ | 575 | /* We should never use localalloc from another slot */ |
627 | ac->ac_alloc_slot = osb->slot_num; | 576 | ac->ac_alloc_slot = osb->slot_num; |
diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c index df95707c8b10..667d622b3659 100644 --- a/fs/ocfs2/suballoc.c +++ b/fs/ocfs2/suballoc.c | |||
@@ -941,11 +941,7 @@ static int ocfs2_reserve_clusters_with_limit(struct ocfs2_super *osb, | |||
941 | status = ocfs2_reserve_local_alloc_bits(osb, | 941 | status = ocfs2_reserve_local_alloc_bits(osb, |
942 | bits_wanted, | 942 | bits_wanted, |
943 | *ac); | 943 | *ac); |
944 | if (status == -EFBIG) { | 944 | if ((status < 0) && (status != -ENOSPC)) { |
945 | /* The local alloc window is outside ac_max_block. | ||
946 | * use the main bitmap. */ | ||
947 | status = -ENOSPC; | ||
948 | } else if ((status < 0) && (status != -ENOSPC)) { | ||
949 | mlog_errno(status); | 945 | mlog_errno(status); |
950 | goto bail; | 946 | goto bail; |
951 | } | 947 | } |