Re: [PATCH v2] xfs_restore: detect rtinherit on destination

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 6/6/19 4:50 PM, Dave Chinner wrote:
> On Thu, Jun 06, 2019 at 04:23:51PM -0500, Eric Sandeen wrote:
>> On 6/6/19 2:57 PM, Sheena Artrip wrote:
>>> When running xfs_restore with a non-rtdev dump,
>>> it will ignore any rtinherit flags on the destination
>>> and send I/O to the metadata region.
>>>
>>> Instead, detect rtinherit on the destination XFS fileystem root inode
>>> and use that to override the incoming inode flags.
>>>
>>> Original version of this patch missed some branches so multiple
>>> invocations of xfsrestore onto the same fs caused
>>> the rtinherit bit to get re-removed. There could be some
>>> additional edge cases in non-realtime to realtime workflows so
>>> the outstanding question would be: is it worth supporting?
>>>
>>> Changes in v2:
>>> * Changed root inode bulkstat to just ioctl to the destdir inode
>>
>> Thanks for that fixup (though comment still says "root" FWIW)
>>
>> Thinking about this some more, I'm really kind of wondering how this
>> should all be expected to work.  There are several scenarios here,
>> and "is this file rt?" is prescribed in different ways - either in
>> the dump itself, or on the target fs via inheritance flags...
>>
>> (NB: rt is not the only inheritable flag, so would we need to handle
>> the others?)
>>
>> non-rt fs dump, restored onto non-rt fs
>> 	- obviously this is fine
>>
>> rt fs dump, restored onto rt fs
>> 	- obviously this is fine as well
>>
>> rt fs dump, restored onto non-rt fs
>> 	- this works, with errors - all rt files become non-rt
>> 	- nothing else to do here other than fail outright
> 
> This should just work, without errors or warnings.

I said errors but I meant warnings:

xfsrestore: restoring non-directory files
xfsrestore: WARNING: attempt to set extended attributes (xflags 0x80000001, extsize = 0x0, projid = 0x0) of rtdir/bar failed: Invalid argument
xfsrestore: WARNING: attempt to set extended attributes (xflags 0x80000001, extsize = 0x0, projid = 0x0) of rtdir/baz failed: Invalid argument
xfsrestore: restore complete: 0 seconds elapsed

and yeah, probably should not be noisy there.

>> non-rt fs dump, restored into rt fs dir/fs with "rtinherit" set
>> 	- this one is your case
>> 	- today it's ignored, files stay non-rt
>> 	- you're suggesting it be honored and files turned into rt
> 
> Current filesystem policy should override the policy in dump image
> as the dump image may contain an invalid policy....
> 
>> the one case that's not handled here is "what if I want to have my
>> realtime dump with realtime files restored onto an rt-capable fs, but
>> turned into regular files?" 
> 
> Which is where having the kernel policy override the dump file is
> necesary...

The trick is that we don't have a "no-rt" flag we can set on a dir,
so there is no "files in this dir ar not rt" policy to follow.

>> So your patch gives us one mechanism (restore non-rt files as
>> rt files) but not the converse (restore rt files as non-rt files) -
>> I'm not sure if that matters, but the symmetry bugs me a little.
>>
>> I'm trying to decide if dump/restore is truly the right way to
>> migrate files from non-rt to rt or vice versa, TBH.  Maybe dchinner
>> or djwong will have thoughts as well...
> 
> *nod*
> 
> My take on this is that we need to decide which allocation policy to
> use - the kernel policy or the dump file policy - in the different
> situations. It's a simple, easy to document and understand solution.
> 
> At minimum, if there's a mismatch between rtdev/non-rtdev between
> dump and restore, then restore should not try to restore or clear rt
> flags at all. i.e the rt flags in the dump image should be
> considered invalid in this situation and masked out in the restore
> process. This prevents errors from being reported during restore,
> and it does "the right thing" according to how the user has
> configured the destination directory. i.e.  if the destdir has the
> rtinherit bit set and there's a rtdev present, the kernel policy
> will cause all file data that is restored to be allocated on the
> rtdev. Otherwise the kernel will place it (correctly) on the data
> dev.
> 
> In the case where both have rtdevs, but you want to restore to
> ignore the dump file rtdev policy, we really only need to add a CLI
> option to say "ignore rt flags" and that then allows the kernel
> policy to dictate how the restored files are placed in the same way
> that having a rtdev mismatch does.
> 
> This is simple, consistent, fulfils the requirements and should have
> no hidden surprises for users....

Sounds reasonable.  So the CLI flag would say "ignore RT info in the
dump, and write files according to the destination fs policy?"
I think that makes sense.

Now: do we need to do the same for all inheritable flags?  projid,
extsize, etc?  I think we probably do.

-Eric



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux