Re: [PATCH] Memory management livelock

From: Mikulas Patocka
Date: Fri Oct 03 2008 - 09:51:54 EST


> > LVM does (that is where the bug was discovered). Basically, it scans all
> > the block devices with direct IO and if someone else does buffered IO on
> > any device simultaneously, it locks up.
>
> Scans all block devices with direct IO? Hmm, why, I wonder? Should
> really consider using buffered (posix_fadvise to readahead/dropbehind).

LVM must not allocate any memory when doing IO because it suspends the
block device and memory allocation could trigger writeback on the
suspended device and deadlock.

So it preallocates heap and stack, mlockall()s itself and does direct IO.

Well, there are still two allocations on direct IO path --- one in
__blockdev_direct_IO and the other in dio_bio_alloc. If you have an idea
how to get rid of them (especially that kzalloc(sizeof(*dio), GFP_KERNEL),
that bio allocation would be quite easy to avoid), it would be benefical.

Mikulas
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/