diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_aops.c | 19 | ||||
-rw-r--r-- | fs/xfs/xfs_iomap.c | 19 | ||||
-rw-r--r-- | fs/xfs/xfs_iomap.h | 4 |
3 files changed, 16 insertions, 26 deletions
diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index 303a779406c0..2b09cc34dd07 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c | |||
@@ -568,10 +568,12 @@ xfs_map_buffer( | |||
568 | sector_t bn; | 568 | sector_t bn; |
569 | struct xfs_mount *m = XFS_I(inode)->i_mount; | 569 | struct xfs_mount *m = XFS_I(inode)->i_mount; |
570 | xfs_off_t iomap_offset = XFS_FSB_TO_B(m, mp->iomap_offset); | 570 | xfs_off_t iomap_offset = XFS_FSB_TO_B(m, mp->iomap_offset); |
571 | xfs_daddr_t iomap_bn = xfs_fsb_to_db(XFS_I(inode), mp->iomap_bn); | ||
571 | 572 | ||
572 | ASSERT(mp->iomap_bn != IOMAP_DADDR_NULL); | 573 | ASSERT(mp->iomap_bn != HOLESTARTBLOCK); |
574 | ASSERT(mp->iomap_bn != DELAYSTARTBLOCK); | ||
573 | 575 | ||
574 | bn = (mp->iomap_bn >> (inode->i_blkbits - BBSHIFT)) + | 576 | bn = (iomap_bn >> (inode->i_blkbits - BBSHIFT)) + |
575 | ((offset - iomap_offset) >> inode->i_blkbits); | 577 | ((offset - iomap_offset) >> inode->i_blkbits); |
576 | 578 | ||
577 | ASSERT(bn || XFS_IS_REALTIME_INODE(XFS_I(inode))); | 579 | ASSERT(bn || XFS_IS_REALTIME_INODE(XFS_I(inode))); |
@@ -587,8 +589,8 @@ xfs_map_at_offset( | |||
587 | xfs_iomap_t *iomapp, | 589 | xfs_iomap_t *iomapp, |
588 | xfs_off_t offset) | 590 | xfs_off_t offset) |
589 | { | 591 | { |
590 | ASSERT(!(iomapp->iomap_flags & IOMAP_HOLE)); | 592 | ASSERT(iomapp->iomap_bn != HOLESTARTBLOCK); |
591 | ASSERT(!(iomapp->iomap_flags & IOMAP_DELAY)); | 593 | ASSERT(iomapp->iomap_bn != DELAYSTARTBLOCK); |
592 | 594 | ||
593 | lock_buffer(bh); | 595 | lock_buffer(bh); |
594 | xfs_map_buffer(inode, bh, iomapp, offset); | 596 | xfs_map_buffer(inode, bh, iomapp, offset); |
@@ -818,8 +820,8 @@ xfs_convert_page( | |||
818 | continue; | 820 | continue; |
819 | } | 821 | } |
820 | 822 | ||
821 | ASSERT(!(mp->iomap_flags & IOMAP_HOLE)); | 823 | ASSERT(mp->iomap_bn != HOLESTARTBLOCK); |
822 | ASSERT(!(mp->iomap_flags & IOMAP_DELAY)); | 824 | ASSERT(mp->iomap_bn != DELAYSTARTBLOCK); |
823 | 825 | ||
824 | xfs_map_at_offset(inode, bh, mp, offset); | 826 | xfs_map_at_offset(inode, bh, mp, offset); |
825 | if (startio) { | 827 | if (startio) { |
@@ -1478,7 +1480,8 @@ __xfs_get_blocks( | |||
1478 | if (niomap == 0) | 1480 | if (niomap == 0) |
1479 | return 0; | 1481 | return 0; |
1480 | 1482 | ||
1481 | if (iomap.iomap_bn != IOMAP_DADDR_NULL) { | 1483 | if (iomap.iomap_bn != HOLESTARTBLOCK && |
1484 | iomap.iomap_bn != DELAYSTARTBLOCK) { | ||
1482 | /* | 1485 | /* |
1483 | * For unwritten extents do not report a disk address on | 1486 | * For unwritten extents do not report a disk address on |
1484 | * the read case (treat as if we're reading into a hole). | 1487 | * the read case (treat as if we're reading into a hole). |
@@ -1513,7 +1516,7 @@ __xfs_get_blocks( | |||
1513 | (iomap.iomap_flags & (IOMAP_NEW|IOMAP_UNWRITTEN)))) | 1516 | (iomap.iomap_flags & (IOMAP_NEW|IOMAP_UNWRITTEN)))) |
1514 | set_buffer_new(bh_result); | 1517 | set_buffer_new(bh_result); |
1515 | 1518 | ||
1516 | if (iomap.iomap_flags & IOMAP_DELAY) { | 1519 | if (iomap.iomap_bn == DELAYSTARTBLOCK) { |
1517 | BUG_ON(direct); | 1520 | BUG_ON(direct); |
1518 | if (create) { | 1521 | if (create) { |
1519 | set_buffer_uptodate(bh_result); | 1522 | set_buffer_uptodate(bh_result); |
diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 49b5ad22a9d8..fbe5d32f9ef5 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c | |||
@@ -64,24 +64,15 @@ xfs_imap_to_bmap( | |||
64 | int imaps, /* Number of imap entries */ | 64 | int imaps, /* Number of imap entries */ |
65 | int flags) | 65 | int flags) |
66 | { | 66 | { |
67 | xfs_fsblock_t start_block; | ||
68 | |||
69 | iomapp->iomap_offset = imap->br_startoff; | 67 | iomapp->iomap_offset = imap->br_startoff; |
70 | iomapp->iomap_bsize = imap->br_blockcount; | 68 | iomapp->iomap_bsize = imap->br_blockcount; |
71 | iomapp->iomap_flags = flags; | 69 | iomapp->iomap_flags = flags; |
70 | iomapp->iomap_bn = imap->br_startblock; | ||
72 | 71 | ||
73 | start_block = imap->br_startblock; | 72 | if (imap->br_startblock != HOLESTARTBLOCK && |
74 | if (start_block == HOLESTARTBLOCK) { | 73 | imap->br_startblock != DELAYSTARTBLOCK && |
75 | iomapp->iomap_bn = IOMAP_DADDR_NULL; | 74 | ISUNWRITTEN(imap)) |
76 | iomapp->iomap_flags |= IOMAP_HOLE; | 75 | iomapp->iomap_flags |= IOMAP_UNWRITTEN; |
77 | } else if (start_block == DELAYSTARTBLOCK) { | ||
78 | iomapp->iomap_bn = IOMAP_DADDR_NULL; | ||
79 | iomapp->iomap_flags |= IOMAP_DELAY; | ||
80 | } else { | ||
81 | iomapp->iomap_bn = xfs_fsb_to_db(ip, start_block); | ||
82 | if (ISUNWRITTEN(imap)) | ||
83 | iomapp->iomap_flags |= IOMAP_UNWRITTEN; | ||
84 | } | ||
85 | } | 76 | } |
86 | 77 | ||
87 | int | 78 | int |
diff --git a/fs/xfs/xfs_iomap.h b/fs/xfs/xfs_iomap.h index db9299631ee4..d2f3b67d39f9 100644 --- a/fs/xfs/xfs_iomap.h +++ b/fs/xfs/xfs_iomap.h | |||
@@ -18,12 +18,8 @@ | |||
18 | #ifndef __XFS_IOMAP_H__ | 18 | #ifndef __XFS_IOMAP_H__ |
19 | #define __XFS_IOMAP_H__ | 19 | #define __XFS_IOMAP_H__ |
20 | 20 | ||
21 | #define IOMAP_DADDR_NULL ((xfs_daddr_t) (-1LL)) | ||
22 | |||
23 | |||
24 | typedef enum { /* iomap_flags values */ | 21 | typedef enum { /* iomap_flags values */ |
25 | IOMAP_READ = 0, /* mapping for a read */ | 22 | IOMAP_READ = 0, /* mapping for a read */ |
26 | IOMAP_HOLE = 0x02, /* mapping covers a hole */ | ||
27 | IOMAP_DELAY = 0x04, /* mapping covers delalloc region */ | 23 | IOMAP_DELAY = 0x04, /* mapping covers delalloc region */ |
28 | IOMAP_UNWRITTEN = 0x20, /* mapping covers allocated */ | 24 | IOMAP_UNWRITTEN = 0x20, /* mapping covers allocated */ |
29 | /* but uninitialized file data */ | 25 | /* but uninitialized file data */ |