android_kernel_samsung_sm8650/fs
Davidlohr Bueso 6e399cd144 prctl: avoid using mmap_sem for exe_file serialization
Oleg cleverly suggested using xchg() to set the new mm->exe_file instead
of calling set_mm_exe_file() which requires some form of serialization --
mmap_sem in this case.  For archs that do not have atomic rmw instructions
we still fallback to a spinlock alternative, so this should always be
safe.  As such, we only need the mmap_sem for looking up the backing
vm_file, which can be done sharing the lock.  Naturally, this means we
need to manually deal with both the new and old file reference counting,
and we need not worry about the MMF_EXE_FILE_CHANGED bits, which can
probably be deleted in the future anyway.

Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Suggested-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Oleg Nesterov <oleg@redhat.com>
Reviewed-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2015-04-17 09:04:07 -04:00
..
9p make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
adfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
affs Merge branch 'for-linus-1' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-04-14 15:31:03 -07:00
afs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
autofs4 autofs: switch to __vfs_write() 2015-04-11 22:29:37 -04:00
befs befs: replace typedef befs_inode_info by structure 2015-04-17 09:04:03 -04:00
bfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
btrfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
cachefiles Cachefiles: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions 2015-02-22 11:38:41 -05:00
ceph make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
cifs Merge branch 'for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-04-15 13:22:56 -07:00
coda make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
configfs configfs: Fix potential NULL d_inode dereference 2015-02-20 04:56:43 -05:00
cramfs fs/cramfs/inode.c: use linux/uaccess.h 2014-08-08 15:57:25 -07:00
debugfs debugfs: allow bad parent pointers to be passed in 2015-04-03 16:30:12 +02:00
devpts
dlm netlink: make nlmsg_end() and genlmsg_end() void 2015-01-18 01:03:45 -05:00
ecryptfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
efivarfs * Move efivarfs from the misc filesystem section to pseudo filesystem, 2015-01-29 19:16:40 +01:00
efs fs/efs/namei.c: return is not a function 2014-08-08 15:57:18 -07:00
exofs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
exportfs VFS: (Scripted) Convert S_ISLNK/DIR/REG(dentry->d_inode) to d_is_*(dentry) 2015-02-22 11:38:41 -05:00
ext2 Merge branch 'akpm' (patches from Andrew) 2015-04-15 16:39:15 -07:00
ext3 make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
ext4 Merge branch 'akpm' (patches from Andrew) 2015-04-15 16:39:15 -07:00
f2fs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
fat fs/fat: comment fix, fat_bits can be also 32 2015-04-17 09:04:06 -04:00
freevxfs
fscache fs/fscache/object-list.c: use __seq_open_private() 2014-10-13 17:52:21 +01:00
fuse fuse: use iov_iter_get_pages() for non-splice path 2015-04-11 22:29:41 -04:00
gfs2 Merge branch 'for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-04-15 13:22:56 -07:00
hfs hfs: incorrect return values 2015-04-17 09:04:04 -04:00
hfsplus hfsplus: don't store special "osx" xattr prefix on-disk 2015-04-17 09:04:05 -04:00
hostfs Merge tag 'for-linus-4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml 2015-04-15 13:49:27 -07:00
hpfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
hppfs VFS: (Scripted) Convert S_ISLNK/DIR/REG(dentry->d_inode) to d_is_*(dentry) 2015-02-22 11:38:41 -05:00
hugetlbfs Merge branch 'akpm' (patches from Andrew) 2015-04-15 16:39:15 -07:00
isofs isofs: Fix bug in the way to check if the year is a leap year 2015-01-07 09:51:49 +01:00
jbd jbd: Deletion of an unnecessary check before the function call "iput" 2014-11-18 10:15:29 +01:00
jbd2 jbd2: complain about descriptor block checksum errors 2015-01-19 15:59:58 -05:00
jffs2 Merge branch 'for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-04-15 13:22:56 -07:00
jfs Merge branch 'akpm' (patches from Andrew) 2015-04-15 16:39:15 -07:00
kernfs kernfs: handle poll correctly on 'direct_read' files. 2015-03-16 21:51:20 +01:00
lockd Merge branch 'for-3.20' of git://linux-nfs.org/~bfields/linux 2015-02-12 10:39:41 -08:00
logfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
minix make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
ncpfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
nfs Merge branch 'akpm' (patches from Andrew) 2015-04-15 16:39:15 -07:00
nfs_common lockd: move lockd's grace period handling into its own module 2014-09-17 16:33:11 -04:00
nfsd Merge branch 'akpm' (patches from Andrew) 2015-04-15 16:39:15 -07:00
nilfs2 nilfs2: use inode_set_flags() in nilfs_set_inode_flags() 2015-04-17 09:04:04 -04:00
nls
notify fanotify: fix event filtering with FAN_ONDIR set 2015-03-12 18:46:08 -07:00
ntfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
ocfs2 Merge branch 'for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-04-15 13:22:56 -07:00
omfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
openpromfs
overlayfs ovl: upper fs should not be R/O 2015-03-18 10:29:48 +01:00
proc proc: remove use of seq_printf return value 2015-04-15 16:35:25 -07:00
pstore pstore: Fix the ramoops module parameters update 2015-03-16 11:14:10 -07:00
qnx4
qnx6 fs/qnx6: update debugging to current functions 2014-08-08 15:57:26 -07:00
quota Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs 2015-02-10 15:52:38 -08:00
ramfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
reiserfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
romfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
squashfs Squashfs: Add LZ4 compression configuration option 2014-11-27 18:48:44 +00:00
sysfs sysfs: Only accept read/write permissions for file attributes 2015-03-25 13:27:57 +01:00
sysv make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
tracefs tracing: Have mkdir and rmdir be part of tracefs 2015-02-03 12:48:43 -05:00
ubifs This pull request includes the following UBI/UBIFS changes: 2015-04-15 13:43:40 -07:00
udf make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
ufs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
xfs make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
aio.c Merge branch 'for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-04-15 13:22:56 -07:00
anon_inodes.c
attr.c
bad_inode.c don't bother with most of the bad_file_ops methods 2015-02-20 04:03:58 -05:00
binfmt_aout.c assorted conversions to %p[dD] 2014-11-19 13:01:20 -05:00
binfmt_elf_fdpic.c handle suicide on late failure exits in execve() in search_binary_handler() 2014-10-09 02:39:00 -04:00
binfmt_elf.c mm: fold arch_randomize_brk into ARCH_HAS_ELF_RANDOMIZE 2015-04-14 16:49:05 -07:00
binfmt_em86.c syscalls: implement execveat() system call 2014-12-13 12:42:51 -08:00
binfmt_flat.c
binfmt_misc.c fs/binfmt_misc.c: simplify entry_status() 2015-04-17 09:03:59 -04:00
binfmt_script.c syscalls: implement execveat() system call 2014-12-13 12:42:51 -08:00
block_dev.c make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
buffer.c page_writeback: clean up mess around cancel_dirty_page() 2015-04-14 16:49:01 -07:00
char_dev.c fs: introduce f_op->mmap_capabilities for nommu mmap support 2015-01-20 14:02:58 -07:00
compat_binfmt_elf.c
compat_ioctl.c Bluetooth: bnep: Add support for get bnep features via ioctl 2015-04-03 23:21:34 +02:00
compat.c vfs: make first argument of dir_context.actor typed 2014-10-31 17:48:54 -04:00
coredump.c coredump: accept any write method 2015-04-11 22:29:39 -04:00
dax.c dax: use pfn_mkwrite to update c/mtime + freeze protection 2015-04-15 16:35:20 -07:00
dcache.c dcache: return -ESTALE not -EBUSY on distributed fs race 2015-04-11 22:24:33 -04:00
dcookies.c
direct-io.c fs: move struct kiocb to fs.h 2015-03-25 20:28:11 -04:00
drop_caches.c vmscan: per memory cgroup slab shrinkers 2015-02-12 18:54:09 -08:00
eventfd.c eventfd: don't take the spinlock in eventfd_poll 2015-02-17 14:34:52 -08:00
eventpoll.c epoll: optimize setting task running after blocking 2015-02-13 21:21:40 -08:00
exec.c prctl: avoid using mmap_sem for exe_file serialization 2015-04-17 09:04:07 -04:00
fcntl.c vfs: renumber FMODE_NONOTIFY and add to uniqueness check 2015-01-08 15:10:52 -08:00
fhandle.c
file_table.c ->aio_read and ->aio_write removed 2015-04-11 22:29:43 -04:00
file.c mm: rcu-protected get_mm_exe_file() 2015-04-17 09:04:07 -04:00
filesystems.c
fs_pin.c switch the IO-triggering parts of umount to fs_pin 2015-01-25 23:17:29 -05:00
fs_struct.c
fs-writeback.c fs: add dirtytime_expire_seconds sysctl 2015-03-17 12:23:32 -04:00
inode.c Merge branch 'lazytime' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-02-17 16:12:34 -08:00
internal.h trylock_super(): replacement for grab_super_passive() 2015-02-22 11:38:42 -05:00
ioctl.c fsioctl.c: make generic_block_fiemap() signal-tolerant 2015-02-10 14:30:30 -08:00
Kconfig dax: does not work correctly with virtual aliasing caches 2015-02-16 17:56:04 -08:00
Kconfig.binfmt mm: split ET_DYN ASLR from mmap ASLR 2015-04-14 16:49:05 -07:00
libfs.c VFS: (Scripted) Convert S_ISLNK/DIR/REG(dentry->d_inode) to d_is_*(dentry) 2015-02-22 11:38:41 -05:00
locks.c locks: use cmpxchg to assign i_flctx pointer 2015-04-03 09:04:04 -04:00
Makefile This adds the new tracefs file system. This has been in linux-next for 2015-04-14 10:22:29 -07:00
mbcache.c
mount.h switch the IO-triggering parts of umount to fs_pin 2015-01-25 23:17:29 -05:00
mpage.c vfs: guard end of device for mpage interface 2014-10-09 22:25:53 -04:00
namei.c remove incorrect comment in lookup_one_len() 2015-04-11 22:24:30 -04:00
namespace.c VFS: (Scripted) Convert S_ISLNK/DIR/REG(dentry->d_inode) to d_is_*(dentry) 2015-02-22 11:38:41 -05:00
no-block.c
nsfs.c take the targets of /proc/*/ns/* symlinks to separate fs 2014-12-10 21:30:20 -05:00
open.c ->aio_read and ->aio_write removed 2015-04-11 22:29:43 -04:00
pipe.c make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
pnode.c mnt: Move the clear of MNT_LOCKED from copy_tree to it's callers. 2014-12-02 10:46:50 -06:00
pnode.h
posix_acl.c VFS: (Scripted) Convert S_ISLNK/DIR/REG(dentry->d_inode) to d_is_*(dentry) 2015-02-22 11:38:41 -05:00
proc_namespace.c vfs: add support for a lazytime mount option 2015-02-05 02:45:00 -05:00
read_write.c ->aio_read and ->aio_write removed 2015-04-11 22:29:43 -04:00
readdir.c vfs: make first argument of dir_context.actor typed 2014-10-31 17:48:54 -04:00
select.c all arches, signal: move restart_block to struct task_struct 2015-02-12 18:54:12 -08:00
seq_file.c bitmap, cpumask, nodemask: remove dedicated formatting functions 2015-02-13 21:21:39 -08:00
signalfd.c fs: Convert show_fdinfo functions to void 2014-11-05 14:13:23 -05:00
splice.c dax: unify ext2/4_{dax,}_file_operations 2015-04-15 16:35:20 -07:00
stack.c fs: fix comment for 'CONFIG_LBADF' 2014-08-26 09:35:56 +02:00
stat.c switch security_inode_getattr() to struct path * 2015-04-11 22:24:32 -04:00
statfs.c
super.c cleancache: remove limit on the number of cleancache enabled filesystems 2015-04-14 16:49:03 -07:00
sync.c vfs: add support for a lazytime mount option 2015-02-05 02:45:00 -05:00
timerfd.c fs: Convert show_fdinfo functions to void 2014-11-05 14:13:23 -05:00
utimes.c
xattr.c new helper: audit_file() 2014-11-19 13:01:26 -05:00