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 16struct nfs_ssc_client_ops_tbl nfs_ssc_client_tbl; 17EXPORT_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 */ 27void nfs42_ssc_register(const struct nfs4_ssc_client_ops *ops) 28{ 29 nfs_ssc_client_tbl.ssc_nfs4_ops = ops; 30} 31EXPORT_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 */ 41void 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} 48EXPORT_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 */ 59void nfs_ssc_register(const struct nfs_ssc_client_ops *ops) 60{ 61 nfs_ssc_client_tbl.ssc_nfs_ops = ops; 62} 63EXPORT_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 */ 73void 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} 79EXPORT_SYMBOL_GPL(nfs_ssc_unregister); 80 81#else 82void nfs_ssc_register(const struct nfs_ssc_client_ops *ops) 83{ 84} 85EXPORT_SYMBOL_GPL(nfs_ssc_register); 86 87void nfs_ssc_unregister(const struct nfs_ssc_client_ops *ops) 88{ 89} 90EXPORT_SYMBOL_GPL(nfs_ssc_unregister); 91#endif /* CONFIG_NFS_V4_2 */ 92