• Trond Myklebust's avatar
    NFSv4.1: Fix bulk recall and destroy of layouts · fd9a8d71
    Trond Myklebust authored
    The current code in pnfs_destroy_all_layouts() assumes that removing
    the layout from the server->layouts list is sufficient to make it
    invisible to other processes. This ignores the fact that most
    users access the layout through the nfs_inode->layout...
    There is further breakage due to lack of reference counting of the
    layouts, meaning that the whole thing Oopses at the drop of a hat.
    
    The code in initiate_bulk_draining() is almost correct, and can be
    used as a model for pnfs_destroy_all_layouts(), so move that
    code to pnfs.c, and refactor the code to allow us to choose between
    a single filesystem bulk recall, and a recall of all layouts.
    Also note that initiate_bulk_draining() currently calls iput() while
    holding locks. Fix that too.
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    Cc: stable@vger.kernel.org
    fd9a8d71
pnfs.c 49.2 KB