dax: remove buffer_size_valid()
Now that ext4 properly sets bh.b_size when we call get_block() for a hole, rely on that value and remove the buffer_size_valid() sanity check. Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com> Reviewed-by: Jan Kara <jack@suse.cz> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
547edce3ba
commit
fa0d3fce7c
22
fs/dax.c
22
fs/dax.c
|
@ -123,19 +123,6 @@ static bool buffer_written(struct buffer_head *bh)
|
||||||
return buffer_mapped(bh) && !buffer_unwritten(bh);
|
return buffer_mapped(bh) && !buffer_unwritten(bh);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* When ext4 encounters a hole, it returns without modifying the buffer_head
|
|
||||||
* which means that we can't trust b_size. To cope with this, we set b_state
|
|
||||||
* to 0 before calling get_block and, if any bit is set, we know we can trust
|
|
||||||
* b_size. Unfortunate, really, since ext4 knows precisely how long a hole is
|
|
||||||
* and would save us time calling get_block repeatedly.
|
|
||||||
*/
|
|
||||||
static bool buffer_size_valid(struct buffer_head *bh)
|
|
||||||
{
|
|
||||||
return bh->b_state != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static sector_t to_sector(const struct buffer_head *bh,
|
static sector_t to_sector(const struct buffer_head *bh,
|
||||||
const struct inode *inode)
|
const struct inode *inode)
|
||||||
{
|
{
|
||||||
|
@ -177,8 +164,6 @@ static ssize_t dax_io(struct inode *inode, struct iov_iter *iter,
|
||||||
rc = get_block(inode, block, bh, rw == WRITE);
|
rc = get_block(inode, block, bh, rw == WRITE);
|
||||||
if (rc)
|
if (rc)
|
||||||
break;
|
break;
|
||||||
if (!buffer_size_valid(bh))
|
|
||||||
bh->b_size = 1 << blkbits;
|
|
||||||
bh_max = pos - first + bh->b_size;
|
bh_max = pos - first + bh->b_size;
|
||||||
bdev = bh->b_bdev;
|
bdev = bh->b_bdev;
|
||||||
/*
|
/*
|
||||||
|
@ -1012,12 +997,7 @@ int dax_pmd_fault(struct vm_area_struct *vma, unsigned long address,
|
||||||
|
|
||||||
bdev = bh.b_bdev;
|
bdev = bh.b_bdev;
|
||||||
|
|
||||||
/*
|
if (bh.b_size < PMD_SIZE) {
|
||||||
* If the filesystem isn't willing to tell us the length of a hole,
|
|
||||||
* just fall back to PTEs. Calling get_block 512 times in a loop
|
|
||||||
* would be silly.
|
|
||||||
*/
|
|
||||||
if (!buffer_size_valid(&bh) || bh.b_size < PMD_SIZE) {
|
|
||||||
dax_pmd_dbg(&bh, address, "allocated block too small");
|
dax_pmd_dbg(&bh, address, "allocated block too small");
|
||||||
return VM_FAULT_FALLBACK;
|
return VM_FAULT_FALLBACK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue