2005-04-17 02:20:36 +04:00
# ifndef __UM_FS_HOSTFS
# define __UM_FS_HOSTFS
2012-10-08 06:27:32 +04:00
# include <os.h>
2005-04-17 02:20:36 +04:00
2007-10-16 12:27:13 +04:00
/*
* These are exactly the same definitions as in fs . h , but the names are
2005-04-17 02:20:36 +04:00
* changed so that this file can be included in both kernel and user files .
*/
# define HOSTFS_ATTR_MODE 1
# define HOSTFS_ATTR_UID 2
# define HOSTFS_ATTR_GID 4
# define HOSTFS_ATTR_SIZE 8
# define HOSTFS_ATTR_ATIME 16
# define HOSTFS_ATTR_MTIME 32
# define HOSTFS_ATTR_CTIME 64
# define HOSTFS_ATTR_ATIME_SET 128
# define HOSTFS_ATTR_MTIME_SET 256
/* These two are unused by hostfs. */
# define HOSTFS_ATTR_FORCE 512 /* Not a change, but a change it */
# define HOSTFS_ATTR_ATTR_FLAG 1024
2007-10-16 12:27:13 +04:00
/*
* If you are very careful , you ' ll notice that these two are missing :
2005-04-17 02:20:36 +04:00
*
* # define ATTR_KILL_SUID 2048
* # define ATTR_KILL_SGID 4096
*
2010-10-18 13:03:14 +04:00
* and this is because they were added in 2.5 development .
2005-04-17 02:20:36 +04:00
* Actually , they are not needed by most - > setattr ( ) methods - they are set by
* callers of notify_change ( ) to notify that the setuid / setgid bits must be
* dropped .
* notify_change ( ) will delete those flags , make sure attr - > ia_valid & ATTR_MODE
* is on , and remove the appropriate bits from attr - > ia_mode ( attr is a
* " struct iattr * " ) . - BlaisorBlade
*/
struct hostfs_iattr {
unsigned int ia_valid ;
2011-07-26 12:48:59 +04:00
unsigned short ia_mode ;
2005-04-17 02:20:36 +04:00
uid_t ia_uid ;
gid_t ia_gid ;
loff_t ia_size ;
struct timespec ia_atime ;
struct timespec ia_mtime ;
struct timespec ia_ctime ;
} ;
2010-06-07 04:08:56 +04:00
struct hostfs_stat {
unsigned long long ino ;
unsigned int mode ;
unsigned int nlink ;
unsigned int uid ;
unsigned int gid ;
unsigned long long size ;
struct timespec atime , mtime , ctime ;
unsigned int blksize ;
unsigned long long blocks ;
unsigned int maj ;
unsigned int min ;
} ;
extern int stat_file ( const char * path , struct hostfs_stat * p , int fd ) ;
2005-04-17 02:20:36 +04:00
extern int access_file ( char * path , int r , int w , int x ) ;
extern int open_file ( char * path , int r , int w , int append ) ;
extern void * open_dir ( char * path , int * err_out ) ;
2015-03-24 17:47:38 +03:00
extern void seek_dir ( void * stream , unsigned long long pos ) ;
extern char * read_dir ( void * stream , unsigned long long * pos_out ,
2012-01-27 22:14:58 +04:00
unsigned long long * ino_out , int * len_out ,
unsigned int * type_out ) ;
2005-04-17 02:20:36 +04:00
extern void close_file ( void * stream ) ;
2010-06-07 07:49:18 +04:00
extern int replace_file ( int oldfd , int fd ) ;
2005-04-17 02:20:36 +04:00
extern void close_dir ( void * stream ) ;
extern int read_file ( int fd , unsigned long long * offset , char * buf , int len ) ;
extern int write_file ( int fd , unsigned long long * offset , const char * buf ,
int len ) ;
extern int lseek_file ( int fd , long long offset , int whence ) ;
2005-07-29 08:16:15 +04:00
extern int fsync_file ( int fd , int datasync ) ;
2015-03-05 01:44:54 +03:00
extern int file_create ( char * name , int mode ) ;
2007-05-08 11:23:16 +04:00
extern int set_attr ( const char * file , struct hostfs_iattr * attrs , int fd ) ;
2005-04-17 02:20:36 +04:00
extern int make_symlink ( const char * from , const char * to ) ;
extern int unlink_file ( const char * file ) ;
extern int do_mkdir ( const char * file , int mode ) ;
extern int do_rmdir ( const char * file ) ;
2007-10-16 12:27:13 +04:00
extern int do_mknod ( const char * file , int mode , unsigned int major ,
unsigned int minor ) ;
2005-04-17 02:20:36 +04:00
extern int link_file ( const char * from , const char * to ) ;
2008-11-20 02:36:46 +03:00
extern int hostfs_do_readlink ( char * file , char * buf , int size ) ;
2005-04-17 02:20:36 +04:00
extern int rename_file ( char * from , char * to ) ;
2014-07-23 17:15:35 +04:00
extern int rename2_file ( char * from , char * to , unsigned int flags ) ;
2005-04-17 02:20:36 +04:00
extern int do_statfs ( char * root , long * bsize_out , long long * blocks_out ,
long long * bfree_out , long long * bavail_out ,
long long * files_out , long long * ffree_out ,
2010-10-27 01:21:18 +04:00
void * fsid_out , int fsid_size , long * namelen_out ) ;
2005-04-17 02:20:36 +04:00
# endif