hw/9pfs: Improve portability to older systems
handle fs driver require a set of newly added syscalls. Don't Compile handle FS driver if those syscalls are not available. Instead of adding #ifdef for all those syscalls we check for open by handle syscall. If that is available then rest of the syscalls used by the driver should be available. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
This commit is contained in:
		
							parent
							
								
									2061800b85
								
							
						
					
					
						commit
						f03969b952
					
				| 
						 | 
				
			
			@ -310,8 +310,8 @@ hw-obj-$(CONFIG_SOUND) += $(sound-obj-y)
 | 
			
		|||
9pfs-nested-$(CONFIG_VIRTFS) += virtio-9p-local.o virtio-9p-xattr.o
 | 
			
		||||
9pfs-nested-$(CONFIG_VIRTFS) += virtio-9p-xattr-user.o virtio-9p-posix-acl.o
 | 
			
		||||
9pfs-nested-$(CONFIG_VIRTFS) += virtio-9p-coth.o cofs.o codir.o cofile.o
 | 
			
		||||
9pfs-nested-$(CONFIG_VIRTFS) += coxattr.o virtio-9p-handle.o
 | 
			
		||||
9pfs-nested-$(CONFIG_VIRTFS) += virtio-9p-synth.o
 | 
			
		||||
9pfs-nested-$(CONFIG_VIRTFS) += coxattr.o virtio-9p-synth.o
 | 
			
		||||
9pfs-nested-$(CONFIG_OPEN_BY_HANDLE) +=  virtio-9p-handle.o
 | 
			
		||||
 | 
			
		||||
hw-obj-$(CONFIG_REALLY_VIRTFS) += $(addprefix 9pfs/, $(9pfs-nested-y))
 | 
			
		||||
$(addprefix 9pfs/, $(9pfs-nested-y)): QEMU_CFLAGS+=$(GLIB_CFLAGS)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,9 @@ static QTAILQ_HEAD(FsDriverEntry_head, FsDriverListEntry) fsdriver_entries =
 | 
			
		|||
 | 
			
		||||
static FsDriverTable FsDrivers[] = {
 | 
			
		||||
    { .name = "local", .ops = &local_ops},
 | 
			
		||||
#ifdef CONFIG_OPEN_BY_HANDLE
 | 
			
		||||
    { .name = "handle", .ops = &handle_ops},
 | 
			
		||||
#endif
 | 
			
		||||
    { .name = "synth", .ops = &synth_ops},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,7 +45,6 @@ struct handle_data {
 | 
			
		|||
    int handle_bytes;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_OPEN_BY_HANDLE
 | 
			
		||||
static inline int name_to_handle(int dirfd, const char *name,
 | 
			
		||||
                                 struct file_handle *fh, int *mnt_id, int flags)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -56,38 +55,6 @@ static inline int open_by_handle(int mountfd, const char *fh, int flags)
 | 
			
		|||
{
 | 
			
		||||
    return open_by_handle_at(mountfd, (struct file_handle *)fh, flags);
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
struct rpl_file_handle {
 | 
			
		||||
    unsigned int handle_bytes;
 | 
			
		||||
    int handle_type;
 | 
			
		||||
    unsigned char handle[0];
 | 
			
		||||
};
 | 
			
		||||
#define file_handle rpl_file_handle
 | 
			
		||||
 | 
			
		||||
#ifndef AT_REMOVEDIR
 | 
			
		||||
#define AT_REMOVEDIR    0x200
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef AT_EMPTY_PATH
 | 
			
		||||
#define AT_EMPTY_PATH   0x1000  /* Allow empty relative pathname */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_PATH
 | 
			
		||||
#define O_PATH    010000000
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static inline int name_to_handle(int dirfd, const char *name,
 | 
			
		||||
                                 struct file_handle *fh, int *mnt_id, int flags)
 | 
			
		||||
{
 | 
			
		||||
    errno = ENOSYS;
 | 
			
		||||
    return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int open_by_handle(int mountfd, const char *fh, int flags)
 | 
			
		||||
{
 | 
			
		||||
    errno = ENOSYS;
 | 
			
		||||
    return -1;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int handle_update_file_cred(int dirfd, const char *name, FsCred *credp)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue