• Trond Myklebust's avatar
    NFSv4.1: Fix a race in pNFS layoutcommit · 9ca2044f
    Trond Myklebust authored
    commit a073dbff upstream.
    
    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>
    [bwh: Backported to 3.2: s/pnfs_put_lseg/put_lseg/]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    9ca2044f
pnfs.c 39.7 KB