Dave Chinner wrote: > On Fri, Apr 15, 2011 at 12:29:46AM +0100, Pádraig Brady wrote: ... >> Well IMHO there should be a difference between >> knowing where you are going to write, and actually writing to disk. >> I.E. one shouldn't need to write the whole way to the device >> before returning a valid fiemap. If a particular file system >> implementation needs to sync to return a valid fiemap, >> then it should be implicit. > > No, this was explicitly laid out in the fiemap interface discussions > - it's up to the applicaiton to decide if it needs to do a sync > first. That's what the FIEMAP_FLAG_SYNC control flag is for. > This forces the fiemap call to do a fsync _before_ getting the > mapping. If you want to know the exact layout of the file is, then > you must use this flag. > > Even so, it is recognised that this is racy - any use of the block > map has a time-of-read-to-time-of-use race condition that means you > have to _verify_ the copy after it completes. FYI, that's what > xfs_fsr does when copying based on extent maps - if the inode has > changed in _any way_ during the copy, it aborts the copy of that > file. > > i.e. using fiemap for copying is at best a *hint* about the regions > that need copying, and it is in no way a guarantee that you'll get > all the information you need to make accurate copy even if you do > use the synchronous variant. Hi Dave, Can you or anyone else point to authoritative documentation (or even a summary of those "discussions") of FIEMAP semantics? I'm hoping the semantics are the same for all file system types. I had understood that cp's use of FIEMAP_FLAG_SYNC was not only unnecessary, but even undesirable, given a new-enough kernel. That's why coreutils-8.11 resorts to using the workaround of FIEMAP_FLAG_SYNC only when uname says the kernel is 2.6.[0..38]. _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs