aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r--fs/nfs/nfs4proc.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index efa6ae822ca..af32d3df054 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -5834,6 +5834,54 @@ int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp)
5834 return status; 5834 return status;
5835} 5835}
5836 5836
5837/*
5838 * Retrieve the list of Data Server devices from the MDS.
5839 */
5840static int _nfs4_getdevicelist(struct nfs_server *server,
5841 const struct nfs_fh *fh,
5842 struct pnfs_devicelist *devlist)
5843{
5844 struct nfs4_getdevicelist_args args = {
5845 .fh = fh,
5846 .layoutclass = server->pnfs_curr_ld->id,
5847 };
5848 struct nfs4_getdevicelist_res res = {
5849 .devlist = devlist,
5850 };
5851 struct rpc_message msg = {
5852 .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_GETDEVICELIST],
5853 .rpc_argp = &args,
5854 .rpc_resp = &res,
5855 };
5856 int status;
5857
5858 dprintk("--> %s\n", __func__);
5859 status = nfs4_call_sync(server->client, server, &msg, &args.seq_args,
5860 &res.seq_res, 0);
5861 dprintk("<-- %s status=%d\n", __func__, status);
5862 return status;
5863}
5864
5865int nfs4_proc_getdevicelist(struct nfs_server *server,
5866 const struct nfs_fh *fh,
5867 struct pnfs_devicelist *devlist)
5868{
5869 struct nfs4_exception exception = { };
5870 int err;
5871
5872 do {
5873 err = nfs4_handle_exception(server,
5874 _nfs4_getdevicelist(server, fh, devlist),
5875 &exception);
5876 } while (exception.retry);
5877
5878 dprintk("%s: err=%d, num_devs=%u\n", __func__,
5879 err, devlist->num_devs);
5880
5881 return err;
5882}
5883EXPORT_SYMBOL_GPL(nfs4_proc_getdevicelist);
5884
5837static int 5885static int
5838_nfs4_proc_getdeviceinfo(struct nfs_server *server, struct pnfs_device *pdev) 5886_nfs4_proc_getdeviceinfo(struct nfs_server *server, struct pnfs_device *pdev)
5839{ 5887{