On Tue, 2002-06-18 at 08:13, Paul Schutte wrote:
> I have seen a releated problem when the space is tight.
>
> When you untar a lot of small files onto a partition that is tight on space,
> you get
> out of space errors.
> After the delalloc blocks are commited to disk, some space become available
> and
> files get written to disk again.
> All the space get delalloced again with resulting out of space errors.
> This cycle continues until all the space are really gone or the tar exits.
> You end up where not all the files in the tar file get extracted to disk,
> eventhough
> everything would have fitted onto the partition. If you write the files
> synchronously, they all fit onto the partition.
>
> I am not sure if this fix will address this issue. If you flush before giving
> an
> "Out of space error", it should fix it.
> (I tried fixing this myself, but ended up with a kernel that deadlocks)
There were two things in this fix - one was a pathological end case
where we sat in a cpu loop and never completed, the other was to flush
the log out to disk after we flush delalloc space - the log flush is
what actually releases the overcommitted space in the transactions.
This latter part of the fix should help your case.
>
> I also observed a similar behaviour within the allocation groups.
> When all the space in an ag(#1) are delalloced, xfs switches to the next
> ag(#2).
> This is not bad if inode and data blocks would both switch to #2, but I
> observed
> that the inode blocks stayed in #1, while the data blocks switched to #2
> (#1,#2
> situation).
> This results in very bad inode vs data block layout.
> Xfs switches back to the previous ag (#1,#1 situation) once the delalloced
> blocks
> are commited.
>
Interesting point about the delalloc within an allocation group. Not
sure off the top of my head how to deal with it - a single allocation
group is not the answer, there are definite deadlock scenarios if you
do that.
Steve
--
Steve Lord voice: +1-651-683-3511
Principal Engineer, Filesystem Software email: lord@xxxxxxx
|