From: Jeff D. <jd...@ad...> - 2005-09-14 19:44:45
|
On Tue, Sep 13, 2005 at 08:01:40PM +0200, Blaisorblade wrote: > It's just because things are called under spinlocks and GFP_KERNEL is used - > but if possible, it'd be better to use something better than GFP_ATOMIC > (since this is performance critical). This would be ubd_io_lock, which is taken for us by the block layer before entering do_ubd_request. We could make that a GFP_ATOMIC allocation, except that we have already dequeued the request, so would need to do something with it if the allocation failed. I'm wondering if we can drop the lock before do_io and pick it up afterwards. The bitmap argument is a global, which is a problem. Two racing requests could result in one writing out a bitmap which is either too old or too new. So, I'm not sure how to handle this. We could requeue what's left of the request if an allocation failure happens. We could drop the lock and pick it up later, but we have to be careful to write out the current bitmap, not one which we saved earlier or one which has been updated to reflect a racing request which is coming through later. Jeff |