• Julian Wiedmann's avatar
    s390/qeth: tighten ucast IP locking · f3380b1e
    Julian Wiedmann authored
    
    
    The programming of ucast IPs via qeth_l3_modify_ip() is driven
    independently from any of our typical locking mechanisms (eg. detaching
    the netdevice, or holding the conf_mutex).
    So when we inspect the card state to check whether the required cmd IO
    should be deferred, there is no protection against concurrent state
    changes.
    
    But by slightly re-ordering the teardown sequence, we can rely on the
    ip_lock to sufficiently serialize things:
    
    1. when running concurrently to qeth_l3_set_online(), any instance of
       qeth_l3_modify_ip() that aquires the ip_lock _after_
       qeth_l3_recover_ip() will observe the state as CARD_STATE_SOFTSETUP
       and not defer the IO.
    2. when running concurrently to qeth_l3_set_offline(), any instance of
       qeth_l3_modify_ip() that aquires the ip_lock _after_
       qeth_l3_clear_ip_htable() will observe the state as CARD_STATE_DOWN
       and defer the IO.
    
    These guarantees in mind, we can now drop the conf_mutex from the
    qeth_l3_modify_rxip_vipa() wrapper.
    Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f3380b1e
qeth_l3_main.c 56.4 KB