On Thu, Jan 28, 2016 at 11:35 AM, Ross Zwisler
There are a number of places in dax.c that look up the struct
associated with an inode. Previously this was done by just using
inode->i_sb->s_bdev. This is correct for inodes that exist within the
filesystems supported by DAX (ext2, ext4 & XFS), but when running DAX
against raw block devices this value is NULL. This causes NULL pointer
dereferences when these block_device pointers are used.
Instead, for raw block devices we need to look up the struct block_device
using I_BDEV(). This patch fixes all the block_device lookups in dax.c so
that they work properly for both filesystems and raw block devices.
Signed-off-by: Ross Zwisler <ross.zwisler(a)linux.intel.com>
It's a bit odd to check if it is a raw device inode in
dax_clear_blocks() since there's no use case to clear blocks in that
case, but I can't think of a better alternative.
Acked-by: Dan Williams <dan.j.williams(a)intel.com>