aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-07-19 11:35:08 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2019-07-19 11:35:08 -0700
commit4f5ed1318c0108369a76f4a56242fbeea537abe9 (patch)
treee1092bbcf848124782edc05d931afbec27600357
parentMerge branch 'work.adfs' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs (diff)
parentperf_event_get(): don't bother with fget_raw() (diff)
downloadlinux-dev-4f5ed1318c0108369a76f4a56242fbeea537abe9.tar.xz
linux-dev-4f5ed1318c0108369a76f4a56242fbeea537abe9.zip
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull misc vfs updates from Al Viro: "Assorted stuff" * 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: perf_event_get(): don't bother with fget_raw() vfs: update d_make_root() description
-rw-r--r--Documentation/filesystems/porting15
-rw-r--r--kernel/events/core.c4
2 files changed, 14 insertions, 5 deletions
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting
index 2813a19389fe..209672010fb4 100644
--- a/Documentation/filesystems/porting
+++ b/Documentation/filesystems/porting
@@ -428,8 +428,19 @@ release it yourself.
--
[mandatory]
d_alloc_root() is gone, along with a lot of bugs caused by code
-misusing it. Replacement: d_make_root(inode). The difference is,
-d_make_root() drops the reference to inode if dentry allocation fails.
+misusing it. Replacement: d_make_root(inode). On success d_make_root(inode)
+allocates and returns a new dentry instantiated with the passed in inode.
+On failure NULL is returned and the passed in inode is dropped so the reference
+to inode is consumed in all cases and failure handling need not do any cleanup
+for the inode. If d_make_root(inode) is passed a NULL inode it returns NULL
+and also requires no further error handling. Typical usage is:
+
+ inode = foofs_new_inode(....);
+ s->s_root = d_make_inode(inode);
+ if (!s->s_root)
+ /* Nothing needed for the inode cleanup */
+ return -ENOMEM;
+ ...
--
[mandatory]
diff --git a/kernel/events/core.c b/kernel/events/core.c
index eea9d52b010c..026a14541a38 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -11618,9 +11618,7 @@ void perf_event_delayed_put(struct task_struct *task)
struct file *perf_event_get(unsigned int fd)
{
- struct file *file;
-
- file = fget_raw(fd);
+ struct file *file = fget(fd);
if (!file)
return ERR_PTR(-EBADF);