82 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * include/linux/nfs_ssc.h4 *5 * Author: Dai Ngo <dai.ngo@oracle.com>6 *7 * Copyright (c) 2020, Oracle and/or its affiliates.8 */9 10#include <linux/nfs_fs.h>11#include <linux/sunrpc/svc.h>12 13extern struct nfs_ssc_client_ops_tbl nfs_ssc_client_tbl;14 15/*16 * NFS_V417 */18struct nfs4_ssc_client_ops {19 struct file *(*sco_open)(struct vfsmount *ss_mnt,20 struct nfs_fh *src_fh, nfs4_stateid *stateid);21 void (*sco_close)(struct file *filep);22};23 24/*25 * NFS_FS26 */27struct nfs_ssc_client_ops {28 void (*sco_sb_deactive)(struct super_block *sb);29};30 31struct nfs_ssc_client_ops_tbl {32 const struct nfs4_ssc_client_ops *ssc_nfs4_ops;33 const struct nfs_ssc_client_ops *ssc_nfs_ops;34};35 36extern void nfs42_ssc_register_ops(void);37extern void nfs42_ssc_unregister_ops(void);38 39extern void nfs42_ssc_register(const struct nfs4_ssc_client_ops *ops);40extern void nfs42_ssc_unregister(const struct nfs4_ssc_client_ops *ops);41 42#ifdef CONFIG_NFSD_V4_2_INTER_SSC43static inline struct file *nfs42_ssc_open(struct vfsmount *ss_mnt,44 struct nfs_fh *src_fh, nfs4_stateid *stateid)45{46 if (nfs_ssc_client_tbl.ssc_nfs4_ops)47 return (*nfs_ssc_client_tbl.ssc_nfs4_ops->sco_open)(ss_mnt, src_fh, stateid);48 return ERR_PTR(-EIO);49}50 51static inline void nfs42_ssc_close(struct file *filep)52{53 if (nfs_ssc_client_tbl.ssc_nfs4_ops)54 (*nfs_ssc_client_tbl.ssc_nfs4_ops->sco_close)(filep);55}56#endif57 58struct nfsd4_ssc_umount_item {59 struct list_head nsui_list;60 bool nsui_busy;61 /*62 * nsui_refcnt inited to 2, 1 on list and 1 for consumer. Entry63 * is removed when refcnt drops to 1 and nsui_expire expires.64 */65 refcount_t nsui_refcnt;66 unsigned long nsui_expire;67 struct vfsmount *nsui_vfsmount;68 char nsui_ipaddr[RPC_MAX_ADDRBUFLEN + 1];69};70 71/*72 * NFS_FS73 */74extern void nfs_ssc_register(const struct nfs_ssc_client_ops *ops);75extern void nfs_ssc_unregister(const struct nfs_ssc_client_ops *ops);76 77static inline void nfs_do_sb_deactive(struct super_block *sb)78{79 if (nfs_ssc_client_tbl.ssc_nfs_ops)80 (*nfs_ssc_client_tbl.ssc_nfs_ops->sco_sb_deactive)(sb);81}82