On Sat, Sep 17, 2011 at 10:28 AM, Emmanuel Dreyfus <[email protected]> wrote: > Masao Uebayashi <[email protected]> wrote: > >> So what I can think of now is, the underlying bdev can't finish I/O >> because it allocates memory to handle I/O requests? > > I already spotted two points where ioflush was stuck in PUFFS code path, > and I added code so that it can act immediatly or get an error. That > helps, and I do not see ioflush deadlocking anymore. > > However the errors mean vnode are not really sync. When a process > deadlocks awaiting the PUFFS filesystem, while the PUFFS filesystems > sleeps on anonget2 (or sometime on flt_noram1), I can see that > uvmexp.paging is high as a few hundred, and it can even be thousands.
My understanding is that the swap I/O code path including underlying bdevs must *never* allocate memory to handle I/O, to resove such a resource shortage situation. Or the proc doing swap I/O would get stuck somewhere.
