Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs updates from Al Viro: "Assorted stuff; the biggest pile here is Christoph's ACL series. Plus assorted cleanups and fixes all over the place... There will be another pile later this week" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (43 commits) __dentry_path() fixes vfs: Remove second variable named error in __dentry_path vfs: Is mounted should be testing mnt_ns for NULL or error. Fix race when checking i_size on direct i/o read hfsplus: remove can_set_xattr nfsd: use get_acl and ->set_acl fs: remove generic_acl nfs: use generic posix ACL infrastructure for v3 Posix ACLs gfs2: use generic posix ACL infrastructure jfs: use generic posix ACL infrastructure xfs: use generic posix ACL infrastructure reiserfs: use generic posix ACL infrastructure ocfs2: use generic posix ACL infrastructure jffs2: use generic posix ACL infrastructure hfsplus: use generic posix ACL infrastructure f2fs: use generic posix ACL infrastructure ext2/3/4: use generic posix ACL infrastructure btrfs: use generic posix ACL infrastructure fs: make posix_acl_create more useful fs: make posix_acl_chmod more useful ...
This commit is contained in:
@@ -1,10 +0,0 @@
|
||||
#ifndef __CRAMFS_H
|
||||
#define __CRAMFS_H
|
||||
|
||||
#include <uapi/linux/cramfs_fs.h>
|
||||
|
||||
/* Uncompression interfaces to the underlying zlib */
|
||||
int cramfs_uncompress_block(void *dst, int dstlen, void *src, int srclen);
|
||||
int cramfs_uncompress_init(void);
|
||||
void cramfs_uncompress_exit(void);
|
||||
#endif
|
||||
@@ -1,20 +0,0 @@
|
||||
#ifndef _CRAMFS_FS_SB
|
||||
#define _CRAMFS_FS_SB
|
||||
|
||||
/*
|
||||
* cramfs super-block data in memory
|
||||
*/
|
||||
struct cramfs_sb_info {
|
||||
unsigned long magic;
|
||||
unsigned long size;
|
||||
unsigned long blocks;
|
||||
unsigned long files;
|
||||
unsigned long flags;
|
||||
};
|
||||
|
||||
static inline struct cramfs_sb_info *CRAMFS_SB(struct super_block *sb)
|
||||
{
|
||||
return sb->s_fs_info;
|
||||
}
|
||||
|
||||
#endif
|
||||
+21
-14
@@ -59,29 +59,36 @@ struct files_struct {
|
||||
struct file __rcu * fd_array[NR_OPEN_DEFAULT];
|
||||
};
|
||||
|
||||
#define rcu_dereference_check_fdtable(files, fdtfd) \
|
||||
(rcu_dereference_check((fdtfd), \
|
||||
lockdep_is_held(&(files)->file_lock) || \
|
||||
atomic_read(&(files)->count) == 1 || \
|
||||
rcu_my_thread_group_empty()))
|
||||
|
||||
#define files_fdtable(files) \
|
||||
(rcu_dereference_check_fdtable((files), (files)->fdt))
|
||||
|
||||
struct file_operations;
|
||||
struct vfsmount;
|
||||
struct dentry;
|
||||
|
||||
extern void __init files_defer_init(void);
|
||||
|
||||
static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd)
|
||||
#define rcu_dereference_check_fdtable(files, fdtfd) \
|
||||
rcu_dereference_check((fdtfd), lockdep_is_held(&(files)->file_lock))
|
||||
|
||||
#define files_fdtable(files) \
|
||||
rcu_dereference_check_fdtable((files), (files)->fdt)
|
||||
|
||||
/*
|
||||
* The caller must ensure that fd table isn't shared or hold rcu or file lock
|
||||
*/
|
||||
static inline struct file *__fcheck_files(struct files_struct *files, unsigned int fd)
|
||||
{
|
||||
struct file * file = NULL;
|
||||
struct fdtable *fdt = files_fdtable(files);
|
||||
struct fdtable *fdt = rcu_dereference_raw(files->fdt);
|
||||
|
||||
if (fd < fdt->max_fds)
|
||||
file = rcu_dereference_check_fdtable(files, fdt->fd[fd]);
|
||||
return file;
|
||||
return rcu_dereference_raw(fdt->fd[fd]);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct file *fcheck_files(struct files_struct *files, unsigned int fd)
|
||||
{
|
||||
rcu_lockdep_assert(rcu_read_lock_held() ||
|
||||
lockdep_is_held(&files->file_lock),
|
||||
"suspicious rcu_dereference_check() usage");
|
||||
return __fcheck_files(files, fd);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1580,6 +1580,7 @@ struct inode_operations {
|
||||
struct file *, unsigned open_flag,
|
||||
umode_t create_mode, int *opened);
|
||||
int (*tmpfile) (struct inode *, struct dentry *, umode_t);
|
||||
int (*set_acl)(struct inode *, struct posix_acl *, int);
|
||||
} ____cacheline_aligned;
|
||||
|
||||
ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
#ifndef LINUX_GENERIC_ACL_H
|
||||
#define LINUX_GENERIC_ACL_H
|
||||
|
||||
#include <linux/xattr.h>
|
||||
|
||||
struct inode;
|
||||
|
||||
extern const struct xattr_handler generic_acl_access_handler;
|
||||
extern const struct xattr_handler generic_acl_default_handler;
|
||||
|
||||
int generic_acl_init(struct inode *, struct inode *);
|
||||
int generic_acl_chmod(struct inode *);
|
||||
|
||||
#endif /* LINUX_GENERIC_ACL_H */
|
||||
+7
-17
@@ -154,10 +154,6 @@ struct nfs_inode {
|
||||
struct rb_root access_cache;
|
||||
struct list_head access_cache_entry_lru;
|
||||
struct list_head access_cache_inode_lru;
|
||||
#ifdef CONFIG_NFS_V3_ACL
|
||||
struct posix_acl *acl_access;
|
||||
struct posix_acl *acl_default;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This is the cookie verifier used for NFSv3 readdir
|
||||
@@ -564,23 +560,17 @@ extern int nfs_readpage_async(struct nfs_open_context *, struct inode *,
|
||||
* linux/fs/nfs3proc.c
|
||||
*/
|
||||
#ifdef CONFIG_NFS_V3_ACL
|
||||
extern struct posix_acl *nfs3_proc_getacl(struct inode *inode, int type);
|
||||
extern int nfs3_proc_setacl(struct inode *inode, int type,
|
||||
struct posix_acl *acl);
|
||||
extern int nfs3_proc_set_default_acl(struct inode *dir, struct inode *inode,
|
||||
umode_t mode);
|
||||
extern void nfs3_forget_cached_acls(struct inode *inode);
|
||||
extern struct posix_acl *nfs3_get_acl(struct inode *inode, int type);
|
||||
extern int nfs3_set_acl(struct inode *inode, struct posix_acl *acl, int type);
|
||||
extern int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
|
||||
struct posix_acl *dfacl);
|
||||
extern const struct xattr_handler *nfs3_xattr_handlers[];
|
||||
#else
|
||||
static inline int nfs3_proc_set_default_acl(struct inode *dir,
|
||||
struct inode *inode,
|
||||
umode_t mode)
|
||||
static inline int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
|
||||
struct posix_acl *dfacl)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void nfs3_forget_cached_acls(struct inode *inode)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_NFS_V3_ACL */
|
||||
|
||||
/*
|
||||
|
||||
+2
-1
@@ -44,11 +44,12 @@ enum utf16_endian {
|
||||
};
|
||||
|
||||
/* nls_base.c */
|
||||
extern int register_nls(struct nls_table *);
|
||||
extern int __register_nls(struct nls_table *, struct module *);
|
||||
extern int unregister_nls(struct nls_table *);
|
||||
extern struct nls_table *load_nls(char *);
|
||||
extern void unload_nls(struct nls_table *);
|
||||
extern struct nls_table *load_nls_default(void);
|
||||
#define register_nls(nls) __register_nls((nls), THIS_MODULE)
|
||||
|
||||
extern int utf8_to_utf32(const u8 *s, int len, unicode_t *pu);
|
||||
extern int utf32_to_utf8(unicode_t u, u8 *s, int maxlen);
|
||||
|
||||
@@ -85,12 +85,20 @@ extern int posix_acl_valid(const struct posix_acl *);
|
||||
extern int posix_acl_permission(struct inode *, const struct posix_acl *, int);
|
||||
extern struct posix_acl *posix_acl_from_mode(umode_t, gfp_t);
|
||||
extern int posix_acl_equiv_mode(const struct posix_acl *, umode_t *);
|
||||
extern int posix_acl_create(struct posix_acl **, gfp_t, umode_t *);
|
||||
extern int posix_acl_chmod(struct posix_acl **, gfp_t, umode_t);
|
||||
extern int __posix_acl_create(struct posix_acl **, gfp_t, umode_t *);
|
||||
extern int __posix_acl_chmod(struct posix_acl **, gfp_t, umode_t);
|
||||
|
||||
extern struct posix_acl *get_posix_acl(struct inode *, int);
|
||||
extern int set_posix_acl(struct inode *, int, struct posix_acl *);
|
||||
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
extern int posix_acl_chmod(struct inode *, umode_t);
|
||||
extern int posix_acl_create(struct inode *, umode_t *, struct posix_acl **,
|
||||
struct posix_acl **);
|
||||
|
||||
extern int simple_set_acl(struct inode *, struct posix_acl *, int);
|
||||
extern int simple_acl_create(struct inode *, struct inode *);
|
||||
|
||||
struct posix_acl **acl_by_type(struct inode *inode, int type);
|
||||
struct posix_acl *get_cached_acl(struct inode *inode, int type);
|
||||
struct posix_acl *get_cached_acl_rcu(struct inode *inode, int type);
|
||||
@@ -100,10 +108,37 @@ void forget_all_cached_acls(struct inode *inode);
|
||||
|
||||
static inline void cache_no_acl(struct inode *inode)
|
||||
{
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
inode->i_acl = NULL;
|
||||
inode->i_default_acl = NULL;
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
static inline int posix_acl_chmod(struct inode *inode, umode_t mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define simple_set_acl NULL
|
||||
|
||||
static inline int simple_acl_create(struct inode *dir, struct inode *inode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void cache_no_acl(struct inode *inode)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int posix_acl_create(struct inode *inode, umode_t *mode,
|
||||
struct posix_acl **default_acl, struct posix_acl **acl)
|
||||
{
|
||||
*default_acl = *acl = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void forget_all_cached_acls(struct inode *inode)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_FS_POSIX_ACL */
|
||||
|
||||
struct posix_acl *get_acl(struct inode *inode, int type);
|
||||
|
||||
#endif /* __LINUX_POSIX_ACL_H */
|
||||
|
||||
@@ -69,4 +69,7 @@ struct posix_acl *posix_acl_from_xattr(struct user_namespace *user_ns,
|
||||
int posix_acl_to_xattr(struct user_namespace *user_ns,
|
||||
const struct posix_acl *acl, void *buffer, size_t size);
|
||||
|
||||
extern const struct xattr_handler posix_acl_access_xattr_handler;
|
||||
extern const struct xattr_handler posix_acl_default_xattr_handler;
|
||||
|
||||
#endif /* _POSIX_ACL_XATTR_H */
|
||||
|
||||
@@ -449,8 +449,6 @@ static inline int rcu_read_lock_sched_held(void)
|
||||
|
||||
#ifdef CONFIG_PROVE_RCU
|
||||
|
||||
int rcu_my_thread_group_empty(void);
|
||||
|
||||
/**
|
||||
* rcu_lockdep_assert - emit lockdep splat if specified condition not met
|
||||
* @c: condition to check
|
||||
|
||||
Reference in New Issue
Block a user