1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Helper for knfsd's SSC to access ops in NFS client modules 4 * 5 * Author: Dai Ngo <dai.ngo@oracle.com> 6 * 7 * Copyright (c) 2020, Oracle and/or its affiliates. 8 */ 9 10 #include <linux/module.h> 11 #include <linux/fs.h> 12 #include <linux/nfs_ssc.h> 13 #include "../nfs/nfs4_fs.h" 14 15 16 struct nfs_ssc_client_ops_tbl nfs_ssc_client_tbl; 17 EXPORT_SYMBOL_GPL(nfs_ssc_client_tbl); 18 19 #ifdef CONFIG_NFS_V4_2 20 /** 21 * nfs42_ssc_register - install the NFS_V4 client ops in the nfs_ssc_client_tbl 22 * @ops: NFS_V4 ops to be installed 23 * 24 * Return values: 25 * None 26 */ 27 void nfs42_ssc_register(const struct nfs4_ssc_client_ops *ops) 28 { 29 nfs_ssc_client_tbl.ssc_nfs4_ops = ops; 30 } 31 EXPORT_SYMBOL_GPL(nfs42_ssc_register); 32 33 /** 34 * nfs42_ssc_unregister - uninstall the NFS_V4 client ops from 35 * the nfs_ssc_client_tbl 36 * @ops: ops to be uninstalled 37 * 38 * Return values: 39 * None 40 */ 41 void nfs42_ssc_unregister(const struct nfs4_ssc_client_ops *ops) 42 { 43 if (nfs_ssc_client_tbl.ssc_nfs4_ops != ops) 44 return; 45 46 nfs_ssc_client_tbl.ssc_nfs4_ops = NULL; 47 } 48 EXPORT_SYMBOL_GPL(nfs42_ssc_unregister); 49 #endif /* CONFIG_NFS_V4_2 */ 50 51 #ifdef CONFIG_NFS_V4_2 52 /** 53 * nfs_ssc_register - install the NFS_FS client ops in the nfs_ssc_client_tbl 54 * @ops: NFS_FS ops to be installed 55 * 56 * Return values: 57 * None 58 */ 59 void nfs_ssc_register(const struct nfs_ssc_client_ops *ops) 60 { 61 nfs_ssc_client_tbl.ssc_nfs_ops = ops; 62 } 63 EXPORT_SYMBOL_GPL(nfs_ssc_register); 64 65 /** 66 * nfs_ssc_unregister - uninstall the NFS_FS client ops from 67 * the nfs_ssc_client_tbl 68 * @ops: ops to be uninstalled 69 * 70 * Return values: 71 * None 72 */ 73 void nfs_ssc_unregister(const struct nfs_ssc_client_ops *ops) 74 { 75 if (nfs_ssc_client_tbl.ssc_nfs_ops != ops) 76 return; 77 nfs_ssc_client_tbl.ssc_nfs_ops = NULL; 78 } 79 EXPORT_SYMBOL_GPL(nfs_ssc_unregister); 80 81 #else 82 void nfs_ssc_register(const struct nfs_ssc_client_ops *ops) 83 { 84 } 85 EXPORT_SYMBOL_GPL(nfs_ssc_register); 86 87 void nfs_ssc_unregister(const struct nfs_ssc_client_ops *ops) 88 { 89 } 90 EXPORT_SYMBOL_GPL(nfs_ssc_unregister); 91 #endif /* CONFIG_NFS_V4_2 */ 92