• Fred Isaman's avatar
    pnfs: fix pnfs lock inversion of i_lock and cl_lock · f49f9baa
    Fred Isaman authored
    The pnfs code was using throughout the lock order i_lock, cl_lock.
    This conflicts with the nfs delegation code.  Rework the pnfs code
    to avoid taking both locks simultaneously.
    
    Currently the code takes the double lock to add/remove the layout to a
    nfs_client list, while atomically checking that the list of lsegs is
    empty.  To avoid this, we rely on existing serializations.  When a
    layout is initialized with lseg count equal zero, LAYOUTGET's
    openstateid serialization is in effect, making it safe to assume it
    stays zero unless we change it.  And once a layout's lseg count drops
    to zero, it is set as DESTROYED and so will stay at zero.
    Signed-off-by: default avatarFred Isaman <iisaman@netapp.com>
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    f49f9baa
callback_proc.c 13.3 KB