• David Reynolds's avatar
    orangefs: bug fix for a race condition when getting a slot · c2676ef8
    David Reynolds authored
    When a slot becomes free, call wake_up_locked regardless of the number
    of slots available.
    
    Without this patch, wake_up_locked is only called when going from no
    free slots to one. This means that there is a chance a waiting task
    will not be woken up. In many cases, the system will bounce between 0
    and 1 free slots, and the waiting tasks will be woken up. But if there
    is still a waiting task and another slot becomes available before the
    number of free slots reaches zero, that waiting task may never be woken
    up since the number of free slots may never reach zero again.
    
    The bug behavior is easy to reproduce with the following script,
    where /mnt/orangefs is an OrangeFS file system.
    
    for i in {1..100}; do
    	for j in {1..20}; do
    		dd if=/dev/zero of=/mnt/orangefs/tmp$j bs=32768 count=32 &
    	done
    	wait
    done
    Signed-off-by: default avatarDavid Reynolds <david@omnibond.com>
    Reviewed-by: default avatarMartin Brandenburg <martin@omnibond.com>
    Signed-off-by: default avatarMike Marshall <hubcap@omnibond.com>
    c2676ef8
orangefs-bufmap.c 12.5 KB