diff options
-rw-r--r-- | fs/block_dev.c | 6 | ||||
-rw-r--r-- | fs/buffer.c | 4 | ||||
-rw-r--r-- | include/linux/fs.h | 1 |
3 files changed, 7 insertions, 4 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c index e08f6a20a5bb..ba11c30f302d 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c | |||
@@ -70,7 +70,7 @@ static void bdev_inode_switch_bdi(struct inode *inode, | |||
70 | spin_unlock(&dst->wb.list_lock); | 70 | spin_unlock(&dst->wb.list_lock); |
71 | } | 71 | } |
72 | 72 | ||
73 | static sector_t max_block(struct block_device *bdev) | 73 | sector_t blkdev_max_block(struct block_device *bdev) |
74 | { | 74 | { |
75 | sector_t retval = ~((sector_t)0); | 75 | sector_t retval = ~((sector_t)0); |
76 | loff_t sz = i_size_read(bdev->bd_inode); | 76 | loff_t sz = i_size_read(bdev->bd_inode); |
@@ -163,7 +163,7 @@ static int | |||
163 | blkdev_get_block(struct inode *inode, sector_t iblock, | 163 | blkdev_get_block(struct inode *inode, sector_t iblock, |
164 | struct buffer_head *bh, int create) | 164 | struct buffer_head *bh, int create) |
165 | { | 165 | { |
166 | if (iblock >= max_block(I_BDEV(inode))) { | 166 | if (iblock >= blkdev_max_block(I_BDEV(inode))) { |
167 | if (create) | 167 | if (create) |
168 | return -EIO; | 168 | return -EIO; |
169 | 169 | ||
@@ -185,7 +185,7 @@ static int | |||
185 | blkdev_get_blocks(struct inode *inode, sector_t iblock, | 185 | blkdev_get_blocks(struct inode *inode, sector_t iblock, |
186 | struct buffer_head *bh, int create) | 186 | struct buffer_head *bh, int create) |
187 | { | 187 | { |
188 | sector_t end_block = max_block(I_BDEV(inode)); | 188 | sector_t end_block = blkdev_max_block(I_BDEV(inode)); |
189 | unsigned long max_blocks = bh->b_size >> inode->i_blkbits; | 189 | unsigned long max_blocks = bh->b_size >> inode->i_blkbits; |
190 | 190 | ||
191 | if ((iblock + max_blocks) > end_block) { | 191 | if ((iblock + max_blocks) > end_block) { |
diff --git a/fs/buffer.c b/fs/buffer.c index 351e18ea2e53..ad5938ca357c 100644 --- a/fs/buffer.c +++ b/fs/buffer.c | |||
@@ -921,6 +921,7 @@ init_page_buffers(struct page *page, struct block_device *bdev, | |||
921 | struct buffer_head *head = page_buffers(page); | 921 | struct buffer_head *head = page_buffers(page); |
922 | struct buffer_head *bh = head; | 922 | struct buffer_head *bh = head; |
923 | int uptodate = PageUptodate(page); | 923 | int uptodate = PageUptodate(page); |
924 | sector_t end_block = blkdev_max_block(I_BDEV(bdev->bd_inode)); | ||
924 | 925 | ||
925 | do { | 926 | do { |
926 | if (!buffer_mapped(bh)) { | 927 | if (!buffer_mapped(bh)) { |
@@ -929,7 +930,8 @@ init_page_buffers(struct page *page, struct block_device *bdev, | |||
929 | bh->b_blocknr = block; | 930 | bh->b_blocknr = block; |
930 | if (uptodate) | 931 | if (uptodate) |
931 | set_buffer_uptodate(bh); | 932 | set_buffer_uptodate(bh); |
932 | set_buffer_mapped(bh); | 933 | if (block < end_block) |
934 | set_buffer_mapped(bh); | ||
933 | } | 935 | } |
934 | block++; | 936 | block++; |
935 | bh = bh->b_this_page; | 937 | bh = bh->b_this_page; |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 8de675523e46..25c40b9f848a 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -2051,6 +2051,7 @@ extern void unregister_blkdev(unsigned int, const char *); | |||
2051 | extern struct block_device *bdget(dev_t); | 2051 | extern struct block_device *bdget(dev_t); |
2052 | extern struct block_device *bdgrab(struct block_device *bdev); | 2052 | extern struct block_device *bdgrab(struct block_device *bdev); |
2053 | extern void bd_set_size(struct block_device *, loff_t size); | 2053 | extern void bd_set_size(struct block_device *, loff_t size); |
2054 | extern sector_t blkdev_max_block(struct block_device *bdev); | ||
2054 | extern void bd_forget(struct inode *inode); | 2055 | extern void bd_forget(struct inode *inode); |
2055 | extern void bdput(struct block_device *); | 2056 | extern void bdput(struct block_device *); |
2056 | extern void invalidate_bdev(struct block_device *); | 2057 | extern void invalidate_bdev(struct block_device *); |