Add metadata env fields
[lttng-modules.git] / lttng-abi.c
index c535cb95d4814a0f0e50debc496dbec66b767ff3..aab2caca467f15eadcfb916858931b134daad6d5 100644 (file)
@@ -419,8 +419,8 @@ int lttng_abi_create_channel(struct file *session_file,
                transport_name = "<unknown>";
                break;
        }
-       if (atomic_long_add_unless(&session_file->f_count,
-               1, INT_MAX) == INT_MAX) {
+       if (!atomic_long_add_unless(&session_file->f_count, 1, LONG_MAX)) {
+               ret = -EOVERFLOW;
                goto refcount_error;
        }
        /*
@@ -453,6 +453,23 @@ fd_error:
        return ret;
 }
 
+static
+int lttng_abi_session_set_name(struct lttng_session *session,
+               struct lttng_kernel_session_name *name)
+{
+       size_t len;
+
+       len = strnlen(name->name, LTTNG_KERNEL_SESSION_NAME_LEN);
+
+       if (len == LTTNG_KERNEL_SESSION_NAME_LEN) {
+               /* Name is too long/malformed */
+               return -EINVAL;
+       }
+
+       strcpy(session->name, name->name);
+       return 0;
+}
+
 /**
  *     lttng_session_ioctl - lttng session fd ioctl
  *
@@ -562,6 +579,16 @@ long lttng_session_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                return lttng_session_metadata_regenerate(session);
        case LTTNG_KERNEL_SESSION_STATEDUMP:
                return lttng_session_statedump(session);
+       case LTTNG_KERNEL_SESSION_SET_NAME:
+       {
+               struct lttng_kernel_session_name name;
+
+               if (copy_from_user(&name,
+                               (struct lttng_kernel_session_name __user *) arg,
+                               sizeof(struct lttng_kernel_session_name)))
+                       return -EFAULT;
+               return lttng_abi_session_set_name(session, &name);
+       }
        default:
                return -ENOIOCTLCMD;
        }
@@ -1072,8 +1099,7 @@ int lttng_abi_create_event(struct file *channel_file,
                goto file_error;
        }
        /* The event holds a reference on the channel */
-       if (atomic_long_add_unless(&channel_file->f_count,
-               1, INT_MAX) == INT_MAX) {
+       if (!atomic_long_add_unless(&channel_file->f_count, 1, LONG_MAX)) {
                ret = -EOVERFLOW;
                goto refcount_error;
        }
@@ -1306,7 +1332,6 @@ old_ctx_end:
        default:
                return -ENOIOCTLCMD;
        }
-
 }
 
 /**
@@ -1473,7 +1498,18 @@ long lttng_event_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                        return lttng_enabler_attach_bytecode(enabler,
                                (struct lttng_kernel_filter_bytecode __user *) arg);
                }
-
+               default:
+                       WARN_ON_ONCE(1);
+                       return -ENOSYS;
+               }
+       case LTTNG_KERNEL_ADD_CALLSITE:
+               switch (*evtype) {
+               case LTTNG_TYPE_EVENT:
+                       event = file->private_data;
+                       return lttng_event_add_callsite(event,
+                               (struct lttng_kernel_event_callsite __user *) arg);
+               case LTTNG_TYPE_ENABLER:
+                       return -EINVAL;
                }
        default:
                return -ENOIOCTLCMD;
This page took 0.024052 seconds and 4 git commands to generate.