On 8/29/18 11:22 AM, Joshi wrote: > Possibly a newbie question for the list, excuse my ignorance. > I saw e4defrag code, which fallocates a temporary file in the outset. > > I imagine that extents would not get allocated to the this file at > this time due to delayed-allocation feature (extent/block allocations > should happen post writes which seem to happen much later, during > extents copying between target-file and temporary-file). > > However, e4defrag needs extent information just after fallocate() to > determine whether it is wise to go-ahead with defrag process i.e. > whether new file is any less-fragmented than target one. I wonder how > this decision-making is possible if fallocate does not allocate > extents/blocks. > > I'd appreciate the thoughts. fallocate does not uses delayed allocation; it actually allocates specific blocks on disk before it returns. So delayed allocation doesn't come into play for the temporary/donor file. (delayed allocation happens during writeback, but for fallocate the whole point is that there is no data written, it is simply an extent allocation which is flagged to show that it is a preallocated extent and that until it /is/ written to, reads should return 0s.) -Eric