[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH 09/22] lib/vfscore: add utility funcs&defs to support imported
Signed-off-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx> --- lib/vfscore/include/vfscore/file.h | 2 ++ lib/vfscore/include/vfscore/fs.h | 28 ++++++++++++++++++++++++ lib/vfscore/include/vfscore/vnode.h | 21 ++++++++++++++++++ lib/vfscore/main.c | 33 +++++++++++++++++++++++++++++ lib/vfscore/mount.c | 17 +++++++++++++++ lib/vfscore/vfs.h | 9 ++++++++ lib/vfscore/vnode.c | 2 ++ 7 files changed, 112 insertions(+) create mode 100644 lib/vfscore/include/vfscore/fs.h diff --git a/lib/vfscore/include/vfscore/file.h b/lib/vfscore/include/vfscore/file.h index 7387265d..68bbf92c 100644 --- a/lib/vfscore/include/vfscore/file.h +++ b/lib/vfscore/include/vfscore/file.h @@ -62,6 +62,8 @@ void vfscore_put_fd(int fd); void vfscore_install_fd(int fd, struct vfscore_file *file); struct vfscore_file *vfscore_get_file(int fd); +#define FOF_OFFSET 0x0800 /* Use the offset in uio argument */ + #ifdef __cplusplus } #endif diff --git a/lib/vfscore/include/vfscore/fs.h b/lib/vfscore/include/vfscore/fs.h new file mode 100644 index 00000000..1bb4e24d --- /dev/null +++ b/lib/vfscore/include/vfscore/fs.h @@ -0,0 +1,28 @@ +#ifndef _VFSCORE_FS_H_ +#define _VFSCORE_FS_H_ + +#include <fcntl.h> +/* + * Kernel encoding of open mode; separate read and write bits that are + * independently testable: 1 greater than the above. + */ +#define FREAD 0x00000001 +#define FWRITE 0x00000002 + +#define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) + +static inline int vfscore_fflags(int oflags) +{ + int rw = oflags & O_ACCMODE; + oflags &= ~O_ACCMODE; + return (rw + 1) | oflags; +} + +static inline int vfscore_oflags(int fflags) +{ + int rw = fflags & (FREAD|FWRITE); + fflags &= ~(FREAD|FWRITE); + return (rw - 1) | fflags; +} + +#endif /* _VFSCORE_FS_H_ */ diff --git a/lib/vfscore/include/vfscore/vnode.h b/lib/vfscore/include/vfscore/vnode.h index 64f4ad0c..c5331427 100644 --- a/lib/vfscore/include/vfscore/vnode.h +++ b/lib/vfscore/include/vfscore/vnode.h @@ -105,6 +105,27 @@ struct vattr { off_t va_size; }; +/* struct vattr is used to consolidate multiple types of file + * attributes for passing them as function parameters. Macros bellow + * are selectors, of what types of attributes are valid in particular + * struct vattr*/ +#define AT_TYPE 0x00001 +#define AT_MODE 0x00002 +#define AT_UID 0x00004 +#define AT_GID 0x00008 +#define AT_FSID 0x00010 +#define AT_NODEID 0x00020 +#define AT_NLINK 0x00040 +#define AT_SIZE 0x00080 +#define AT_ATIME 0x00100 +#define AT_MTIME 0x00200 +#define AT_CTIME 0x00400 +#define AT_RDEV 0x00800 +#define AT_BLKSIZE 0x01000 +#define AT_NBLOCKS 0x02000 +#define AT_SEQ 0x08000 +#define AT_XVATTR 0x10000 + /* * Modes. */ diff --git a/lib/vfscore/main.c b/lib/vfscore/main.c index 3cd5b097..5c489a59 100644 --- a/lib/vfscore/main.c +++ b/lib/vfscore/main.c @@ -56,8 +56,41 @@ int vfs_debug = VFSDB_FLAGS; #endif +/* This macro is for defining an alias of the 64bit version of a + * syscall to the regular one. It seams we can make the logic which is + * choosing the right call simpler then in common libc. + * + * Let's keep LFS64 calls just in case in future we will find out that + * these aliases are need. + */ +#define LFS64(x) + static mode_t global_umask = S_IWGRP | S_IWOTH; +/* TODO: these macro does not belong here + * NOTE: borrowed from OSv + */ +#define DO_ONCE(thing) do { \ + static int _x; \ + if (!_x) { \ + _x = 1; \ + thing ; \ + } \ +} while (0) +#define WARN_STUBBED() DO_ONCE(uk_pr_warn("%s() stubbed\n", __func__)) + +#define NO_SYS(decl) decl { \ + DO_ONCE(uk_pr_warn("%s not implemented\n", __func__)); \ + errno = ENOSYS; \ + return -1; \ +} + +static inline int libc_error(int err) +{ + errno = err; + return -1; +} + static inline mode_t apply_umask(mode_t mode) { return mode & ~ukarch_load_n(&global_umask); diff --git a/lib/vfscore/mount.c b/lib/vfscore/mount.c index 7fecfd5d..04f96c4c 100644 --- a/lib/vfscore/mount.c +++ b/lib/vfscore/mount.c @@ -76,6 +76,23 @@ fs_getfs(const char *name) return fs; } +int device_open(const char *name, int mode, struct device **devp) +{ + (void) name; + (void) mode; + (void) devp; + + uk_pr_err("device open is not implemented (%s)\n", name); + return 0; +} + +int device_close(struct device *dev) +{ + (void) dev; + UK_CRASH("not implemented"); + return 0; +} + int sys_mount(const char *dev, const char *dir, const char *fsname, int flags, const void *data) { diff --git a/lib/vfscore/vfs.h b/lib/vfscore/vfs.h index 356f215e..60bb9113 100644 --- a/lib/vfscore/vfs.h +++ b/lib/vfscore/vfs.h @@ -148,4 +148,13 @@ void vnode_dump(void); void mount_dump(void); #endif +static void __attribute__((unused)) uk_vfscore_trace(int foo __unused, ...) +{ +} + +#define TRACEPOINT(trace_name, fmt, ...) \ + static void trace_name(__VA_ARGS__ ) __attribute__((unused, alias("uk_vfscore_trace"))) + + + #endif /* !_VFS_H */ diff --git a/lib/vfscore/vnode.c b/lib/vfscore/vnode.c index cf4c64bc..ee4b2597 100644 --- a/lib/vfscore/vnode.c +++ b/lib/vfscore/vnode.c @@ -45,6 +45,8 @@ #include <vfscore/vnode.h> #include "vfs.h" +#define S_BLKSIZE 512 + enum vtype iftovt_tab[16] = { VNON, VFIFO, VCHR, VNON, VDIR, VNON, VBLK, VNON, VREG, VNON, VLNK, VNON, VSOCK, VNON, VNON, VBAD, -- 2.19.2 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |