hw/9pfs: Add yield support for open and opendir coroutine
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
This commit is contained in:
		
							parent
							
								
									e4e414a427
								
							
						
					
					
						commit
						f6b7f0ab5c
					
				| 
						 | 
				
			
			@ -83,3 +83,19 @@ int v9fs_co_mkdir(V9fsState *s, char *name, mode_t mode, uid_t uid, gid_t gid)
 | 
			
		|||
        });
 | 
			
		||||
    return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int v9fs_co_opendir(V9fsState *s, V9fsFidState *fidp)
 | 
			
		||||
{
 | 
			
		||||
    int err;
 | 
			
		||||
 | 
			
		||||
    v9fs_co_run_in_worker(
 | 
			
		||||
        {
 | 
			
		||||
            fidp->fs.dir = s->ops->opendir(&s->ctx, fidp->path.data);
 | 
			
		||||
            if (!fidp->fs.dir) {
 | 
			
		||||
                err = -errno;
 | 
			
		||||
            } else {
 | 
			
		||||
                err = 0;
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    return err;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,3 +44,19 @@ int v9fs_co_fstat(V9fsState *s, int fd, struct stat *stbuf)
 | 
			
		|||
        });
 | 
			
		||||
    return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int v9fs_co_open(V9fsState *s, V9fsFidState *fidp, int flags)
 | 
			
		||||
{
 | 
			
		||||
    int err;
 | 
			
		||||
 | 
			
		||||
    v9fs_co_run_in_worker(
 | 
			
		||||
        {
 | 
			
		||||
            fidp->fs.fd = s->ops->open(&s->ctx, fidp->path.data, flags);
 | 
			
		||||
            if (fidp->fs.fd == -1) {
 | 
			
		||||
                err = -errno;
 | 
			
		||||
            } else {
 | 
			
		||||
                err = 0;
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    return err;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,4 +77,6 @@ extern int v9fs_co_mkdir(V9fsState *, char *, mode_t, uid_t, gid_t);
 | 
			
		|||
extern int v9fs_co_remove(V9fsState *, V9fsString *);
 | 
			
		||||
extern int v9fs_co_rename(V9fsState *, V9fsString *, V9fsString *);
 | 
			
		||||
extern int v9fs_co_fstat(V9fsState *, int, struct stat *);
 | 
			
		||||
extern int v9fs_co_opendir(V9fsState *, V9fsFidState *);
 | 
			
		||||
extern int v9fs_co_open(V9fsState *, V9fsFidState *, int);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue