Skip to content
  • Manfred Spraul's avatar
    ipc/sem.c: always use only one queue for alter operations · f269f40a
    Manfred Spraul authored
    
    
    There are two places that can contain alter operations:
     - the global queue: sma->pending_alter
     - the per-semaphore queues: sma->sem_base[].pending_alter.
    
    Since one of the queues must be processed first, this causes an odd
    priorization of the wakeups: complex operations have priority over
    simple ops.
    
    The patch restores the behavior of linux <=3.0.9: The longest waiting
    operation has the highest priority.
    
    This is done by using only one queue:
     - if there are complex ops, then sma->pending_alter is used.
     - otherwise, the per-semaphore queues are used.
    
    As a side effect, do_smart_update_queue() becomes much simpler: no more
    goto logic.
    
    Signed-off-by: default avatarManfred Spraul <manfred@colorfullife.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Davidlohr Bueso <davidlohr.bueso@hp.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f269f40a