diff options
author | Amit Pundir <amit.pundir@linaro.org> | 2019-04-10 19:23:10 +0530 |
---|---|---|
committer | Amit Pundir <amit.pundir@linaro.org> | 2019-06-17 15:04:03 +0530 |
commit | 8be123c10ba317c7ccd767fa426eefe860d6b80d (patch) | |
tree | dc6f3fdfced6f17b85acba0be7d964a950d5c2c2 | |
parent | 700ad0087bbfdcd4cb72876a76c70cb6f4170ab4 (diff) |
hwsdcardfs: Misc build fixes for v5.1hwsdcardfs-mainline-tracking
TODO: Detailed commit message to follow soon.
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
-rw-r--r-- | fs/hwsdcardfs/Makefile | 2 | ||||
-rw-r--r-- | fs/hwsdcardfs/inode.c | 27 | ||||
-rw-r--r-- | fs/hwsdcardfs/macros.h | 12 | ||||
-rw-r--r-- | fs/hwsdcardfs/main.c | 2 | ||||
-rw-r--r-- | fs/hwsdcardfs/mmap.c | 13 | ||||
-rw-r--r-- | fs/hwsdcardfs/namei.c | 2 | ||||
-rw-r--r-- | fs/hwsdcardfs/sdcardfs.h | 6 | ||||
-rw-r--r-- | fs/hwsdcardfs/super.c | 1 | ||||
-rw-r--r-- | fs/hwsdcardfs/xattr.c | 55 |
9 files changed, 28 insertions, 92 deletions
diff --git a/fs/hwsdcardfs/Makefile b/fs/hwsdcardfs/Makefile index 3bdf7f24d30c..2da28aee6847 100644 --- a/fs/hwsdcardfs/Makefile +++ b/fs/hwsdcardfs/Makefile @@ -1,7 +1,7 @@ SDCARDFS_VERSION="1.0" ccflags-y += -DSDCARDFS_VERSION=\"$(SDCARDFS_VERSION)\" -DSDCARDFS_CASE_INSENSITIVE -DSDCARDFS_SUPPORT_RESERVED_SPACE \ - -DSDCARDFS_UNDERLAY_MULTI_ALIASES -DSDCARDFS_SYSFS_FEATURE -DSDCARDFS_PLUGIN_PRIVACY_SPACE -g -Wall + -DSDCARDFS_UNDERLAY_MULTI_ALIASES -DSDCARDFS_SYSFS_FEATURE -DSDCARDFS_PLUGIN_PRIVACY_SPACE -g -Wall -I$(src) obj-$(CONFIG_SDCARD_FS) += sdcardfs.o sdcardfs-objs := dentry.o file.o inode.o configfs.o lookup_ci.o main.o super.o namei.o \ diff --git a/fs/hwsdcardfs/inode.c b/fs/hwsdcardfs/inode.c index de48c0a3a96b..fdc4c9238590 100644 --- a/fs/hwsdcardfs/inode.c +++ b/fs/hwsdcardfs/inode.c @@ -223,7 +223,7 @@ struct dentry *__lookup_rename_ci( static int sdcardfs_rename( struct inode *old_dir, struct dentry *old_dentry, - struct inode *new_dir, struct dentry *new_dentry + struct inode *new_dir, struct dentry *new_dentry, unsigned int flags ) { int err; struct dentry *trap, *dentry; @@ -232,6 +232,9 @@ static int sdcardfs_rename( const struct cred *saved_cred; bool overlapped = true; + if (flags) + return -EINVAL; + trace_sdcardfs_rename_enter(old_dir, old_dentry, new_dir, new_dentry); /* since old_dir, new_old both have inode_locked, so @@ -339,6 +342,7 @@ static int sdcardfs_setattr(struct dentry *dentry, struct iattr *ia) { int err; struct iattr copied_ia; + struct dentry tmp; struct inode *inode = d_inode(dentry); /* since sdcardfs uses its own uid/gid derived policy, @@ -363,7 +367,8 @@ static int sdcardfs_setattr(struct dentry *dentry, struct iattr *ia) if (ia->ia_valid & ATTR_MODE) ia->ia_valid &= ~ATTR_MODE; - err = inode_change_ok(inode, ia); + tmp.d_inode = inode; + err = setattr_prepare(&tmp, ia); if (!err) { struct dentry *lower_dentry; @@ -406,12 +411,14 @@ out: return err; } -static int sdcardfs_getattr(struct vfsmount *mnt, struct dentry *dentry, - struct kstat *stat) +static int sdcardfs_getattr(const struct path *path, struct kstat *stat, + u32 request_mask, unsigned int query_flags) { int err; struct path lower_path; const struct cred *saved_cred; + struct vfsmount *mnt = path->mnt; + struct dentry *dentry = path->dentry; debugln("%s, dentry=%p, name=%s", __FUNCTION__, dentry, dentry->d_name.name); @@ -429,7 +436,7 @@ static int sdcardfs_getattr(struct vfsmount *mnt, struct dentry *dentry, goto out_pathput; } - err = vfs_getattr(&lower_path, stat); + err = vfs_getattr(&lower_path, stat, request_mask, query_flags); REVERT_CRED(saved_cred); if (!err) { @@ -439,7 +446,7 @@ static int sdcardfs_getattr(struct vfsmount *mnt, struct dentry *dentry, /* note that generic_fillattr dont take any lock */ stat->nlink = S_ISDIR(inode->i_mode) ? 1 : inode->i_nlink; - if (te->revision > inode->i_version) { + if (te->revision > atomic64_read(&inode->i_version)) { inode_lock(inode); __fix_derived_permission(te, inode); inode_unlock(inode); @@ -464,7 +471,7 @@ static int sdcardfs_permission(struct inode *inode, int mask) #endif struct sdcardfs_tree_entry *te = inode->i_private; - need_reval = te->revision > inode->i_version; + need_reval = te->revision > atomic64_read(&inode->i_version); if (need_reval) { if (mask & MAY_NOT_BLOCK) @@ -501,10 +508,7 @@ const struct inode_operations sdcardfs_dir_iops = { .setattr = sdcardfs_setattr, .getattr = sdcardfs_getattr, - .setxattr = sdcardfs_setxattr, - .getxattr = sdcardfs_getxattr, .listxattr = sdcardfs_listxattr, - .removexattr = sdcardfs_removexattr, }; const struct inode_operations sdcardfs_main_iops = { @@ -512,8 +516,5 @@ const struct inode_operations sdcardfs_main_iops = { .setattr = sdcardfs_setattr, .getattr = sdcardfs_getattr, - .setxattr = sdcardfs_setxattr, - .getxattr = sdcardfs_getxattr, .listxattr = sdcardfs_listxattr, - .removexattr = sdcardfs_removexattr, }; diff --git a/fs/hwsdcardfs/macros.h b/fs/hwsdcardfs/macros.h index e6604c596c68..ac0a397301bc 100644 --- a/fs/hwsdcardfs/macros.h +++ b/fs/hwsdcardfs/macros.h @@ -5,18 +5,6 @@ #define d_inode(x) ((x)->d_inode) #endif -#ifndef inode_lock_nested -#define inode_lock_nested(x, y) mutex_lock_nested(&(x)->i_mutex, (y)) -#endif - -#ifndef inode_lock -#define inode_lock(x) mutex_lock(&(x)->i_mutex) -#endif - -#ifndef inode_unlock -#define inode_unlock(x) mutex_unlock(&(x)->i_mutex) -#endif - #ifndef lockless_dereference /** * lockless_dereference() - safely load a pointer for later dereference diff --git a/fs/hwsdcardfs/main.c b/fs/hwsdcardfs/main.c index 8a0f8c153eeb..8f9a5dd2a639 100644 --- a/fs/hwsdcardfs/main.c +++ b/fs/hwsdcardfs/main.c @@ -174,7 +174,7 @@ static int __sdcardfs_setup_root( /* if inode->i_version < te->revision, uid/gid/mode will be updated at the right time */ - inode->i_version = te->revision; + inode_set_iversion(inode, te->revision); /* used for revalidate in inode_permission */ inode->i_private = te; diff --git a/fs/hwsdcardfs/mmap.c b/fs/hwsdcardfs/mmap.c index 2af5538850db..b9118acd8b6c 100644 --- a/fs/hwsdcardfs/mmap.c +++ b/fs/hwsdcardfs/mmap.c @@ -21,17 +21,17 @@ #include "sdcardfs.h" #include <linux/version.h> -static int sdcardfs_fault(struct vm_area_struct *vma, struct vm_fault *vmf) +vm_fault_t sdcardfs_fault(struct vm_fault *vmf) { int err; struct file *file; const struct vm_operations_struct *lower_vm_ops; - file = (struct file *)vma->vm_private_data; + file = (struct file *)vmf->vma->vm_private_data; lower_vm_ops = SDCARDFS_F(file)->lower_vm_ops; BUG_ON(!lower_vm_ops); - err = lower_vm_ops->fault(vma, vmf); + err = lower_vm_ops->fault(vmf); return err; } @@ -49,20 +49,19 @@ static void sdcardfs_vm_close(struct vm_area_struct *vma) fput(file); } -static int sdcardfs_page_mkwrite(struct vm_area_struct *vma, - struct vm_fault *vmf) +vm_fault_t sdcardfs_page_mkwrite(struct vm_fault *vmf) { int err = 0; struct file *file; const struct vm_operations_struct *lower_vm_ops; - file = (struct file *)vma->vm_private_data; + file = (struct file *)vmf->vma->vm_private_data; lower_vm_ops = SDCARDFS_F(file)->lower_vm_ops; BUG_ON(!lower_vm_ops); if (!lower_vm_ops->page_mkwrite) goto out; - err = lower_vm_ops->page_mkwrite(vma, vmf); + err = lower_vm_ops->page_mkwrite(vmf); out: return err; } diff --git a/fs/hwsdcardfs/namei.c b/fs/hwsdcardfs/namei.c index cb3a4af3218a..5731ab6ddc8e 100644 --- a/fs/hwsdcardfs/namei.c +++ b/fs/hwsdcardfs/namei.c @@ -30,7 +30,7 @@ struct inode *sdcardfs_ialloc( return ERR_PTR(-ENOMEM); inode->i_ino = get_next_ino(); - inode->i_version = 1; + inode_set_iversion(inode, 1); inode->i_generation = get_seconds(); BUG_ON(__is_weird_inode(mode)); diff --git a/fs/hwsdcardfs/sdcardfs.h b/fs/hwsdcardfs/sdcardfs.h index b2f3f1c9ba8f..4f29812280dd 100644 --- a/fs/hwsdcardfs/sdcardfs.h +++ b/fs/hwsdcardfs/sdcardfs.h @@ -32,6 +32,8 @@ #include <linux/list.h> #include <linux/fs_struct.h> #include <linux/ratelimit.h> +#include <linux/sched/task.h> +#include <linux/iversion.h> #ifdef SDCARDFS_SYSFS_FEATURE #include <linux/kobject.h> #endif @@ -422,7 +424,7 @@ static inline int need_fixup_permission( struct inode *dir, struct sdcardfs_tree_entry *te ) { - return te->revision < dir->i_version; + return te->revision < atomic64_read(&dir->i_version); } static inline void __fix_derived_permission( @@ -471,7 +473,7 @@ static inline void __fix_derived_permission( filtered_mode = visible_mode & (owner_mode | (owner_mode >> 3) | (owner_mode >> 6)); inode->i_mode = (inode->i_mode & S_IFMT) | filtered_mode; - inode->i_version = te->revision; + inode_set_iversion(inode, te->revision); #endif } diff --git a/fs/hwsdcardfs/super.c b/fs/hwsdcardfs/super.c index ed6896184a48..ebce8f1d611e 100644 --- a/fs/hwsdcardfs/super.c +++ b/fs/hwsdcardfs/super.c @@ -9,6 +9,7 @@ * License. See the file COPYING in the main directory of the Linux * distribution for more details. */ +#include <uapi/linux/mount.h> #include "sdcardfs.h" /* could be triggered after deactivate_locked_super() diff --git a/fs/hwsdcardfs/xattr.c b/fs/hwsdcardfs/xattr.c index 38a72df7da8d..b722028fcd4f 100644 --- a/fs/hwsdcardfs/xattr.c +++ b/fs/hwsdcardfs/xattr.c @@ -13,42 +13,6 @@ #include <linux/xattr.h> #include "sdcardfs.h" -int sdcardfs_setxattr(struct dentry *dentry, const char *name, - const void *value, size_t size, int flags) -{ - int rc; - struct dentry *lower_dentry = sdcardfs_get_lower_dentry(dentry); - struct inode *lower_inode = d_inode(lower_dentry); - - if (unlikely(lower_inode->i_op->setxattr == NULL)) { - rc = -EOPNOTSUPP; - goto out; - } - - rc = vfs_setxattr(lower_dentry, name, value, size, flags); -out: - dput(lower_dentry); - return rc; -} - -ssize_t sdcardfs_getxattr(struct dentry *dentry, - const char *name, void *value, size_t size) -{ - ssize_t rc; - struct dentry *lower_dentry = sdcardfs_get_lower_dentry(dentry); - struct inode *lower_inode = d_inode(lower_dentry); - - if (unlikely(lower_inode->i_op->getxattr == NULL)) { - rc = -EOPNOTSUPP; - goto out; - } - - rc = lower_inode->i_op->getxattr(lower_dentry, name, value, size); -out: - dput(lower_dentry); - return rc; -} - ssize_t sdcardfs_listxattr(struct dentry *dentry, char *list, size_t size) { ssize_t rc; @@ -65,22 +29,3 @@ out: dput(lower_dentry); return rc; } - -int sdcardfs_removexattr(struct dentry *dentry, const char *name) -{ - ssize_t rc; - struct dentry *lower_dentry = sdcardfs_get_lower_dentry(dentry); - struct inode *lower_inode = d_inode(lower_dentry); - - if (unlikely(lower_inode->i_op->removexattr == NULL)) { - rc = -EOPNOTSUPP; - goto out; - } - - inode_lock(lower_inode); - rc = lower_inode->i_op->removexattr(lower_dentry, name); - inode_unlock(lower_inode); -out: - dput(lower_dentry); - return rc; -} |