diff options
author | Dave Chinner <dchinner@redhat.com> | 2012-04-23 01:58:50 -0400 |
---|---|---|
committer | Ben Myers <bpm@sgi.com> | 2012-05-14 17:20:46 -0400 |
commit | de1cbee46269a3b707eb99b37f33afdd4cfaaea4 (patch) | |
tree | 9dcf9e5336c6be32f7f8f37a93b79159b2cff94f /fs/xfs/xfs_buf.c | |
parent | e70b73f84f474cc594a39bd8ff083974e6d69aea (diff) |
xfs: kill b_file_offset
Seeing as we pass block numbers around everywhere in the buffer
cache now, it makes no sense to index everything by byte offset.
Replace all the byte offset indexing with block number based
indexing, and replace all uses of the byte offset with direct
conversion from the block index.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Mark Tinguely <tinguely@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_buf.c')
-rw-r--r-- | fs/xfs/xfs_buf.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index d3a1974c91d..854b27a8e77 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c | |||
@@ -196,7 +196,7 @@ xfs_buf_alloc( | |||
196 | sema_init(&bp->b_sema, 0); /* held, no waiters */ | 196 | sema_init(&bp->b_sema, 0); /* held, no waiters */ |
197 | XB_SET_OWNER(bp); | 197 | XB_SET_OWNER(bp); |
198 | bp->b_target = target; | 198 | bp->b_target = target; |
199 | bp->b_file_offset = blkno << BBSHIFT; | 199 | |
200 | /* | 200 | /* |
201 | * Set buffer_length and count_desired to the same value initially. | 201 | * Set buffer_length and count_desired to the same value initially. |
202 | * I/O routines should use count_desired, which will be the same in | 202 | * I/O routines should use count_desired, which will be the same in |
@@ -337,8 +337,8 @@ xfs_buf_allocate_memory( | |||
337 | } | 337 | } |
338 | 338 | ||
339 | use_alloc_page: | 339 | use_alloc_page: |
340 | end = bp->b_file_offset + bp->b_buffer_length; | 340 | end = BBTOB(bp->b_bn) + bp->b_buffer_length; |
341 | page_count = xfs_buf_btoc(end) - xfs_buf_btoct(bp->b_file_offset); | 341 | page_count = xfs_buf_btoc(end) - xfs_buf_btoct(BBTOB(bp->b_bn)); |
342 | error = _xfs_buf_get_pages(bp, page_count, flags); | 342 | error = _xfs_buf_get_pages(bp, page_count, flags); |
343 | if (unlikely(error)) | 343 | if (unlikely(error)) |
344 | return error; | 344 | return error; |
@@ -439,19 +439,17 @@ _xfs_buf_find( | |||
439 | xfs_buf_flags_t flags, | 439 | xfs_buf_flags_t flags, |
440 | xfs_buf_t *new_bp) | 440 | xfs_buf_t *new_bp) |
441 | { | 441 | { |
442 | xfs_off_t offset; | ||
443 | size_t numbytes; | 442 | size_t numbytes; |
444 | struct xfs_perag *pag; | 443 | struct xfs_perag *pag; |
445 | struct rb_node **rbp; | 444 | struct rb_node **rbp; |
446 | struct rb_node *parent; | 445 | struct rb_node *parent; |
447 | xfs_buf_t *bp; | 446 | xfs_buf_t *bp; |
448 | 447 | ||
449 | offset = BBTOB(blkno); | ||
450 | numbytes = BBTOB(numblks); | 448 | numbytes = BBTOB(numblks); |
451 | 449 | ||
452 | /* Check for IOs smaller than the sector size / not sector aligned */ | 450 | /* Check for IOs smaller than the sector size / not sector aligned */ |
453 | ASSERT(!(numbytes < (1 << btp->bt_sshift))); | 451 | ASSERT(!(numbytes < (1 << btp->bt_sshift))); |
454 | ASSERT(!(offset & (xfs_off_t)btp->bt_smask)); | 452 | ASSERT(!(BBTOB(blkno) & (xfs_off_t)btp->bt_smask)); |
455 | 453 | ||
456 | /* get tree root */ | 454 | /* get tree root */ |
457 | pag = xfs_perag_get(btp->bt_mount, | 455 | pag = xfs_perag_get(btp->bt_mount, |
@@ -466,13 +464,13 @@ _xfs_buf_find( | |||
466 | parent = *rbp; | 464 | parent = *rbp; |
467 | bp = rb_entry(parent, struct xfs_buf, b_rbnode); | 465 | bp = rb_entry(parent, struct xfs_buf, b_rbnode); |
468 | 466 | ||
469 | if (offset < bp->b_file_offset) | 467 | if (blkno < bp->b_bn) |
470 | rbp = &(*rbp)->rb_left; | 468 | rbp = &(*rbp)->rb_left; |
471 | else if (offset > bp->b_file_offset) | 469 | else if (blkno > bp->b_bn) |
472 | rbp = &(*rbp)->rb_right; | 470 | rbp = &(*rbp)->rb_right; |
473 | else { | 471 | else { |
474 | /* | 472 | /* |
475 | * found a block offset match. If the range doesn't | 473 | * found a block number match. If the range doesn't |
476 | * match, the only way this is allowed is if the buffer | 474 | * match, the only way this is allowed is if the buffer |
477 | * in the cache is stale and the transaction that made | 475 | * in the cache is stale and the transaction that made |
478 | * it stale has not yet committed. i.e. we are | 476 | * it stale has not yet committed. i.e. we are |
@@ -718,7 +716,6 @@ xfs_buf_set_empty( | |||
718 | bp->b_pages = NULL; | 716 | bp->b_pages = NULL; |
719 | bp->b_page_count = 0; | 717 | bp->b_page_count = 0; |
720 | bp->b_addr = NULL; | 718 | bp->b_addr = NULL; |
721 | bp->b_file_offset = 0; | ||
722 | bp->b_buffer_length = bp->b_count_desired = numblks << BBSHIFT; | 719 | bp->b_buffer_length = bp->b_count_desired = numblks << BBSHIFT; |
723 | bp->b_bn = XFS_BUF_DADDR_NULL; | 720 | bp->b_bn = XFS_BUF_DADDR_NULL; |
724 | bp->b_flags &= ~XBF_MAPPED; | 721 | bp->b_flags &= ~XBF_MAPPED; |