From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f41.google.com ([74.125.82.41]:37446 "EHLO mail-wm0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753472AbcEBJt0 (ORCPT ); Mon, 2 May 2016 05:49:26 -0400 Received: by mail-wm0-f41.google.com with SMTP id a17so133623405wme.0 for ; Mon, 02 May 2016 02:49:25 -0700 (PDT) Message-ID: <572722A2.4020906@plexistor.com> Date: Mon, 02 May 2016 12:49:22 +0300 From: Boaz Harrosh MIME-Version: 1.0 To: Christoph Hellwig , Toshi Kani CC: dan.j.williams@intel.com, david@fromorbit.com, jack@suse.cz, tytso@mit.edu, adilger.kernel@dilger.ca, ross.zwisler@linux.intel.com, linux-nvdimm@ml01.01.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/3] ext4: Add alignment check for DAX mount References: <1461962375-3720-1-git-send-email-toshi.kani@hpe.com> <1461962375-3720-2-git-send-email-toshi.kani@hpe.com> <20160501173115.GA21574@infradead.org> In-Reply-To: <20160501173115.GA21574@infradead.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On 05/01/2016 08:31 PM, Christoph Hellwig wrote: > On Fri, Apr 29, 2016 at 02:39:33PM -0600, Toshi Kani wrote: >> diff --git a/fs/ext4/super.c b/fs/ext4/super.c >> index 304c712..90a8670 100644 >> --- a/fs/ext4/super.c >> +++ b/fs/ext4/super.c >> @@ -3421,6 +3421,12 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) >> "error: unsupported blocksize for dax"); >> goto failed_mount; >> } >> + if (sb->s_bdev->bd_part->start_sect % (PAGE_SIZE / 512) || >> + sb->s_bdev->bd_part->nr_sects % (PAGE_SIZE / 512)) { >> + ext4_msg(sb, KERN_ERR, >> + "error: unaligned partition for dax"); >> + goto failed_mount; >> + } >> if (!sb->s_bdev->bd_disk->fops->direct_access) { >> ext4_msg(sb, KERN_ERR, >> "error: device does not support dax"); > > Factor your new checks and the ->direct_access into a new helper. It > should take the block device as file systems might have multiple > underlying devices. This already exists as part of bdev_direct_access() All the code needs to do is call bdev_direct_access() on sector ZERO and see if it is successful. If the alignment is broken it will fail. Infact the FS does not even need the second if (!...bd_disk->fops->direct_access) check either because it is also done inside bdev_direct_access(). The only check needed is calling bdev_direct_access() and the generic layer does all the checks needed already. Cheers Boaz