-/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1)
+/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
*
* lttng-abi.c
*
#include <linux/uaccess.h>
#include <linux/slab.h>
#include <linux/err.h>
-#include <wrapper/vmalloc.h> /* for wrapper_vmalloc_sync_all() */
+#include <linux/kref.h>
#include <wrapper/ringbuffer/vfs.h>
#include <wrapper/ringbuffer/backend.h>
#include <wrapper/ringbuffer/frontend.h>
-#include <wrapper/poll.h>
-#include <wrapper/file.h>
-#include <wrapper/kref.h>
#include <lttng-string-utils.h>
#include <lttng-abi.h>
#include <lttng-abi-old.h>
*/
static struct proc_dir_entry *lttng_proc_dentry;
-static const struct file_operations lttng_fops;
+
+static const struct proc_ops lttng_proc_ops;
+
static const struct file_operations lttng_session_fops;
static const struct file_operations lttng_channel_fops;
static const struct file_operations lttng_metadata_fops;
session = lttng_session_create();
if (!session)
return -ENOMEM;
- session_fd = lttng_get_unused_fd();
+ session_fd = get_unused_fd_flags(0);
if (session_fd < 0) {
ret = session_fd;
goto fd_error;
struct file *tracepoint_list_file;
int file_fd, ret;
- file_fd = lttng_get_unused_fd();
+ file_fd = get_unused_fd_flags(0);
if (file_fd < 0) {
ret = file_fd;
goto fd_error;
struct file *syscall_list_file;
int file_fd, ret;
- file_fd = lttng_get_unused_fd();
+ file_fd = get_unused_fd_flags(0);
if (file_fd < 0) {
ret = file_fd;
goto fd_error;
}
}
-static const struct file_operations lttng_fops = {
- .owner = THIS_MODULE,
- .unlocked_ioctl = lttng_ioctl,
+static const struct proc_ops lttng_proc_ops = {
+ .proc_ioctl = lttng_ioctl,
#ifdef CONFIG_COMPAT
- .compat_ioctl = lttng_ioctl,
-#endif
+ .proc_compat_ioctl = lttng_ioctl,
+#endif /* CONFIG_COMPAT */
};
static
int chan_fd;
int ret = 0;
- chan_fd = lttng_get_unused_fd();
+ chan_fd = get_unused_fd_flags(0);
if (chan_fd < 0) {
ret = chan_fd;
goto fd_error;
unsigned int mask = 0;
if (filp->f_mode & FMODE_READ) {
- poll_wait_set_exclusive(wait);
poll_wait(filp, &stream->read_wait, wait);
finalized = stream->finalized;
int stream_fd, ret;
struct file *stream_file;
- stream_fd = lttng_get_unused_fd();
+ stream_fd = get_unused_fd_flags(0);
if (stream_fd < 0) {
ret = stream_fd;
goto fd_error;
goto notransport;
}
- if (!lttng_kref_get(&session->metadata_cache->refcount)) {
- ret = -EOVERFLOW;
- goto kref_error;
- }
-
+ kref_get(&session->metadata_cache->refcount);
ret = lttng_abi_create_stream_fd(channel_file, stream_priv,
<tng_metadata_ring_buffer_file_operations);
if (ret < 0)
fd_error:
kref_put(&session->metadata_cache->refcount, metadata_cache_destroy);
-kref_error:
module_put(metadata_stream->transport->owner);
notransport:
kfree(metadata_stream);
event_param->u.kprobe.symbol_name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0';
break;
case LTTNG_KERNEL_FUNCTION:
- event_param->u.ftrace.symbol_name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0';
+ WARN_ON_ONCE(1);
+ /* Not implemented. */
break;
default:
break;
}
- event_fd = lttng_get_unused_fd();
+ event_fd = get_unused_fd_flags(0);
if (event_fd < 0) {
ret = event_fd;
goto fd_error;
sizeof(uevent_param->u.kretprobe.symbol_name));
break;
case LTTNG_KERNEL_FUNCTION:
- memcpy(uevent_param->u.ftrace.symbol_name,
- old_uevent_param->u.ftrace.symbol_name,
- sizeof(uevent_param->u.ftrace.symbol_name));
+ WARN_ON_ONCE(1);
+ /* Not implemented. */
break;
default:
break;
unsigned int mask = 0;
if (file->f_mode & FMODE_READ) {
- poll_wait_set_exclusive(wait);
poll_wait(file, channel->ops->get_hp_wait_queue(channel->chan),
wait);
{
int ret = 0;
- wrapper_vmalloc_sync_all();
lttng_clock_ref();
ret = lttng_tp_mempool_init();
}
lttng_proc_dentry = proc_create_data("lttng", S_IRUSR | S_IWUSR, NULL,
- <tng_fops, NULL);
+ <tng_proc_ops, NULL);
if (!lttng_proc_dentry) {
printk(KERN_ERR "Error creating LTTng control file\n");