You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs changes from Al Viro.
"A lot of misc stuff. The obvious groups:
* Miklos' atomic_open series; kills the damn abuse of
->d_revalidate() by NFS, which was the major stumbling block for
all work in that area.
* ripping security_file_mmap() and dealing with deadlocks in the
area; sanitizing the neighborhood of vm_mmap()/vm_munmap() in
general.
* ->encode_fh() switched to saner API; insane fake dentry in
mm/cleancache.c gone.
* assorted annotations in fs (endianness, __user)
* parts of Artem's ->s_dirty work (jff2 and reiserfs parts)
* ->update_time() work from Josef.
* other bits and pieces all over the place.
Normally it would've been in two or three pull requests, but
signal.git stuff had eaten a lot of time during this cycle ;-/"
Fix up trivial conflicts in Documentation/filesystems/vfs.txt (the
'truncate_range' inode method was removed by the VM changes, the VFS
update adds an 'update_time()' method), and in fs/btrfs/ulist.[ch] (due
to sparse fix added twice, with other changes nearby).
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (95 commits)
nfs: don't open in ->d_revalidate
vfs: retry last component if opening stale dentry
vfs: nameidata_to_filp(): don't throw away file on error
vfs: nameidata_to_filp(): inline __dentry_open()
vfs: do_dentry_open(): don't put filp
vfs: split __dentry_open()
vfs: do_last() common post lookup
vfs: do_last(): add audit_inode before open
vfs: do_last(): only return EISDIR for O_CREAT
vfs: do_last(): check LOOKUP_DIRECTORY
vfs: do_last(): make ENOENT exit RCU safe
vfs: make follow_link check RCU safe
vfs: do_last(): use inode variable
vfs: do_last(): inline walk_component()
vfs: do_last(): make exit RCU safe
vfs: split do_lookup()
Btrfs: move over to use ->update_time
fs: introduce inode operation ->update_time
reiserfs: get rid of resierfs_sync_super
reiserfs: mark the superblock as dirty a bit later
...
This commit is contained in:
@@ -61,6 +61,7 @@ ata *);
|
||||
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
||||
int (*removexattr) (struct dentry *, const char *);
|
||||
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
|
||||
void (*update_time)(struct inode *, struct timespec *, int);
|
||||
|
||||
locking rules:
|
||||
all may block
|
||||
@@ -87,6 +88,8 @@ getxattr: no
|
||||
listxattr: no
|
||||
removexattr: yes
|
||||
fiemap: no
|
||||
update_time: no
|
||||
|
||||
Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
|
||||
victim.
|
||||
cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem.
|
||||
|
||||
@@ -363,6 +363,7 @@ struct inode_operations {
|
||||
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
|
||||
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
||||
int (*removexattr) (struct dentry *, const char *);
|
||||
void (*update_time)(struct inode *, struct timespec *, int);
|
||||
};
|
||||
|
||||
Again, all methods are called without any locks being held, unless
|
||||
@@ -471,6 +472,9 @@ otherwise noted.
|
||||
removexattr: called by the VFS to remove an extended attribute from
|
||||
a file. This method is called by removexattr(2) system call.
|
||||
|
||||
update_time: called by the VFS to update a specific time or the i_version of
|
||||
an inode. If this is not defined the VFS will update the inode itself
|
||||
and call mark_inode_dirty_sync.
|
||||
|
||||
The Address Space Object
|
||||
========================
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
typedef unsigned int __kernel_ino_t;
|
||||
#define __kernel_ino_t __kernel_ino_t
|
||||
|
||||
typedef unsigned int __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef unsigned long __kernel_sigset_t; /* at least 32 bits */
|
||||
|
||||
#include <asm-generic/posix_types.h>
|
||||
|
||||
@@ -22,9 +22,6 @@
|
||||
typedef unsigned short __kernel_mode_t;
|
||||
#define __kernel_mode_t __kernel_mode_t
|
||||
|
||||
typedef unsigned short __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef unsigned short __kernel_ipc_pid_t;
|
||||
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
|
||||
|
||||
|
||||
@@ -17,9 +17,6 @@
|
||||
typedef unsigned short __kernel_mode_t;
|
||||
#define __kernel_mode_t __kernel_mode_t
|
||||
|
||||
typedef unsigned short __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef unsigned short __kernel_ipc_pid_t;
|
||||
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
|
||||
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
typedef unsigned short __kernel_mode_t;
|
||||
#define __kernel_mode_t __kernel_mode_t
|
||||
|
||||
typedef unsigned short __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef unsigned int __kernel_ipc_pid_t;
|
||||
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
|
||||
|
||||
|
||||
@@ -15,9 +15,6 @@
|
||||
typedef unsigned short __kernel_mode_t;
|
||||
#define __kernel_mode_t __kernel_mode_t
|
||||
|
||||
typedef unsigned short __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef unsigned short __kernel_ipc_pid_t;
|
||||
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
|
||||
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
typedef unsigned short __kernel_mode_t;
|
||||
#define __kernel_mode_t __kernel_mode_t
|
||||
|
||||
typedef unsigned short __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef unsigned short __kernel_ipc_pid_t;
|
||||
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
|
||||
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
typedef unsigned short __kernel_mode_t;
|
||||
#define __kernel_mode_t __kernel_mode_t
|
||||
|
||||
typedef unsigned short __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef unsigned short __kernel_ipc_pid_t;
|
||||
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
|
||||
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
#ifndef _ASM_IA64_POSIX_TYPES_H
|
||||
#define _ASM_IA64_POSIX_TYPES_H
|
||||
|
||||
typedef unsigned int __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef unsigned long __kernel_sigset_t; /* at least 32 bits */
|
||||
|
||||
#include <asm-generic/posix_types.h>
|
||||
|
||||
@@ -604,12 +604,6 @@ pfm_unprotect_ctx_ctxsw(pfm_context_t *x, unsigned long f)
|
||||
spin_unlock(&(x)->ctx_lock);
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
pfm_get_unmapped_area(struct file *file, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags, unsigned long exec)
|
||||
{
|
||||
return get_unmapped_area(file, addr, len, pgoff, flags);
|
||||
}
|
||||
|
||||
/* forward declaration */
|
||||
static const struct dentry_operations pfmfs_dentry_operations;
|
||||
|
||||
@@ -2333,8 +2327,8 @@ pfm_smpl_buffer_alloc(struct task_struct *task, struct file *filp, pfm_context_t
|
||||
down_write(&task->mm->mmap_sem);
|
||||
|
||||
/* find some free area in address space, must have mmap sem held */
|
||||
vma->vm_start = pfm_get_unmapped_area(NULL, 0, size, 0, MAP_PRIVATE|MAP_ANONYMOUS, 0);
|
||||
if (vma->vm_start == 0UL) {
|
||||
vma->vm_start = get_unmapped_area(NULL, 0, size, 0, MAP_PRIVATE|MAP_ANONYMOUS);
|
||||
if (IS_ERR_VALUE(vma->vm_start)) {
|
||||
DPRINT(("Cannot find unmapped area for size %ld\n", size));
|
||||
up_write(&task->mm->mmap_sem);
|
||||
goto error;
|
||||
|
||||
@@ -171,22 +171,9 @@ asmlinkage unsigned long
|
||||
ia64_mremap (unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags,
|
||||
unsigned long new_addr)
|
||||
{
|
||||
extern unsigned long do_mremap (unsigned long addr,
|
||||
unsigned long old_len,
|
||||
unsigned long new_len,
|
||||
unsigned long flags,
|
||||
unsigned long new_addr);
|
||||
|
||||
down_write(¤t->mm->mmap_sem);
|
||||
{
|
||||
addr = do_mremap(addr, old_len, new_len, flags, new_addr);
|
||||
}
|
||||
up_write(¤t->mm->mmap_sem);
|
||||
|
||||
if (IS_ERR((void *) addr))
|
||||
return addr;
|
||||
|
||||
force_successful_syscall_return();
|
||||
addr = sys_mremap(addr, old_len, new_len, flags, new_addr);
|
||||
if (!IS_ERR((void *) addr))
|
||||
force_successful_syscall_return();
|
||||
return addr;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
typedef unsigned short __kernel_mode_t;
|
||||
#define __kernel_mode_t __kernel_mode_t
|
||||
|
||||
typedef unsigned short __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef unsigned short __kernel_ipc_pid_t;
|
||||
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
|
||||
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
typedef unsigned short __kernel_mode_t;
|
||||
#define __kernel_mode_t __kernel_mode_t
|
||||
|
||||
typedef unsigned short __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef unsigned short __kernel_ipc_pid_t;
|
||||
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
|
||||
|
||||
|
||||
@@ -17,11 +17,6 @@
|
||||
* assume GCC is being used.
|
||||
*/
|
||||
|
||||
#if (_MIPS_SZLONG == 64)
|
||||
typedef unsigned int __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
#endif
|
||||
|
||||
typedef long __kernel_daddr_t;
|
||||
#define __kernel_daddr_t __kernel_daddr_t
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ struct stat {
|
||||
long st_pad1[3]; /* Reserved for network id */
|
||||
ino_t st_ino;
|
||||
mode_t st_mode;
|
||||
nlink_t st_nlink;
|
||||
__u32 st_nlink;
|
||||
uid_t st_uid;
|
||||
gid_t st_gid;
|
||||
unsigned st_rdev;
|
||||
@@ -55,7 +55,7 @@ struct stat64 {
|
||||
unsigned long long st_ino;
|
||||
|
||||
mode_t st_mode;
|
||||
nlink_t st_nlink;
|
||||
__u32 st_nlink;
|
||||
|
||||
uid_t st_uid;
|
||||
gid_t st_gid;
|
||||
@@ -96,7 +96,7 @@ struct stat {
|
||||
unsigned long st_ino;
|
||||
|
||||
mode_t st_mode;
|
||||
nlink_t st_nlink;
|
||||
__u32 st_nlink;
|
||||
|
||||
uid_t st_uid;
|
||||
gid_t st_gid;
|
||||
|
||||
@@ -20,9 +20,6 @@
|
||||
typedef unsigned short __kernel_mode_t;
|
||||
#define __kernel_mode_t __kernel_mode_t
|
||||
|
||||
typedef unsigned short __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef unsigned short __kernel_ipc_pid_t;
|
||||
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
|
||||
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
typedef unsigned short __kernel_mode_t;
|
||||
#define __kernel_mode_t __kernel_mode_t
|
||||
|
||||
typedef unsigned short __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef unsigned short __kernel_ipc_pid_t;
|
||||
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ struct stat {
|
||||
unsigned int st_dev; /* dev_t is 32 bits on parisc */
|
||||
ino_t st_ino; /* 32 bits */
|
||||
mode_t st_mode; /* 16 bits */
|
||||
nlink_t st_nlink; /* 16 bits */
|
||||
unsigned short st_nlink; /* 16 bits */
|
||||
unsigned short st_reserved1; /* old st_uid */
|
||||
unsigned short st_reserved2; /* old st_gid */
|
||||
unsigned int st_rdev;
|
||||
@@ -42,7 +42,7 @@ struct hpux_stat64 {
|
||||
unsigned int st_dev; /* dev_t is 32 bits on parisc */
|
||||
ino_t st_ino; /* 32 bits */
|
||||
mode_t st_mode; /* 16 bits */
|
||||
nlink_t st_nlink; /* 16 bits */
|
||||
unsigned short st_nlink; /* 16 bits */
|
||||
unsigned short st_reserved1; /* old st_uid */
|
||||
unsigned short st_reserved2; /* old st_gid */
|
||||
unsigned int st_rdev;
|
||||
|
||||
@@ -16,9 +16,6 @@ typedef int __kernel_ssize_t;
|
||||
typedef long __kernel_ptrdiff_t;
|
||||
#define __kernel_size_t __kernel_size_t
|
||||
|
||||
typedef unsigned short __kernel_nlink_t;
|
||||
#define __kernel_nlink_t __kernel_nlink_t
|
||||
|
||||
typedef short __kernel_ipc_pid_t;
|
||||
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
|
||||
#endif
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user