diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-13 05:28:42 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-13 05:28:42 -0400 |
| commit | 77c688ac87183537ed0fb84ec2cb8fa8ec97c458 (patch) | |
| tree | d18e117e05c0d71463823536165ddd9ad75b6bc5 | |
| parent | 5e40d331bd72447197f26525f21711c4a265b6a6 (diff) | |
| parent | a457606a6f81cfddfc9da1ef2a8bf2c65a8eb35e (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs updates from Al Viro:
"The big thing in this pile is Eric's unmount-on-rmdir series; we
finally have everything we need for that. The final piece of prereqs
is delayed mntput() - now filesystem shutdown always happens on
shallow stack.
Other than that, we have several new primitives for iov_iter (Matt
Wilcox, culled from his XIP-related series) pushing the conversion to
->read_iter()/ ->write_iter() a bit more, a bunch of fs/dcache.c
cleanups and fixes (including the external name refcounting, which
gives consistent behaviour of d_move() wrt procfs symlinks for long
and short names alike) and assorted cleanups and fixes all over the
place.
This is just the first pile; there's a lot of stuff from various
people that ought to go in this window. Starting with
unionmount/overlayfs mess... ;-/"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (60 commits)
fs/file_table.c: Update alloc_file() comment
vfs: Deduplicate code shared by xattr system calls operating on paths
reiserfs: remove pointless forward declaration of struct nameidata
don't need that forward declaration of struct nameidata in dcache.h anymore
take dname_external() into fs/dcache.c
let path_init() failures treated the same way as subsequent link_path_walk()
fix misuses of f_count() in ppp and netlink
ncpfs: use list_for_each_entry() for d_subdirs walk
vfs: move getname() from callers to do_mount()
gfs2_atomic_open(): skip lookups on hashed dentry
[infiniband] remove pointless assignments
gadgetfs: saner API for gadgetfs_create_file()
f_fs: saner API for ffs_sb_create_file()
jfs: don't hash direct inode
[s390] remove pointless assignment of ->f_op in vmlogrdr ->open()
ecryptfs: ->f_op is never NULL
android: ->f_op is never NULL
nouveau: __iomem misannotations
missing annotation in fs/file.c
fs: namespace: suppress 'may be used uninitialized' warnings
...
74 files changed, 889 insertions, 960 deletions
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index 8be1ea3bdd5a..fceff7c00a3c 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
| @@ -237,7 +237,7 @@ noted. This means that most methods can block safely. All methods are | |||
| 237 | only called from a process context (i.e. not from an interrupt handler | 237 | only called from a process context (i.e. not from an interrupt handler |
| 238 | or bottom half). | 238 | or bottom half). |
| 239 | 239 | ||
| 240 | alloc_inode: this method is called by inode_alloc() to allocate memory | 240 | alloc_inode: this method is called by alloc_inode() to allocate memory |
| 241 | for struct inode and initialize it. If this function is not | 241 | for struct inode and initialize it. If this function is not |
| 242 | defined, a simple 'struct inode' is allocated. Normally | 242 | defined, a simple 'struct inode' is allocated. Normally |
| 243 | alloc_inode will be used to allocate a larger structure which | 243 | alloc_inode will be used to allocate a larger structure which |
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c index 1402fcc11c2c..f9c732e18284 100644 --- a/arch/alpha/kernel/osf_sys.c +++ b/arch/alpha/kernel/osf_sys.c | |||
| @@ -446,7 +446,8 @@ struct procfs_args { | |||
| 446 | * unhappy with OSF UFS. [CHECKME] | 446 | * unhappy with OSF UFS. [CHECKME] |
| 447 | */ | 447 | */ |
| 448 | static int | 448 | static int |
| 449 | osf_ufs_mount(const char *dirname, struct ufs_args __user *args, int flags) | 449 | osf_ufs_mount(const char __user *dirname, |
| 450 | struct ufs_args __user *args, int flags) | ||
| 450 | { | 451 | { |
| 451 | int retval; | 452 | int retval; |
| 452 | struct cdfs_args tmp; | 453 | struct cdfs_args tmp; |
| @@ -466,7 +467,8 @@ osf_ufs_mount(const char *dirname, struct ufs_args __user *args, int flags) | |||
| 466 | } | 467 | } |
| 467 | 468 | ||
| 468 | static int | 469 | static int |
| 469 | osf_cdfs_mount(const char *dirname, struct cdfs_args __user *args, int flags) | 470 | osf_cdfs_mount(const char __user *dirname, |
| 471 | struct cdfs_args __user *args, int flags) | ||
| 470 | { | 472 | { |
| 471 | int retval; | 473 | int retval; |
| 472 | struct cdfs_args tmp; | 474 | struct cdfs_args tmp; |
| @@ -486,7 +488,8 @@ osf_cdfs_mount(const char *dirname, struct cdfs_args __user *args, int flags) | |||
| 486 | } | 488 | } |
| 487 | 489 | ||
| 488 | static int | 490 | static int |
| 489 | osf_procfs_mount(const char *dirname, struct procfs_args __user *args, int flags) | 491 | osf_procfs_mount(const char __user *dirname, |
| 492 | struct procfs_args __user *args, int flags) | ||
| 490 | { | 493 | { |
| 491 | struct procfs_args tmp; | 494 | struct procfs_args tmp; |
| 492 | 495 | ||
| @@ -500,28 +503,22 @@ SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, const char __user *, path, | |||
| 500 | int, flag, void __user *, data) | 503 | int, flag, void __user *, data) |
| 501 | { | 504 | { |
| 502 | int retval; | 505 | int retval; |
| 503 | struct filename *name; | ||
| 504 | 506 | ||
| 505 | name = getname(path); | ||
| 506 | retval = PTR_ERR(name); | ||
| 507 | if (IS_ERR(name)) | ||
| 508 | goto out; | ||
| 509 | switch (typenr) { | 507 | switch (typenr) { |
| 510 | case 1: | 508 | case 1: |
| 511 | retval = osf_ufs_mount(name->name, data, flag); | 509 | retval = osf_ufs_mount(path, data, flag); |
| 512 | break; | 510 | break; |
| 513 | case 6: | 511 | case 6: |
| 514 | retval = osf_cdfs_mount(name->name, data, flag); | 512 | retval = osf_cdfs_mount(path, data, flag); |
| 515 | break; | ||
