#include <common/macros.h>
#include <common/compat/errno.h>
#include <stdarg.h>
-#include <assert.h>
#include <common/time.h>
#include "kernel-ctl.h"
#define LTTNG_IOCTL_CHECK(fildes, request, ...) \
({ \
int _ioctl_ret = ioctl(fildes, request, ##__VA_ARGS__); \
- assert(_ioctl_ret <= 0); \
+ LTTNG_ASSERT(_ioctl_ret <= 0); \
!_ioctl_ret ? 0 : -errno; \
})
int kernctl_track_pid(int fd, int pid)
{
- return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_ABI_SESSION_TRACK_PID, pid);
+ int ret = LTTNG_IOCTL_CHECK(
+ fd, LTTNG_KERNEL_ABI_SESSION_TRACK_PID, pid);
+
+ if (ret == -ENOSYS) {
+ ret = LTTNG_IOCTL_CHECK(fd,
+ LTTNG_KERNEL_ABI_OLD_SESSION_TRACK_PID, pid);
+ }
+
+ return ret;
}
int kernctl_untrack_pid(int fd, int pid)
{
- return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_ABI_SESSION_UNTRACK_PID, pid);
+ int ret = LTTNG_IOCTL_CHECK(
+ fd, LTTNG_KERNEL_ABI_SESSION_UNTRACK_PID, pid);
+
+ if (ret == -ENOSYS) {
+ ret = LTTNG_IOCTL_CHECK(fd,
+ LTTNG_KERNEL_ABI_OLD_SESSION_UNTRACK_PID, pid);
+ }
+
+ return ret;
}
int kernctl_list_tracker_pids(int fd)
int kernctl_track_id(int fd, enum lttng_process_attr process_attr, int id)
{
struct lttng_kernel_abi_tracker_args args;
+ int ret;
args.id = id;
args.type = get_kernel_tracker_type(process_attr);
errno = EINVAL;
return -1;
}
- return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_ABI_SESSION_TRACK_ID, &args);
+
+ ret = LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_ABI_SESSION_TRACK_ID, &args);
+ if (ret == -ENOSYS) {
+ ret = LTTNG_IOCTL_CHECK(fd,
+ LTTNG_KERNEL_ABI_OLD_SESSION_TRACK_ID, &args);
+ }
+
+ return ret;
}
int kernctl_untrack_id(int fd, enum lttng_process_attr process_attr, int id)
{
struct lttng_kernel_abi_tracker_args args;
+ int ret;
args.id = id;
args.type = get_kernel_tracker_type(process_attr);
errno = EINVAL;
return -1;
}
- return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_ABI_SESSION_UNTRACK_ID, &args);
+
+ ret = LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_ABI_SESSION_UNTRACK_ID, &args);
+ if (ret == -ENOSYS) {
+ ret = LTTNG_IOCTL_CHECK(fd,
+ LTTNG_KERNEL_ABI_OLD_SESSION_UNTRACK_ID, &args);
+ }
+
+ return ret;
}
int kernctl_list_tracker_ids(int fd, enum lttng_process_attr process_attr)
{
struct lttng_kernel_abi_tracker_args args;
+ int ret;
args.id = -1;
args.type = get_kernel_tracker_type(process_attr);
errno = EINVAL;
return -1;
}
- return LTTNG_IOCTL_NO_CHECK(
+
+ ret = LTTNG_IOCTL_NO_CHECK(
fd, LTTNG_KERNEL_ABI_SESSION_LIST_TRACKER_IDS, &args);
+ if (ret == -ENOSYS) {
+ ret = LTTNG_IOCTL_NO_CHECK(fd,
+ LTTNG_KERNEL_ABI_OLD_SESSION_LIST_TRACKER_IDS,
+ &args);
+ }
+
+ return ret;
}
int kernctl_session_regenerate_metadata(int fd)
ret = LTTNG_IOCTL_CHECK(
fd, LTTNG_KERNEL_ABI_SESSION_SET_NAME, &session_name);
+ if (ret == -ENOSYS) {
+ ret = LTTNG_IOCTL_CHECK(fd,
+ LTTNG_KERNEL_ABI_OLD_SESSION_SET_NAME,
+ &session_name);
+ }
+
end:
return ret;
}
ret = LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_ABI_SESSION_SET_CREATION_TIME,
&creation_time);
+ if (ret == -ENOSYS) {
+ ret = LTTNG_IOCTL_CHECK(fd,
+ LTTNG_KERNEL_ABI_OLD_SESSION_SET_CREATION_TIME,
+ &creation_time);
+ }
+
end:
return ret;
}