• T
    NFSv4.1: Fix umount when filelayout DS is also the MDS · 2a4c8994
    Trond Myklebust 提交于
    Currently there is a 'chicken and egg' issue when the DS is also the mounted
    MDS. The nfs_match_client() reference from nfs4_set_ds_client bumps the
    cl_count, the nfs_client is not freed at umount, and nfs4_deviceid_purge_client
    is not called to dereference the MDS usage of a deviceid which holds a
    reference to the DS nfs_client.  The result is the umount program returns,
    but the nfs_client is not freed, and the cl_session hearbeat continues.
    
    The MDS (and all other nfs mounts) lose their last nfs_client reference in
    nfs_free_server when the last nfs_server (fsid) is umounted.
    The file layout DS lose their last nfs_client reference in destroy_ds
    when the last deviceid referencing the data server is put and destroy_ds is
    called. This is triggered by a call to nfs4_deviceid_purge_client which
    removes references to a pNFS deviceid used by an MDS mount.
    
    The fix is to track how many pnfs enabled filesystems are mounted from
    this server, and then to purge the device id cache once that count reaches
    zero.
    Reported-by: NJorge Mora <Jorge.Mora@netapp.com>
    Reported-by: NAndy Adamson <andros@netapp.com>
    Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
    2a4c8994
nfs_fs_sb.h 7.7 KB