diff options
Diffstat (limited to 'drivers/dax')
| -rw-r--r-- | drivers/dax/device.c | 14 | ||||
| -rw-r--r-- | drivers/dax/super.c | 8 | 
2 files changed, 17 insertions, 5 deletions
| diff --git a/drivers/dax/device.c b/drivers/dax/device.c index de2f8297a210..0a2acd7993f0 100644 --- a/drivers/dax/device.c +++ b/drivers/dax/device.c @@ -189,14 +189,16 @@ static int check_vma(struct dev_dax *dev_dax, struct vm_area_struct *vma,  	/* prevent private mappings from being established */  	if ((vma->vm_flags & VM_MAYSHARE) != VM_MAYSHARE) { -		dev_info(dev, "%s: %s: fail, attempted private mapping\n", +		dev_info_ratelimited(dev, +				"%s: %s: fail, attempted private mapping\n",  				current->comm, func);  		return -EINVAL;  	}  	mask = dax_region->align - 1;  	if (vma->vm_start & mask || vma->vm_end & mask) { -		dev_info(dev, "%s: %s: fail, unaligned vma (%#lx - %#lx, %#lx)\n", +		dev_info_ratelimited(dev, +				"%s: %s: fail, unaligned vma (%#lx - %#lx, %#lx)\n",  				current->comm, func, vma->vm_start, vma->vm_end,  				mask);  		return -EINVAL; @@ -204,13 +206,15 @@ static int check_vma(struct dev_dax *dev_dax, struct vm_area_struct *vma,  	if ((dax_region->pfn_flags & (PFN_DEV|PFN_MAP)) == PFN_DEV  			&& (vma->vm_flags & VM_DONTCOPY) == 0) { -		dev_info(dev, "%s: %s: fail, dax range requires MADV_DONTFORK\n", +		dev_info_ratelimited(dev, +				"%s: %s: fail, dax range requires MADV_DONTFORK\n",  				current->comm, func);  		return -EINVAL;  	}  	if (!vma_is_dax(vma)) { -		dev_info(dev, "%s: %s: fail, vma is not DAX capable\n", +		dev_info_ratelimited(dev, +				"%s: %s: fail, vma is not DAX capable\n",  				current->comm, func);  		return -EINVAL;  	} @@ -470,7 +474,7 @@ static int dax_mmap(struct file *filp, struct vm_area_struct *vma)  		return rc;  	vma->vm_ops = &dax_vm_ops; -	vma->vm_flags |= VM_MIXEDMAP | VM_HUGEPAGE; +	vma->vm_flags |= VM_HUGEPAGE;  	return 0;  } diff --git a/drivers/dax/super.c b/drivers/dax/super.c index 903d9c473749..45276abf03aa 100644 --- a/drivers/dax/super.c +++ b/drivers/dax/super.c @@ -86,6 +86,7 @@ bool __bdev_dax_supported(struct block_device *bdev, int blocksize)  {  	struct dax_device *dax_dev;  	bool dax_enabled = false; +	struct request_queue *q;  	pgoff_t pgoff;  	int err, id;  	void *kaddr; @@ -99,6 +100,13 @@ bool __bdev_dax_supported(struct block_device *bdev, int blocksize)  		return false;  	} +	q = bdev_get_queue(bdev); +	if (!q || !blk_queue_dax(q)) { +		pr_debug("%s: error: request queue doesn't support dax\n", +				bdevname(bdev, buf)); +		return false; +	} +  	err = bdev_dax_pgoff(bdev, 0, PAGE_SIZE, &pgoff);  	if (err) {  		pr_debug("%s: error: unaligned partition for dax\n", |