• Trond Myklebust's avatar
    NFSv4.1: Fix a race in pNFS layoutcommit · a073dbff
    Trond Myklebust authored
    We need to clear the NFS_LSEG_LAYOUTCOMMIT bits atomically with the
    NFS_INO_LAYOUTCOMMIT bit, otherwise we may end up with situations
    where the two are out of sync.
    The first half of the problem is to ensure that pnfs_layoutcommit_inode
    clears the NFS_LSEG_LAYOUTCOMMIT bit through pnfs_list_write_lseg.
    We still need to keep the reference to those segments until the RPC call
    is finished, so in order to make it clear _where_ those references come
    from, we add a helper pnfs_list_write_lseg_done() that cleans up after
    pnfs_list_write_lseg.
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    Acked-by: default avatarBenny Halevy <bhalevy@tonian.com>
    Cc: stable@vger.kernel.org
    a073dbff
pnfs.c 49.9 KB