Save each FSID's root directory file handle in the export's local nfs_server structure on the client. This FH can then be used as the end case for the recursive walkback during VFH recovery. This was originally written by Chuck Lever so that the FH can be used for migration recovery logic. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Matthew Treinish <treinish@xxxxxxxxxxxxxxxxxx> --- fs/nfs/client.c | 1 + fs/nfs/getroot.c | 7 +++++++ include/linux/nfs_fs_sb.h | 1 + 3 files changed, 9 insertions(+), 0 deletions(-) diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 2f96f9d..7566325 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -1137,6 +1137,7 @@ void nfs_free_server(struct nfs_server *server) ida_destroy(&server->lockowner_id); ida_destroy(&server->openowner_id); nfs_free_iostats(server->io_stats); + nfs_free_fhandle(server->rootfh); bdi_destroy(&server->backing_dev_info); kfree(server); nfs_release_automount_timer(); diff --git a/fs/nfs/getroot.c b/fs/nfs/getroot.c index dcb6154..51ca63b 100644 --- a/fs/nfs/getroot.c +++ b/fs/nfs/getroot.c @@ -232,6 +232,13 @@ struct dentry *nfs4_get_root(struct super_block *sb, struct nfs_fh *mntfh, ret = ERR_CAST(inode); goto out; } + server->rootfh = nfs_alloc_fhandle(); + if (server->rootfh == NULL) { + dprintk("nfs_get_root: alloc rootfh failed\n"); + ret = ERR_PTR(-ENOMEM); + goto out; + } + nfs_copy_fh(server->rootfh, mntfh); error = nfs_superblock_set_dummy_root(sb, inode); if (error != 0) { diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 15a2056..5993319 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h @@ -160,6 +160,7 @@ struct nfs_server { struct list_head layouts; struct list_head delegations; void (*destroy)(struct nfs_server *); + struct nfs_fh *rootfh; atomic_t active; /* Keep trace of any activity to this server */ -- 1.7.4.4 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html