diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-08-25 15:25:38 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-08-25 15:25:38 -0400 |
| commit | 4d4323ea2dbb506a29260a41b554dfc7de79249e (patch) | |
| tree | c79ad1c770bd8b44f4afd3e5e4b5745bbdd42a6a /fs | |
| parent | 8495e9c4a9616c9d19f23182d0536485902259db (diff) | |
| parent | 52e220d357a38cb29fa2e29f34ed94c1d66357f4 (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs fixes from Al Viro:
"Assorted fixes from the last week or so"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
VFS: collect_mounts() should return an ERR_PTR
bfs: iget_locked() doesn't return an ERR_PTR
efs: iget_locked() doesn't return an ERR_PTR()
proc: kill the extra proc_readfd_common()->dir_emit_dots()
cope with potentially long ->d_dname() output for shmem/hugetlb
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/bfs/inode.c | 2 | ||||
| -rw-r--r-- | fs/dcache.c | 11 | ||||
| -rw-r--r-- | fs/efs/inode.c | 2 | ||||
| -rw-r--r-- | fs/hugetlbfs/inode.c | 8 | ||||
| -rw-r--r-- | fs/namespace.c | 2 | ||||
| -rw-r--r-- | fs/proc/fd.c | 2 |
6 files changed, 15 insertions, 12 deletions
diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c index 5e376bb93419..8defc6b3f9a2 100644 --- a/fs/bfs/inode.c +++ b/fs/bfs/inode.c | |||
| @@ -40,7 +40,7 @@ struct inode *bfs_iget(struct super_block *sb, unsigned long ino) | |||
| 40 | int block, off; | 40 | int block, off; |
| 41 | 41 | ||
| 42 | inode = iget_locked(sb, ino); | 42 | inode = iget_locked(sb, ino); |
| 43 | if (IS_ERR(inode)) | 43 | if (!inode) |
| 44 | return ERR_PTR(-ENOMEM); | 44 | return ERR_PTR(-ENOMEM); |
| 45 | if (!(inode->i_state & I_NEW)) | 45 | if (!(inode->i_state & I_NEW)) |
| 46 | return inode; | 46 | return inode; |
diff --git a/fs/dcache.c b/fs/dcache.c index 87bdb5329c3c..83cfb834db03 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
| @@ -2724,6 +2724,17 @@ char *dynamic_dname(struct dentry *dentry, char *buffer, int buflen, | |||
| 2724 | return memcpy(buffer, temp, sz); | 2724 | return memcpy(buffer, temp, sz); |
| 2725 | } | 2725 | } |
| 2726 | 2726 | ||
| 2727 | char *simple_dname(struct dentry *dentry, char *buffer, int buflen) | ||
| 2728 | { | ||
| 2729 | char *end = buffer + buflen; | ||
| 2730 | /* these dentries are never renamed, so d_lock is not needed */ | ||
| 2731 | if (prepend(&end, &buflen, " (deleted)", 11) || | ||
| 2732 | prepend_name(&end, &buflen, &dentry->d_name) || | ||
| 2733 | prepend(&end, &buflen, "/", 1)) | ||
| 2734 | end = ERR_PTR(-ENAMETOOLONG); | ||
| 2735 | return end; | ||
| 2736 | } | ||
| 2737 | |||
| 2727 | /* | 2738 | /* |
| 2728 | * Write full pathname from the root of the filesystem into the buffer. | 2739 | * Write full pathname from the root of the filesystem into the buffer. |
| 2729 | */ | 2740 | */ |
diff --git a/fs/efs/inode.c b/fs/efs/inode.c index f3913eb2c474..d15ccf20f1b3 100644 --- a/fs/efs/inode.c +++ b/fs/efs/inode.c | |||
| @@ -57,7 +57,7 @@ struct inode *efs_iget(struct super_block *super, unsigned long ino) | |||
| 57 | struct inode *inode; | 57 | struct inode *inode; |
| 58 | 58 | ||
| 59 | inode = iget_locked(super, ino); | 59 | inode = iget_locked(super, ino); |
| 60 | if (IS_ERR(inode)) | 60 | if (!inode) |
| 61 | return ERR_PTR(-ENOMEM); | 61 | return ERR_PTR(-ENOMEM); |
| 62 | if (!(inode->i_state & I_NEW)) | 62 | if (!(inode->i_state & I_NEW)) |
| 63 | return inode; | 63 | return inode; |
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 34423978b170..d19b30ababf1 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c | |||
| @@ -926,14 +926,8 @@ static int get_hstate_idx(int page_size_log) | |||
| 926 | return h - hstates; | 926 | return h - hstates; |
| 927 | } | 927 | } |
| 928 | 928 | ||
| 929 | static char *hugetlb_dname(struct dentry *dentry, char *buffer, int buflen) | ||
| 930 | { | ||
| 931 | return dynamic_dname(dentry, buffer, buflen, "/%s (deleted)", | ||
| 932 | dentry->d_name.name); | ||
| 933 | } | ||
| 934 | |||
| 935 | static struct dentry_operations anon_ops = { | 929 | static struct dentry_operations anon_ops = { |
| 936 | .d_dname = hugetlb_dname | 930 | .d_dname = simple_dname |
| 937 | }; | 931 | }; |
| 938 | 932 | ||
| 939 | /* | 933 | /* |
diff --git a/fs/namespace.c b/fs/namespace.c index 7b1ca9ba0b0a..a45ba4f267fe 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
| @@ -1429,7 +1429,7 @@ struct vfsmount *collect_mounts(struct path *path) | |||
| 1429 | CL_COPY_ALL | CL_PRIVATE); | 1429 | CL_COPY_ALL | CL_PRIVATE); |
| 1430 | namespace_unlock(); | 1430 | namespace_unlock(); |
| 1431 | if (IS_ERR(tree)) | 1431 | if (IS_ERR(tree)) |
| 1432 | return NULL; | 1432 | return ERR_CAST(tree); |
| 1433 | return &tree->mnt; | 1433 | return &tree->mnt; |
| 1434 | } | 1434 | } |
| 1435 | 1435 | ||
diff --git a/fs/proc/fd.c b/fs/proc/fd.c index 75f2890abbd8..0ff80f9b930f 100644 --- a/fs/proc/fd.c +++ b/fs/proc/fd.c | |||
| @@ -230,8 +230,6 @@ static int proc_readfd_common(struct file *file, struct dir_context *ctx, | |||
| 230 | 230 | ||
| 231 | if (!dir_emit_dots(file, ctx)) | 231 | if (!dir_emit_dots(file, ctx)) |
| 232 | goto out; | 232 | goto out; |
| 233 | if (!dir_emit_dots(file, ctx)) | ||
| 234 | goto out; | ||
| 235 | files = get_files_struct(p); | 233 | files = get_files_struct(p); |
| 236 | if (!files) | 234 | if (!files) |
| 237 | goto out; | 235 | goto out; |
