From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com ([192.55.52.120]:6276 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932270AbcECOny (ORCPT ); Tue, 3 May 2016 10:43:54 -0400 Date: Tue, 3 May 2016 08:43:52 -0600 From: Ross Zwisler To: Jan Kara Cc: Christoph Hellwig , Toshi Kani , dan.j.williams@intel.com, david@fromorbit.com, boaz@plexistor.com, tytso@mit.edu, adilger.kernel@dilger.ca, ross.zwisler@linux.intel.com, micah.parrish@hpe.com, linux-nvdimm@ml01.01.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 1/3] ext4: Add alignment check for DAX mount Message-ID: <20160503144352.GA27470@linux.intel.com> References: <1462214578-27122-1-git-send-email-toshi.kani@hpe.com> <1462214578-27122-2-git-send-email-toshi.kani@hpe.com> <20160503084410.GB31363@infradead.org> <20160503090021.GC12748@quack2.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160503090021.GC12748@quack2.suse.cz> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Tue, May 03, 2016 at 11:00:21AM +0200, Jan Kara wrote: > On Tue 03-05-16 01:44:10, Christoph Hellwig wrote: > > Please come up with a version that doesn't require tons of boilerplate > > code in every file system. > > Well, I was thinking about some helper as well but we could save ~4 lines > with that and that didn't seem significant to me. Most of the lines is > actually reporting appropriate mount error in dmesg and that is > fs-dependent so it needs to stay in the filesystem... So what do you have > in mind? I guess if you wanted to reduce the code needed in each filesystem, you could avoid having different error messages for each of the failure conditions, and just print the error value. All the error cases caught by the current code are unique, so we aren't losing any information. The resulting patch for ext4 would look like this: @@ -3416,14 +3416,19 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) } if (sbi->s_mount_opt & EXT4_MOUNT_DAX) { + struct blk_dax_ctl dax = { + .sector = 0, + .size = PAGE_SIZE, + }; if (blocksize != PAGE_SIZE) { ext4_msg(sb, KERN_ERR, "error: unsupported blocksize for dax"); goto failed_mount; } - if (!sb->s_bdev->bd_disk->fops->direct_access) { + err = bdev_direct_access(sb->s_bdev, &dax); + if (err < 0) { ext4_msg(sb, KERN_ERR, - "error: device does not support dax"); + "error: dax access failed (%d)", err); goto failed_mount; } }