[lkml]   [2008]   [Nov]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: Queue upcall locking (was: [dm-devel] [RFC][PATCH] fix dm_any_congested() to properly sync up with suspend code path)
    On Mon, 2008-11-10 at 09:19 -0500, Mikulas Patocka wrote:
    > On Mon, 10 Nov 2008, Christoph Hellwig wrote:
    > > On Mon, Nov 10, 2008 at 08:11:51AM -0500, Mikulas Patocka wrote:
    > > > For upstream Linux developers: you are holding a spinlock and calling
    > > > bdi*_congested functions that can take indefinite amount of time (there
    > > > are even users reporting having 50 disks in one logical volume or so). I
    > > > think it would be good to move these calls out of spinlocks.
    > >
    > > Umm, they shouldn't block that long, as that completely defeats their
    > > purpose. These functions are mostly used to avoid throwing more I/O at
    > > a congested device if pdflush could do more useful things instead. But
    > > if it blocks in those functions anyway we wouldn't have to bother using
    > > them. Do you have more details about the uses cases when this happens
    > > and where the routines spend so much time?
    > For device mapper, congested_fn asks every device in the tree and make OR
    > of their bits --- so if the user has 50 devices, it asks them all.
    > For md-linear, md-raid0, md-raid1, md-raid10 and md-multipath it does the
    > same --- asking every device.
    > If you have a better idea how to implement congested_fn, say it.

    Fix the infrastructure by adding a function call so that you can have
    the individual devices report their congestion state to the aggregate.

    Then congestion_fn can return a valid state in O(1) because the state is
    keps up-to-date by the individual state changes.

    IOW, add a set_congested_fn() and clear_congested_fn().

     \ /
      Last update: 2008-11-10 15:29    [W:0.019 / U:2.024 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site