@ -236,7 +236,7 @@ static size_t v9fs_string_size(V9fsString *str)
/*
* returns 0 if fid got re - opened , 1 if not , < 0 on error */
static int v9fs_reopen_fid ( V9fsPDU * pdu , V9fsFidState * f )
static int coroutine_fn v9fs_reopen_fid ( V9fsPDU * pdu , V9fsFidState * f )
{
int err = 1 ;
if ( f - > fid_type = = P9_FID_FILE ) {
@ -255,7 +255,7 @@ static int v9fs_reopen_fid(V9fsPDU *pdu, V9fsFidState *f)
return err ;
}
static V9fsFidState * get_fid ( V9fsPDU * pdu , int32_t fid )
static V9fsFidState * coroutine_fn get_fid ( V9fsPDU * pdu , int32_t fid )
{
int err ;
V9fsFidState * f ;
@ -321,7 +321,7 @@ static V9fsFidState *alloc_fid(V9fsState *s, int32_t fid)
return f ;
}
static int v9fs_xattr_fid_clunk ( V9fsPDU * pdu , V9fsFidState * fidp )
static int coroutine_fn v9fs_xattr_fid_clunk ( V9fsPDU * pdu , V9fsFidState * fidp )
{
int retval = 0 ;
@ -353,7 +353,7 @@ free_value:
return retval ;
}
static int free_fid ( V9fsPDU * pdu , V9fsFidState * fidp )
static int coroutine_fn free_fid ( V9fsPDU * pdu , V9fsFidState * fidp )
{
int retval = 0 ;
@ -374,7 +374,7 @@ static int free_fid(V9fsPDU *pdu, V9fsFidState *fidp)
return retval ;
}
static int put_fid ( V9fsPDU * pdu , V9fsFidState * fidp )
static int coroutine_fn put_fid ( V9fsPDU * pdu , V9fsFidState * fidp )
{
BUG_ON ( ! fidp - > ref ) ;
fidp - > ref - - ;
@ -418,7 +418,7 @@ static V9fsFidState *clunk_fid(V9fsState *s, int32_t fid)
return fidp ;
}
void v9fs_reclaim_fd ( V9fsPDU * pdu )
void coroutine_fn v9fs_reclaim_fd ( V9fsPDU * pdu )
{
int reclaim_count = 0 ;
V9fsState * s = pdu - > s ;
@ -499,7 +499,7 @@ void v9fs_reclaim_fd(V9fsPDU *pdu)
}
}
static int v9fs_mark_fids_unreclaim ( V9fsPDU * pdu , V9fsPath * path )
static int coroutine_fn v9fs_mark_fids_unreclaim ( V9fsPDU * pdu , V9fsPath * path )
{
int err ;
V9fsState * s = pdu - > s ;
@ -532,7 +532,7 @@ static int v9fs_mark_fids_unreclaim(V9fsPDU *pdu, V9fsPath *path)
return 0 ;
}
static void virtfs_reset ( V9fsPDU * pdu )
static void coroutine_fn virtfs_reset ( V9fsPDU * pdu )
{
V9fsState * s = pdu - > s ;
V9fsFidState * fidp = NULL ;
@ -598,7 +598,8 @@ static void stat_to_qid(const struct stat *stbuf, V9fsQID *qidp)
}
}
static int fid_to_qid ( V9fsPDU * pdu , V9fsFidState * fidp , V9fsQID * qidp )
static int coroutine_fn fid_to_qid ( V9fsPDU * pdu , V9fsFidState * fidp ,
V9fsQID * qidp )
{
struct stat stbuf ;
int err ;
@ -643,7 +644,7 @@ void pdu_free(V9fsPDU *pdu)
* because we always expect to have enough space to encode
* error details
*/
static void pdu_complete ( V9fsPDU * pdu , ssize_t len )
static void coroutine_fn pdu_complete ( V9fsPDU * pdu , ssize_t len )
{
int8_t id = pdu - > id + 1 ; /* Response */
V9fsState * s = pdu - > s ;
@ -810,9 +811,9 @@ static uint32_t stat_to_v9mode(const struct stat *stbuf)
return mode ;
}
static int stat_to_v9stat ( V9fsPDU * pdu , V9fsPath * name ,
const struct stat * stbuf ,
V9fsStat * v9stat )
static int coroutine_fn stat_to_v9stat ( V9fsPDU * pdu , V9fsPath * name ,
const struct stat * stbuf ,
V9fsStat * v9stat )
{
int err ;
const char * str ;
@ -941,7 +942,7 @@ static inline bool is_ro_export(FsContext *ctx)
return ctx - > export_flags & V9FS_RDONLY ;
}
static void v9fs_version ( void * opaque )
static void coroutine_fn v9fs_version ( void * opaque )
{
ssize_t err ;
V9fsPDU * pdu = opaque ;
@ -979,7 +980,7 @@ out:
v9fs_string_free ( & version ) ;
}
static void v9fs_attach ( void * opaque )
static void coroutine_fn v9fs_attach ( void * opaque )
{
V9fsPDU * pdu = opaque ;
V9fsState * s = pdu - > s ;
@ -1045,7 +1046,7 @@ out_nofid:
v9fs_string_free ( & aname ) ;
}
static void v9fs_stat ( void * opaque )
static void coroutine_fn v9fs_stat ( void * opaque )
{
int32_t fid ;
V9fsStat v9stat ;
@ -1089,7 +1090,7 @@ out_nofid:
pdu_complete ( pdu , err ) ;
}
static void v9fs_getattr ( void * opaque )
static void coroutine_fn v9fs_getattr ( void * opaque )
{
int32_t fid ;
size_t offset = 7 ;
@ -1165,7 +1166,7 @@ out_nofid:
# define P9_ATTR_MASK 127
static void v9fs_setattr ( void * opaque )
static void coroutine_fn v9fs_setattr ( void * opaque )
{
int err = 0 ;
int32_t fid ;
@ -1283,7 +1284,7 @@ static bool not_same_qid(const V9fsQID *qid1, const V9fsQID *qid2)
qid1 - > path ! = qid2 - > path ;
}
static void v9fs_walk ( void * opaque )
static void coroutine_fn v9fs_walk ( void * opaque )
{
int name_idx ;
V9fsQID * qids = NULL ;
@ -1397,7 +1398,7 @@ out_nofid:
}
}
static int32_t get_iounit ( V9fsPDU * pdu , V9fsPath * path )
static int32_t coroutine_fn get_iounit ( V9fsPDU * pdu , V9fsPath * path )
{
struct statfs stbuf ;
int32_t iounit = 0 ;
@ -1417,7 +1418,7 @@ static int32_t get_iounit(V9fsPDU *pdu, V9fsPath *path)
return iounit ;
}
static void v9fs_open ( void * opaque )
static void coroutine_fn v9fs_open ( void * opaque )
{
int flags ;
int32_t fid ;
@ -1507,7 +1508,7 @@ out_nofid:
pdu_complete ( pdu , err ) ;
}
static void v9fs_lcreate ( void * opaque )
static void coroutine_fn v9fs_lcreate ( void * opaque )
{
int32_t dfid , flags , mode ;
gid_t gid ;
@ -1604,7 +1605,7 @@ out_nofid:
pdu_complete ( pdu , err ) ;
}
static void v9fs_clunk ( void * opaque )
static void coroutine_fn v9fs_clunk ( void * opaque )
{
int err ;
int32_t fid ;
@ -1673,8 +1674,9 @@ static int v9fs_xattr_read(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp,
return offset ;
}
static int v9fs_do_readdir_with_stat ( V9fsPDU * pdu ,
V9fsFidState * fidp , uint32_t max_count )
static int coroutine_fn v9fs_do_readdir_with_stat ( V9fsPDU * pdu ,
V9fsFidState * fidp ,
uint32_t max_count )
{
V9fsPath path ;
V9fsStat v9stat ;
@ -1764,7 +1766,7 @@ static void v9fs_init_qiov_from_pdu(QEMUIOVector *qiov, V9fsPDU *pdu,
qemu_iovec_concat ( qiov , & elem , skip , size ) ;
}
static void v9fs_read ( void * opaque )
static void coroutine_fn v9fs_read ( void * opaque )
{
int32_t fid ;
uint64_t off ;
@ -1858,8 +1860,8 @@ static size_t v9fs_readdir_data_size(V9fsString *name)
return 24 + v9fs_string_size ( name ) ;
}
static int v9fs_do_readdir ( V9fsPDU * pdu ,
V9fsFidState * fidp , int32_t max_count )
static int coroutine_fn v9fs_do_readdir ( V9fsPDU * pdu , V9fsFidState * fidp ,
int32_t max_count )
{
size_t size ;
V9fsQID qid ;
@ -1928,7 +1930,7 @@ static int v9fs_do_readdir(V9fsPDU *pdu,
return count ;
}
static void v9fs_readdir ( void * opaque )
static void coroutine_fn v9fs_readdir ( void * opaque )
{
int32_t fid ;
V9fsFidState * fidp ;
@ -2024,7 +2026,7 @@ out:
return err ;
}
static void v9fs_write ( void * opaque )
static void coroutine_fn v9fs_write ( void * opaque )
{
ssize_t err ;
int32_t fid ;
@ -2107,7 +2109,7 @@ out_nofid:
pdu_complete ( pdu , err ) ;
}
static void v9fs_create ( void * opaque )
static void coroutine_fn v9fs_create ( void * opaque )
{
int32_t fid ;
int err = 0 ;
@ -2287,7 +2289,7 @@ out_nofid:
v9fs_path_free ( & path ) ;
}
static void v9fs_symlink ( void * opaque )
static void coroutine_fn v9fs_symlink ( void * opaque )
{
V9fsPDU * pdu = opaque ;
V9fsString name ;
@ -2376,7 +2378,7 @@ static void v9fs_flush(void *opaque)
pdu_complete ( pdu , 7 ) ;
}
static void v9fs_link ( void * opaque )
static void coroutine_fn v9fs_link ( void * opaque )
{
V9fsPDU * pdu = opaque ;
int32_t dfid , oldfid ;
@ -2425,7 +2427,7 @@ out_nofid:
}
/* Only works with path name based fid */
static void v9fs_remove ( void * opaque )
static void coroutine_fn v9fs_remove ( void * opaque )
{
int32_t fid ;
int err = 0 ;
@ -2469,7 +2471,7 @@ out_nofid:
pdu_complete ( pdu , err ) ;
}
static void v9fs_unlinkat ( void * opaque )
static void coroutine_fn v9fs_unlinkat ( void * opaque )
{
int err = 0 ;
V9fsString name ;
@ -2532,8 +2534,9 @@ out_nofid:
/* Only works with path name based fid */
static int v9fs_complete_rename ( V9fsPDU * pdu , V9fsFidState * fidp ,
int32_t newdirfid , V9fsString * name )
static int coroutine_fn v9fs_complete_rename ( V9fsPDU * pdu , V9fsFidState * fidp ,
int32_t newdirfid ,
V9fsString * name )
{
char * end ;
int err = 0 ;
@ -2590,7 +2593,7 @@ out_nofid:
}
/* Only works with path name based fid */
static void v9fs_rename ( void * opaque )
static void coroutine_fn v9fs_rename ( void * opaque )
{
int32_t fid ;
ssize_t err = 0 ;
@ -2641,9 +2644,10 @@ out_nofid:
v9fs_string_free ( & name ) ;
}
static void v9fs_fix_fid_paths ( V9fsPDU * pdu , V9fsPath * olddir ,
V9fsString * old_name , V9fsPath * newdir ,
V9fsString * new_name )
static void coroutine_fn v9fs_fix_fid_paths ( V9fsPDU * pdu , V9fsPath * olddir ,
V9fsString * old_name ,
V9fsPath * newdir ,
V9fsString * new_name )
{
V9fsFidState * tfidp ;
V9fsPath oldpath , newpath ;
@ -2669,9 +2673,10 @@ static void v9fs_fix_fid_paths(V9fsPDU *pdu, V9fsPath *olddir,
v9fs_path_free ( & newpath ) ;
}
static int v9fs_complete_renameat ( V9fsPDU * pdu , int32_t olddirfid ,
V9fsString * old_name , int32_t newdirfid ,
V9fsString * new_name )
static int coroutine_fn v9fs_complete_renameat ( V9fsPDU * pdu , int32_t olddirfid ,
V9fsString * old_name ,
int32_t newdirfid ,
V9fsString * new_name )
{
int err = 0 ;
V9fsState * s = pdu - > s ;
@ -2712,7 +2717,7 @@ out:
return err ;
}
static void v9fs_renameat ( void * opaque )
static void coroutine_fn v9fs_renameat ( void * opaque )
{
ssize_t err = 0 ;
size_t offset = 7 ;
@ -2754,7 +2759,7 @@ out_err:
v9fs_string_free ( & new_name ) ;
}
static void v9fs_wstat ( void * opaque )
static void coroutine_fn v9fs_wstat ( void * opaque )
{
int32_t fid ;
int err = 0 ;
@ -2893,7 +2898,7 @@ static int v9fs_fill_statfs(V9fsState *s, V9fsPDU *pdu, struct statfs *stbuf)
fsid_val , f_namelen ) ;
}
static void v9fs_statfs ( void * opaque )
static void coroutine_fn v9fs_statfs ( void * opaque )
{
int32_t fid ;
ssize_t retval = 0 ;
@ -2927,7 +2932,7 @@ out_nofid:
pdu_complete ( pdu , retval ) ;
}
static void v9fs_mknod ( void * opaque )
static void coroutine_fn v9fs_mknod ( void * opaque )
{
int mode ;
@ -2993,7 +2998,7 @@ out_nofid:
* do any thing in * qemu 9 p server side lock code path .
* So when a TLOCK request comes , always return success
*/
static void v9fs_lock ( void * opaque )
static void coroutine_fn v9fs_lock ( void * opaque )
{
int8_t status ;
V9fsFlock flock ;
@ -3046,7 +3051,7 @@ out_nofid:
* When a TGETLOCK request comes , always return success because all lock
* handling is done by client ' s VFS layer .
*/
static void v9fs_getlock ( void * opaque )
static void coroutine_fn v9fs_getlock ( void * opaque )
{
size_t offset = 7 ;
struct stat stbuf ;
@ -3091,7 +3096,7 @@ out_nofid:
v9fs_string_free ( & glock . client_id ) ;
}
static void v9fs_mkdir ( void * opaque )
static void coroutine_fn v9fs_mkdir ( void * opaque )
{
V9fsPDU * pdu = opaque ;
size_t offset = 7 ;
@ -3145,7 +3150,7 @@ out_nofid:
v9fs_string_free ( & name ) ;
}
static void v9fs_xattrwalk ( void * opaque )
static void coroutine_fn v9fs_xattrwalk ( void * opaque )
{
int64_t size ;
V9fsString name ;
@ -3251,7 +3256,7 @@ out_nofid:
v9fs_string_free ( & name ) ;
}
static void v9fs_xattrcreate ( void * opaque )
static void coroutine_fn v9fs_xattrcreate ( void * opaque )
{
int flags ;
int32_t fid ;
@ -3291,7 +3296,7 @@ out_nofid:
v9fs_string_free ( & name ) ;
}
static void v9fs_readlink ( void * opaque )
static void coroutine_fn v9fs_readlink ( void * opaque )
{
V9fsPDU * pdu = opaque ;
size_t offset = 7 ;
@ -3367,13 +3372,13 @@ static CoroutineEntry *pdu_co_handlers[] = {
[ P9_TREMOVE ] = v9fs_remove ,
} ;
static void v9fs_op_not_supp ( void * opaque )
static void coroutine_fn v9fs_op_not_supp ( void * opaque )
{
V9fsPDU * pdu = opaque ;
pdu_complete ( pdu , - EOPNOTSUPP ) ;
}
static void v9fs_fs_ro ( void * opaque )
static void coroutine_fn v9fs_fs_ro ( void * opaque )
{
V9fsPDU * pdu = opaque ;
pdu_complete ( pdu , - EROFS ) ;