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 *); |
