From: Eric Sandeen <sandeen@sandeen.net>
To: "Darrick J. Wong" <darrick.wong@oracle.com>,
Eric Sandeen <sandeen@redhat.com>
Cc: linux-xfs <linux-xfs@vger.kernel.org>, Jeff Moyer <jmoyer@redhat.com>
Subject: Re: [PATCH] xfs: reject per-inode dax flag on reflink filesystems
Date: Wed, 17 Oct 2018 18:03:27 -0500 [thread overview]
Message-ID: <38b1c213-e8a3-6785-264f-b84c7ed2b2f9@sandeen.net> (raw)
In-Reply-To: <7ea6bd8c-fcda-e1bc-0438-1d741a575e75@sandeen.net>
On 10/17/18 5:49 PM, Eric Sandeen wrote:
>
>
> On 10/17/18 5:30 PM, Darrick J. Wong wrote:
>> On Wed, Oct 17, 2018 at 05:20:56PM -0500, Eric Sandeen wrote:
>>> Today we reject this flag on an already-reflinked inode, but we really
>>> need to reject it for any inode on a reflink-capable filesystem until
>>> reflink+dax is supported.
>>>
>>> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
>>> ---
>>>
>>> (um, do we need to catch this when reading from disk as well? If we
>>> found a dax-flagged inode on a reflinked fs, then what would we do with it?)
>>
>> Ignore the DAX flag. See xfs_inode_supports_dax.
>
> Oh, ok.
>
> Hohum, by that measure shouldn't we allow mount -o dax on reflink filesystems,
> and just ignore/reject dax behavior on actually reflinked inodes?
>
>>> diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
>>> index 0ef5ece5634c..63d579c652f2 100644
>>> --- a/fs/xfs/xfs_ioctl.c
>>> +++ b/fs/xfs/xfs_ioctl.c
>>> @@ -1031,8 +1031,9 @@ xfs_ioctl_setattr_xflags(
>>> if ((fa->fsx_xflags & FS_XFLAG_REALTIME) && xfs_is_reflink_inode(ip))
>>> ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK;
>>>
>>> - /* Don't allow us to set DAX mode for a reflinked file for now. */
>>> - if ((fa->fsx_xflags & FS_XFLAG_DAX) && xfs_is_reflink_inode(ip))
>>> + /* Don't allow us to set DAX mode on a reflink filesystem for now. */
>>> + if ((fa->fsx_xflags & FS_XFLAG_DAX) &&
>>> + xfs_sb_version_hasreflink(&ip->i_mount->m_sb))
>>> return -EINVAL;
>>
>> Not sure we need this, since DAX always loses to REFLINK, whether it's
>> at inode loading time or if someone's trying to set it in the ioctl.
>
> loses to a reflinked /inode/ but not to a reflink-capable fs, like
> mount does.
>
>> Ofc it's hard to say what the behavior should be since the dax iflag
>> semantics are poorly defined (it's been more or less advisory this whole
>> time)...
>>
>> ...but I gather you're sending this patch because you don't like this
>> wishy washy "ok you change this flag but it doesn't tell you if that had
>> any effect and there's no way to find out either" behavior? :)
>
> Just aiming for some semblance of consistency. Today we have:
>
> mount -o dax + xfs_sb_version_hasreflink =>
> ignore mount option, disable dax for all inodes regardless of reflinked status
>
> chattr +x + xfs_sb_version_hasreflink =>
> inode is dax until it gets reflinked, then it's ignored
>
> right?
>
> (and what happens if we have a daxified inode that gets reflinked later?)
Bit 15 (0x8000) - XFS_XFLAG_DAX
If the filesystem lives on directly accessible persistent mem‐
ory, reads and writes to this file will go straight to the per‐
sistent memory, bypassing the page cache. A file cannot be
reflinked and have the XFS_XFLAG_DAX set at the same time.
That is to say that DAX files cannot share blocks.
# xfs_io -c "lsattr" /mnt/test/dax
--------------x- /mnt/test/dax
# cp --reflink=always /mnt/test/dax /mnt/test/reflink
# xfs_io -c "lsattr" /mnt/test/reflink
---------------- /mnt/test/reflink
# xfs_bmap -v /mnt/test/dax /mnt/test/reflink
/mnt/test/dax:
EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL
0: [0..7]: 104..111 0 (104..111) 8 100000
/mnt/test/reflink:
EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL
0: [0..7]: 104..111 0 (104..111) 8 100000
# xfs_io -c "lsattr" /mnt/test/dax
--------------x- /mnt/test/dax
prev parent reply other threads:[~2018-10-18 7:01 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-17 22:20 [PATCH] xfs: reject per-inode dax flag on reflink filesystems Eric Sandeen
2018-10-17 22:30 ` Darrick J. Wong
2018-10-17 22:49 ` Eric Sandeen
2018-10-17 23:03 ` Eric Sandeen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=38b1c213-e8a3-6785-264f-b84c7ed2b2f9@sandeen.net \
--to=sandeen@sandeen.net \
--cc=darrick.wong@oracle.com \
--cc=jmoyer@redhat.com \
--cc=linux-xfs@vger.kernel.org \
--cc=sandeen@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox