• Anna Schumaker's avatar
    nfs: Fetch MOUNTED_ON_FILEID when updating an inode · ea96d1ec
    Anna Schumaker authored
    2ef47eb1 (NFS: Fix use of nfs_attr_use_mounted_on_fileid()) was a good
    start to fixing a circular directory structure warning for NFS v4
    "junctioned" mountpoints.  Unfortunately, further testing continued to
    generate this error.
    
    My server is configured like this:
    
    anna@nfsd ~ % df
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vda1       9.1G  2.0G  6.5G  24% /
    /dev/vdc1      1014M   33M  982M   4% /exports
    /dev/vdc2      1014M   33M  982M   4% /exports/vol1
    /dev/vdc3      1014M   33M  982M   4% /exports/vol1/vol2
    
    anna@nfsd ~ % cat /etc/exports
    /exports/          *(rw,async,no_subtree_check,no_root_squash)
    /exports/vol1/     *(rw,async,no_subtree_check,no_root_squash)
    /exports/vol1/vol2 *(rw,async,no_subtree_check,no_root_squash)
    
    I've been running chown across the entire mountpoint twice in a row to
    hit this problem.  The first run succeeds, but the second one fails with
    the circular directory warning along with:
    
    anna@client ~ % dmesg
    [Apr 3 14:28] NFS: server 192.168.100.204 error: fileid changed
                  fsid 0:39: expected fileid 0x100080, got 0x80
    
    WHere 0x80 is the mountpoint's fileid and 0x100080 is the mounted-on
    fileid.
    
    This patch fixes the issue by requesting an updated mounted-on fileid
    from the server during nfs_update_inode(), and then checking that the
    fileid stored in the nfs_inode matches either the fileid or mounted-on
    fileid returned by the server.
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
    ea96d1ec
inode.c 56.4 KB