From: Charlie Paul <cpaul.windri...@gmail.com> The VMFS was not compiling or running. The VMFS was fixed using the working version of VMFS in LSI 3.18 kernel.
Signed-off-by: Charlie Paul <cpaul.windri...@gmail.com> --- fs/vmfs/cache.c | 10 +++++----- fs/vmfs/dir.c | 33 ++++++++++----------------------- fs/vmfs/file.c | 17 ++++++----------- fs/vmfs/inode.c | 31 ++++++++++++++++++------------- fs/vmfs/ioctl.c | 8 -------- fs/vmfs/proc.c | 6 +++--- fs/vmfs/proto.h | 2 +- fs/vmfs/vmfs_fs.h | 2 +- 8 files changed, 44 insertions(+), 65 deletions(-) diff --git a/fs/vmfs/cache.c b/fs/vmfs/cache.c index 23fbf36..8b09098 100644 --- a/fs/vmfs/cache.c +++ b/fs/vmfs/cache.c @@ -140,7 +140,7 @@ out_unlock: * Create dentry/inode for this file and add it to the dircache. */ int -vmfs_fill_cache(struct file *filp, void *dirent, filldir_t filldir, +vmfs_fill_cache(struct file *filp, struct dir_context *dirent, struct vmfs_cache_control *ctrl, struct qstr *qname, struct vmfs_fattr *entry) { @@ -216,13 +216,13 @@ vmfs_fill_cache(struct file *filp, void *dirent, filldir_t filldir, end_advance: if (!valid) ctl.valid = 0; - if (!ctl.filled && (ctl.fpos == filp->f_pos)) { + if (!ctl.filled && (ctl.fpos == dirent->pos)) { if (!ino) ino = iunique(inode->i_sb, 2); - ctl.filled = filldir(dirent, qname->name, qname->len, - filp->f_pos, ino, DT_UNKNOWN); + ctl.filled = !dir_emit(dirent, qname->name, qname->len, + ino, DT_UNKNOWN); if (!ctl.filled) - filp->f_pos += 1; + dirent->pos += 1; } ctl.fpos += 1; ctl.idx += 1; diff --git a/fs/vmfs/dir.c b/fs/vmfs/dir.c index ccda867..ad7989d 100644 --- a/fs/vmfs/dir.c +++ b/fs/vmfs/dir.c @@ -24,7 +24,6 @@ #include "vmfs_debug.h" #include "proto.h" -// ORIG - TBD static int vmfs_readdir(struct file *, void *, filldir_t); static int vmfs_readdir(struct file *, struct dir_context *ctx); static int vmfs_dir_open(struct inode *, struct file *); @@ -78,11 +77,9 @@ const struct inode_operations vmfs_dir_inode_operations_unix = { * * The cache code is almost directly taken from ncpfs */ -// ORIG - TBD static int vmfs_readdir(struct file *filp, void *dirent, filldir_t filldir) static int vmfs_readdir(struct file *filp, struct dir_context *ctx) { int result; -#if 0 // Needs to be ported struct dentry *dentry = filp->f_path.dentry; struct inode *dir = dentry->d_inode; struct vmfs_sb_info *server = server_from_dentry(dentry); @@ -100,17 +97,8 @@ static int vmfs_readdir(struct file *filp, struct dir_context *ctx) mutex_lock(&vmfs_mutex); - switch ((unsigned int)filp->f_pos) { - case 0: - if (filldir(dirent, ".", 1, 0, dir->i_ino, DT_DIR) < 0) - goto out; - filp->f_pos = 1; - /* fallthrough */ - case 1: - if (filldir(dirent, "..", 2, 1, parent_ino(dentry), DT_DIR) < 0) - goto out; - filp->f_pos = 2; - } + if (!dir_emit_dots(filp, ctx)) + return 0; /* * Make sure our inode is up-to-date. @@ -132,7 +120,7 @@ static int vmfs_readdir(struct file *filp, struct dir_context *ctx) goto init_cache; } - if (filp->f_pos == 2) { + if (ctx->pos == 2) { if (jiffies - ctl.head.time >= VMFS_MAX_AGE(server)) goto init_cache; @@ -147,10 +135,10 @@ static int vmfs_readdir(struct file *filp, struct dir_context *ctx) */ } - if (filp->f_pos > ctl.head.end) + if (ctx->pos > ctl.head.end) goto finished; - ctl.fpos = filp->f_pos + (VMFS_DIRCACHE_START - 2); + ctl.fpos = ctx->pos + (VMFS_DIRCACHE_START - 2); ctl.ofs = ctl.fpos / VMFS_DIRCACHE_SIZE; ctl.idx = ctl.fpos % VMFS_DIRCACHE_SIZE; @@ -172,15 +160,15 @@ static int vmfs_readdir(struct file *filp, struct dir_context *ctx) if (!dent) goto invalid_cache; - res = filldir(dirent, dent->d_name.name, - dent->d_name.len, filp->f_pos, + res = !dir_emit(ctx, dent->d_name.name, + dent->d_name.len, dent->d_inode->i_ino, DT_UNKNOWN); dput(dent); if (res) goto finished; - filp->f_pos += 1; + ctx->pos += 1; ctl.idx += 1; - if (filp->f_pos > ctl.head.end) + if (ctx->pos > ctl.head.end) goto finished; } if (ctl.page) { @@ -211,7 +199,7 @@ init_cache: ctl.filled = 0; ctl.valid = 1; read_really: - result = server->ops->readdir(filp, dirent, filldir, &ctl); + result = server->ops->readdir(filp, ctx, &ctl); if (result == -ERESTARTSYS && page) ClearPageUptodate(page); if (ctl.idx == -1) @@ -235,7 +223,6 @@ finished: } out: mutex_unlock(&vmfs_mutex); -#endif return result; } diff --git a/fs/vmfs/file.c b/fs/vmfs/file.c index b80bac0..6e9030a 100644 --- a/fs/vmfs/file.c +++ b/fs/vmfs/file.c @@ -19,7 +19,7 @@ #include <linux/aio.h> #include <linux/uaccess.h> -#include <asm/system.h> +/* #include <asm/system.h> */ #include <linux/version.h> #include "vmfsno.h" @@ -381,17 +381,12 @@ vmfs_file_aio_write(struct kiocb *iocb, const struct iovec *iov, if (result) goto out; - if (iocb->ki_left > 0) { - DEBUG1("1\n"); + result = generic_file_aio_write(iocb, iov, nr_segs, pos); + VERBOSE("pos=%ld, size=%ld, mtime=%ld, atime=%ld\n", + (long)file->f_pos, (long)dentry->d_inode->i_size, + dentry->d_inode->i_mtime.tv_sec, + dentry->d_inode->i_atime.tv_sec); - result = generic_file_aio_write(iocb, iov, nr_segs, pos); - VERBOSE("pos=%ld, size=%ld, mtime=%ld, atime=%ld\n", - (long)file->f_pos, (long)dentry->d_inode->i_size, - dentry->d_inode->i_mtime.tv_sec, - dentry->d_inode->i_atime.tv_sec); - - DEBUG1("2\n"); - } out: DEBUG1("return\n"); return result; diff --git a/fs/vmfs/inode.c b/fs/vmfs/inode.c index 492dc8a..63d1dcb 100644 --- a/fs/vmfs/inode.c +++ b/fs/vmfs/inode.c @@ -26,6 +26,8 @@ #include <linux/highuid.h> #include <linux/sched.h> #include <linux/version.h> +#include <linux/of_address.h> +#include <linux/of_irq.h> #include "vmfs_fs.h" #include "vmfsno.h" #include "vmfs_mount.h" @@ -326,6 +328,7 @@ static void vmfs_delete_inode(struct inode *ino) { DEBUG1("ino=%ld\n", ino->i_ino); truncate_inode_pages(&ino->i_data, 0); + clear_inode(ino); mutex_lock(&vmfs_mutex); if (vmfs_close(ino)) PARANOIA("could not close inode %ld\n", ino->i_ino); @@ -486,25 +489,13 @@ int vmfs_notify_change(struct dentry *dentry, struct iattr *attr) goto out; error = -EPERM; -#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS if ((attr->ia_valid & ATTR_UID) && (attr->ia_uid.val != (server->mnt->uid).val)) goto out; -#else - if ((attr->ia_valid & ATTR_UID) && - (attr->ia_uid != server->mnt->uid)) - goto out; -#endif -#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS if ((attr->ia_valid & ATTR_GID) && ((attr->ia_gid).val != (server->mnt->gid).val)) goto out; -#else - if ((attr->ia_valid & ATTR_GID) && - (attr->ia_gid != server->mnt->gid)) - goto out; -#endif if ((attr->ia_valid & ATTR_MODE) && (attr->ia_mode & ~mask)) goto out; @@ -616,6 +607,8 @@ static struct file_system_type vmfs_fs_type = { static int __init init_vmfs_fs(void) { + phys_addr_t dev_base = CONFIG_VMFS_DEV_BASE; + uint32_t dev_irq = -1; int err; DEBUG1("registering ...\n"); @@ -623,9 +616,21 @@ static int __init init_vmfs_fs(void) if (err) goto out_inode; + if (IS_ENABLED(CONFIG_OF)) { + struct device_node *np; + + np = of_find_compatible_node(NULL, NULL, "arm,messagebox"); + if (np) { + struct resource res; + + if (of_address_to_resource(np, 0, &res) == 0) + dev_base = res.start; + } + } + /* map the message box device into memory */ - mbox = mb_new(CONFIG_VMFS_DEV_BASE, CONFIG_VMFS_IRQ); + mbox = mb_new(dev_base, dev_irq); if (mbox == NULL) { err = -1; diff --git a/fs/vmfs/ioctl.c b/fs/vmfs/ioctl.c index baec528..ece7ad8 100644 --- a/fs/vmfs/ioctl.c +++ b/fs/vmfs/ioctl.c @@ -34,19 +34,11 @@ long vmfs_unlocked_ioctl(struct file *filp, unsigned int cmd, uid16_t uid16; uid_t uid32; case VMFS_IOC_GETMOUNTUID: -#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS SET_UID(uid16, (server->mnt->mounted_uid).val); -#else - SET_UID(uid16, server->mnt->mounted_uid); -#endif result = put_user(uid16, (uid16_t __user *) arg); break; case VMFS_IOC_GETMOUNTUID32: -#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS SET_UID(uid32, (server->mnt->mounted_uid).val); -#else - SET_UID(uid32, server->mnt->mounted_uid); -#endif result = put_user(uid32, (uid_t __user *) arg); break; default: diff --git a/fs/vmfs/proc.c b/fs/vmfs/proc.c index 7866391..07e3256 100644 --- a/fs/vmfs/proc.c +++ b/fs/vmfs/proc.c @@ -25,7 +25,7 @@ #include "vmfsno.h" #include "vmfs_mount.h" -#include <asm/string.h> +#include <linux/string.h> #include <asm/div64.h> #include "vmfs_debug.h" @@ -688,7 +688,7 @@ vmfs_init_root_dirent(struct vmfs_sb_info *server, struct vmfs_fattr *fattr, * read in directory entries into the dentry cache */ static int -vmfs_proc_readdir_long(struct file *filp, void *dirent, filldir_t filldir, +vmfs_proc_readdir_long(struct file *filp, void *dirent, struct vmfs_cache_control *ctl) { struct dentry *dir = filp->f_path.dentry; @@ -793,7 +793,7 @@ vmfs_proc_readdir_long(struct file *filp, void *dirent, filldir_t filldir, vmfs_finish_dirent(server, &fattr); if (!vmfs_fill_cache - (filp, dirent, filldir, ctl, &qname, &fattr)) { + (filp, dirent, ctl, &qname, &fattr)) { /* smbfs carries on here... */ } } diff --git a/fs/vmfs/proto.h b/fs/vmfs/proto.h index 01ea8ed..e02803d 100644 --- a/fs/vmfs/proto.h +++ b/fs/vmfs/proto.h @@ -40,7 +40,7 @@ extern const struct inode_operations vmfs_dir_inode_operations_unix; extern void vmfs_new_dentry(struct dentry *dentry); extern void vmfs_renew_times(struct dentry *dentry); /* cache.c */ -extern int vmfs_fill_cache(struct file *filp, void *dirent, filldir_t filldir, +extern int vmfs_fill_cache(struct file *filp, struct dir_context *dirent, struct vmfs_cache_control *ctrl, struct qstr *qname, struct vmfs_fattr *entry); extern void vmfs_invalid_dir_cache(struct inode *dir); diff --git a/fs/vmfs/vmfs_fs.h b/fs/vmfs/vmfs_fs.h index 2e072a1..7c7d0f1 100644 --- a/fs/vmfs/vmfs_fs.h +++ b/fs/vmfs/vmfs_fs.h @@ -87,7 +87,7 @@ struct vmfs_ops { char *data); int (*write)(struct inode *inode, loff_t offset, int count, const char *data); - int (*readdir)(struct file *filp, void *dirent, filldir_t filldir, + int (*readdir)(struct file *filp, void *dirent, struct vmfs_cache_control *ctl); int (*getattr)(struct vmfs_sb_info *server, struct dentry *dir, -- 1.7.9.5 -- _______________________________________________ linux-yocto mailing list linux-yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/linux-yocto