|
@@ -123,19 +123,6 @@ static bool buffer_written(struct buffer_head *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,
|
|
|
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);
|
|
|
if (rc)
|
|
|
break;
|
|
|
- if (!buffer_size_valid(bh))
|
|
|
- bh->b_size = 1 << blkbits;
|
|
|
bh_max = pos - first + bh->b_size;
|
|
|
bdev = bh->b_bdev;
|
|
|
/*
|
|
@@ -1012,12 +997,7 @@ int dax_pmd_fault(struct vm_area_struct *vma, unsigned long address,
|
|
|
|
|
|
bdev = bh.b_bdev;
|
|
|
|
|
|
- /*
|
|
|
- * 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) {
|
|
|
+ if (bh.b_size < PMD_SIZE) {
|
|
|
dax_pmd_dbg(&bh, address, "allocated block too small");
|
|
|
return VM_FAULT_FALLBACK;
|
|
|
}
|