• Taehee Yoo's avatar
    net: core: add ignore flag to netdev_adjacent structure · 32b6d34f
    Taehee Yoo authored
    In order to link an adjacent node, netdev_upper_dev_link() is used
    and in order to unlink an adjacent node, netdev_upper_dev_unlink() is used.
    unlink operation does not fail, but link operation can fail.
    
    In order to exchange adjacent nodes, we should unlink an old adjacent
    node first. then, link a new adjacent node.
    If link operation is failed, we should link an old adjacent node again.
    But this link operation can fail too.
    It eventually breaks the adjacent link relationship.
    
    This patch adds an ignore flag into the netdev_adjacent structure.
    If this flag is set, netdev_upper_dev_link() ignores an old adjacent
    node for a moment.
    
    This patch also adds new functions for other modules.
    netdev_adjacent_change_prepare()
    netdev_adjacent_change_commit()
    netdev_adjacent_change_abort()
    
    netdev_adjacent_change_prepare() inserts new device into adjacent list
    but new device is not allowed to use immediately.
    If netdev_adjacent_change_prepare() fails, it internally rollbacks
    adjacent list so that we don't need any other action.
    netdev_adjacent_change_commit() deletes old device in the adjacent list
    and allows new device to use.
    netdev_adjacent_change_abort() rollbacks adjacent list.
    Signed-off-by: default avatarTaehee Yoo <ap420073@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    32b6d34f
dev.c 254 KB