1*38c8a9a5SSteve French // SPDX-License-Identifier: LGPL-2.1 2*38c8a9a5SSteve French /* 3*38c8a9a5SSteve French * 4*38c8a9a5SSteve French * Copyright (C) International Business Machines Corp., 2007 5*38c8a9a5SSteve French * Author(s): Steve French (sfrench@us.ibm.com) 6*38c8a9a5SSteve French * 7*38c8a9a5SSteve French * Common Internet FileSystem (CIFS) client 8*38c8a9a5SSteve French * 9*38c8a9a5SSteve French * Operations related to support for exporting files via NFSD 10*38c8a9a5SSteve French * 11*38c8a9a5SSteve French */ 12*38c8a9a5SSteve French 13*38c8a9a5SSteve French /* 14*38c8a9a5SSteve French * See Documentation/filesystems/nfs/exporting.rst 15*38c8a9a5SSteve French * and examples in fs/exportfs 16*38c8a9a5SSteve French * 17*38c8a9a5SSteve French * Since cifs is a network file system, an "fsid" must be included for 18*38c8a9a5SSteve French * any nfs exports file entries which refer to cifs paths. In addition 19*38c8a9a5SSteve French * the cifs mount must be mounted with the "serverino" option (ie use stable 20*38c8a9a5SSteve French * server inode numbers instead of locally generated temporary ones). 21*38c8a9a5SSteve French * Although cifs inodes do not use generation numbers (have generation number 22*38c8a9a5SSteve French * of zero) - the inode number alone should be good enough for simple cases 23*38c8a9a5SSteve French * in which users want to export cifs shares with NFS. The decode and encode 24*38c8a9a5SSteve French * could be improved by using a new routine which expects 64 bit inode numbers 25*38c8a9a5SSteve French * instead of the default 32 bit routines in fs/exportfs 26*38c8a9a5SSteve French * 27*38c8a9a5SSteve French */ 28*38c8a9a5SSteve French 29*38c8a9a5SSteve French #include <linux/fs.h> 30*38c8a9a5SSteve French #include <linux/exportfs.h> 31*38c8a9a5SSteve French #include "cifsglob.h" 32*38c8a9a5SSteve French #include "cifs_debug.h" 33*38c8a9a5SSteve French #include "cifsfs.h" 34*38c8a9a5SSteve French 35*38c8a9a5SSteve French #ifdef CONFIG_CIFS_NFSD_EXPORT cifs_get_parent(struct dentry * dentry)36*38c8a9a5SSteve Frenchstatic struct dentry *cifs_get_parent(struct dentry *dentry) 37*38c8a9a5SSteve French { 38*38c8a9a5SSteve French /* BB need to add code here eventually to enable export via NFSD */ 39*38c8a9a5SSteve French cifs_dbg(FYI, "get parent for %p\n", dentry); 40*38c8a9a5SSteve French return ERR_PTR(-EACCES); 41*38c8a9a5SSteve French } 42*38c8a9a5SSteve French 43*38c8a9a5SSteve French const struct export_operations cifs_export_ops = { 44*38c8a9a5SSteve French .get_parent = cifs_get_parent, 45*38c8a9a5SSteve French /* Following five export operations are unneeded so far and can default: 46*38c8a9a5SSteve French .get_dentry = 47*38c8a9a5SSteve French .get_name = 48*38c8a9a5SSteve French .find_exported_dentry = 49*38c8a9a5SSteve French .decode_fh = 50*38c8a9a5SSteve French .encode_fs = */ 51*38c8a9a5SSteve French }; 52*38c8a9a5SSteve French 53*38c8a9a5SSteve French #endif /* CONFIG_CIFS_NFSD_EXPORT */ 54*38c8a9a5SSteve French 55