2009-11-05 02:12:35 +03:00
/*
* Copyright ( C ) 1995 - 1997 Olaf Kirch < okir @ monad . swb . de >
*/
# ifndef LINUX_NFSD_VFS_H
# define LINUX_NFSD_VFS_H
2009-12-05 03:36:06 +03:00
# include "nfsfh.h"
2009-11-05 02:12:35 +03:00
/*
* Flags for nfsd_permission
*/
2011-08-25 22:23:39 +04:00
# define NFSD_MAY_NOP 0
# define NFSD_MAY_EXEC 0x001 /* == MAY_EXEC */
# define NFSD_MAY_WRITE 0x002 /* == MAY_WRITE */
# define NFSD_MAY_READ 0x004 /* == MAY_READ */
# define NFSD_MAY_SATTR 0x008
# define NFSD_MAY_TRUNC 0x010
# define NFSD_MAY_LOCK 0x020
# define NFSD_MAY_MASK 0x03f
2011-04-10 18:35:12 +04:00
/* extra hints to permission and open routines: */
2011-08-25 22:23:39 +04:00
# define NFSD_MAY_OWNER_OVERRIDE 0x040
# define NFSD_MAY_LOCAL_ACCESS 0x080 /* for device special files */
# define NFSD_MAY_BYPASS_GSS_ON_ROOT 0x100
# define NFSD_MAY_NOT_BREAK_LEASE 0x200
# define NFSD_MAY_BYPASS_GSS 0x400
# define NFSD_MAY_READ_IF_EXEC 0x800
2009-11-05 02:12:35 +03:00
# define NFSD_MAY_CREATE (NFSD_MAY_EXEC|NFSD_MAY_WRITE)
# define NFSD_MAY_REMOVE (NFSD_MAY_EXEC|NFSD_MAY_WRITE|NFSD_MAY_TRUNC)
/*
* Callback function for readdir
*/
typedef int ( * nfsd_dirop_t ) ( struct inode * , struct dentry * , int , int ) ;
/* nfsd/vfs.c */
int fh_lock_parent ( struct svc_fh * , struct dentry * ) ;
int nfsd_racache_init ( int ) ;
void nfsd_racache_shutdown ( void ) ;
int nfsd_cross_mnt ( struct svc_rqst * rqstp , struct dentry * * dpp ,
struct svc_export * * expp ) ;
__be32 nfsd_lookup ( struct svc_rqst * , struct svc_fh * ,
const char * , unsigned int , struct svc_fh * ) ;
__be32 nfsd_lookup_dentry ( struct svc_rqst * , struct svc_fh * ,
const char * , unsigned int ,
struct svc_export * * , struct dentry * * ) ;
__be32 nfsd_setattr ( struct svc_rqst * , struct svc_fh * ,
struct iattr * , int , time_t ) ;
2009-10-26 04:43:01 +03:00
int nfsd_mountpoint ( struct dentry * , struct svc_export * ) ;
2009-11-05 02:12:35 +03:00
# ifdef CONFIG_NFSD_V4
__be32 nfsd4_set_nfs4_acl ( struct svc_rqst * , struct svc_fh * ,
struct nfs4_acl * ) ;
int nfsd4_get_nfs4_acl ( struct svc_rqst * , struct dentry * , struct nfs4_acl * * ) ;
# endif /* CONFIG_NFSD_V4 */
__be32 nfsd_create ( struct svc_rqst * , struct svc_fh * ,
char * name , int len , struct iattr * attrs ,
int type , dev_t rdev , struct svc_fh * res ) ;
# ifdef CONFIG_NFSD_V3
__be32 nfsd_access ( struct svc_rqst * , struct svc_fh * , u32 * , u32 * ) ;
2011-04-20 13:06:25 +04:00
__be32 do_nfsd_create ( struct svc_rqst * , struct svc_fh * ,
2009-11-05 02:12:35 +03:00
char * name , int len , struct iattr * attrs ,
struct svc_fh * res , int createmode ,
2011-10-13 19:37:11 +04:00
u32 * verifier , bool * truncp , bool * created ) ;
2009-11-05 02:12:35 +03:00
__be32 nfsd_commit ( struct svc_rqst * , struct svc_fh * ,
loff_t , unsigned long ) ;
# endif /* CONFIG_NFSD_V3 */
__be32 nfsd_open ( struct svc_rqst * , struct svc_fh * , int ,
int , struct file * * ) ;
void nfsd_close ( struct file * ) ;
2010-07-30 19:33:32 +04:00
__be32 nfsd_read ( struct svc_rqst * , struct svc_fh * ,
loff_t , struct kvec * , int , unsigned long * ) ;
__be32 nfsd_read_file ( struct svc_rqst * , struct svc_fh * , struct file * ,
2009-11-05 02:12:35 +03:00
loff_t , struct kvec * , int , unsigned long * ) ;
__be32 nfsd_write ( struct svc_rqst * , struct svc_fh * , struct file * ,
loff_t , struct kvec * , int , unsigned long * , int * ) ;
__be32 nfsd_readlink ( struct svc_rqst * , struct svc_fh * ,
char * , int * ) ;
__be32 nfsd_symlink ( struct svc_rqst * , struct svc_fh * ,
char * name , int len , char * path , int plen ,
struct svc_fh * res , struct iattr * ) ;
__be32 nfsd_link ( struct svc_rqst * , struct svc_fh * ,
char * , int , struct svc_fh * ) ;
__be32 nfsd_rename ( struct svc_rqst * ,
struct svc_fh * , char * , int ,
struct svc_fh * , char * , int ) ;
__be32 nfsd_remove ( struct svc_rqst * ,
struct svc_fh * , char * , int ) ;
__be32 nfsd_unlink ( struct svc_rqst * , struct svc_fh * , int type ,
char * name , int len ) ;
int nfsd_truncate ( struct svc_rqst * , struct svc_fh * ,
unsigned long size ) ;
__be32 nfsd_readdir ( struct svc_rqst * , struct svc_fh * ,
loff_t * , struct readdir_cd * , filldir_t ) ;
__be32 nfsd_statfs ( struct svc_rqst * , struct svc_fh * ,
struct kstatfs * , int access ) ;
int nfsd_notify_change ( struct inode * , struct iattr * ) ;
__be32 nfsd_permission ( struct svc_rqst * , struct svc_export * ,
struct dentry * , int ) ;
int nfsd_sync_dir ( struct dentry * dp ) ;
# if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
struct posix_acl * nfsd_get_posix_acl ( struct svc_fh * , int ) ;
int nfsd_set_posix_acl ( struct svc_fh * , int , struct posix_acl * ) ;
# endif
# endif /* LINUX_NFSD_VFS_H */