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:
Aneesh Kumar K.V 2011-12-04 22:35:27 +05:30
parent 1c8a881daa
commit 77eec1b3f1
3 changed files with 4 additions and 35 deletions

View File

@ -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-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-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) += virtio-9p-coth.o cofs.o codir.o cofile.o
9pfs-nested-$(CONFIG_VIRTFS) += coxattr.o virtio-9p-handle.o 9pfs-nested-$(CONFIG_VIRTFS) += coxattr.o virtio-9p-synth.o
9pfs-nested-$(CONFIG_VIRTFS) += virtio-9p-synth.o 9pfs-nested-$(CONFIG_OPEN_BY_HANDLE) += virtio-9p-handle.o
hw-obj-$(CONFIG_REALLY_VIRTFS) += $(addprefix 9pfs/, $(9pfs-nested-y)) hw-obj-$(CONFIG_REALLY_VIRTFS) += $(addprefix 9pfs/, $(9pfs-nested-y))
$(addprefix 9pfs/, $(9pfs-nested-y)): QEMU_CFLAGS+=$(GLIB_CFLAGS) $(addprefix 9pfs/, $(9pfs-nested-y)): QEMU_CFLAGS+=$(GLIB_CFLAGS)

View File

@ -23,7 +23,9 @@ static QTAILQ_HEAD(FsDriverEntry_head, FsDriverListEntry) fsdriver_entries =
static FsDriverTable FsDrivers[] = { static FsDriverTable FsDrivers[] = {
{ .name = "local", .ops = &local_ops}, { .name = "local", .ops = &local_ops},
#ifdef CONFIG_OPEN_BY_HANDLE
{ .name = "handle", .ops = &handle_ops}, { .name = "handle", .ops = &handle_ops},
#endif
{ .name = "synth", .ops = &synth_ops}, { .name = "synth", .ops = &synth_ops},
}; };

View File

@ -45,7 +45,6 @@ struct handle_data {
int handle_bytes; int handle_bytes;
}; };
#ifdef CONFIG_OPEN_BY_HANDLE
static inline int name_to_handle(int dirfd, const char *name, static inline int name_to_handle(int dirfd, const char *name,
struct file_handle *fh, int *mnt_id, int flags) 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); 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) static int handle_update_file_cred(int dirfd, const char *name, FsCred *credp)
{ {