return 0;
}
+static
+int lttng_abi_session_set_creation_time(struct lttng_session *session,
+ struct lttng_kernel_session_creation_time *time)
+{
+ size_t len;
+
+ len = strnlen(time->iso8601, LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN);
+
+ if (len == LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN) {
+ /* Time is too long/malformed */
+ return -EINVAL;
+ }
+
+ strcpy(session->creation_time, time->iso8601);
+ return 0;
+}
+
/**
* lttng_session_ioctl - lttng session fd ioctl
*
long lttng_session_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
struct lttng_session *session = file->private_data;
+ struct lttng_kernel_channel chan_param;
+ struct lttng_kernel_old_channel old_chan_param;
switch (cmd) {
case LTTNG_KERNEL_OLD_CHANNEL:
{
- struct lttng_kernel_channel chan_param;
- struct lttng_kernel_old_channel old_chan_param;
-
if (copy_from_user(&old_chan_param,
(struct lttng_kernel_old_channel __user *) arg,
sizeof(struct lttng_kernel_old_channel)))
}
case LTTNG_KERNEL_CHANNEL:
{
- struct lttng_kernel_channel chan_param;
-
if (copy_from_user(&chan_param,
(struct lttng_kernel_channel __user *) arg,
sizeof(struct lttng_kernel_channel)))
return lttng_session_disable(session);
case LTTNG_KERNEL_OLD_METADATA:
{
- struct lttng_kernel_channel chan_param;
- struct lttng_kernel_old_channel old_chan_param;
-
if (copy_from_user(&old_chan_param,
(struct lttng_kernel_old_channel __user *) arg,
sizeof(struct lttng_kernel_old_channel)))
}
case LTTNG_KERNEL_METADATA:
{
- struct lttng_kernel_channel chan_param;
-
if (copy_from_user(&chan_param,
(struct lttng_kernel_channel __user *) arg,
sizeof(struct lttng_kernel_channel)))
return -EFAULT;
return lttng_abi_session_set_name(session, &name);
}
+ case LTTNG_KERNEL_SESSION_SET_CREATION_TIME:
+ {
+ struct lttng_kernel_session_creation_time time;
+
+ if (copy_from_user(&time,
+ (struct lttng_kernel_session_creation_time __user *) arg,
+ sizeof(struct lttng_kernel_session_creation_time)))
+ return -EFAULT;
+ return lttng_abi_session_set_creation_time(session, &time);
+ }
default:
return -ENOIOCTLCMD;
}
(struct lttng_kernel_event_callsite __user *) arg);
case LTTNG_TYPE_ENABLER:
return -EINVAL;
+ default:
+ WARN_ON_ONCE(1);
+ return -ENOSYS;
}
default:
return -ENOIOCTLCMD;