From: Robert Richter <robert.rich...@calxeda.com> There is already a function anon_inode_getfd() that does already all the work. Reworking and simplifying code.
Signed-off-by: Robert Richter <robert.rich...@calxeda.com> --- kernel/events/persistent.c | 35 +++++++---------------------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/kernel/events/persistent.c b/kernel/events/persistent.c index 7d1aff3..4ecbdab 100644 --- a/kernel/events/persistent.c +++ b/kernel/events/persistent.c @@ -87,33 +87,6 @@ static void del_persistent_event(int cpu, struct perf_event_attr *attr) kfree(desc); } -static int __alloc_persistent_event_fd(struct pers_event_desc *desc) -{ - struct file *event_file = NULL; - int event_fd = -1; - - event_fd = get_unused_fd(); - if (event_fd < 0) - goto out; - - event_file = anon_inode_getfile("[pers_event]", &perf_fops, - desc->event, O_RDONLY); - if (IS_ERR(event_file)) - goto err_event_file; - - desc->fd = event_fd; - fd_install(event_fd, event_file); - - goto out; - - - err_event_file: - put_unused_fd(event_fd); - - out: - return event_fd; -} - /* * Create and enable the persistent version of the perf event described by * @attr. @@ -165,11 +138,17 @@ int perf_add_persistent_event_by_id(int id) int perf_get_persistent_event_fd(unsigned cpu, struct perf_event_attr *attr) { struct pers_event_desc *desc = get_persistent_event(cpu, attr); + int event_fd; if (!desc) return -ENODEV; - return __alloc_persistent_event_fd(desc); + event_fd = anon_inode_getfd("[pers_event]", &perf_fops, + desc->event, O_RDONLY); + if (event_fd >= 0) + desc->fd = event_fd; + + return event_fd; } -- 1.8.1.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/