* The client should return 1 to continue logging, 0 to stop
         * logging.
         *
+        * This callback is optional.
+        *
         * NOTE: subbuf_start will also be invoked when the buffer is
         *       created, so that the first sub-buffer can be initialized
         *       if necessary.  In this case, prev_subbuf will be NULL.
         * cause relay_open() to create a single global buffer rather
         * than the default set of per-cpu buffers.
         *
+        * This callback is mandatory.
+        *
         * See Documentation/filesystems/relay.rst for more info.
         */
        struct dentry *(*create_buf_file)(const char *filename,
         * channel buffer.
         *
         * The callback should return 0 if successful, negative if not.
+        *
+        * This callback is mandatory.
         */
        int (*remove_buf_file)(struct dentry *dentry);
 };
 
        return 1;
 }
 
-/*
- * create_buf_file_create() default callback.  Does nothing.
- */
-static struct dentry *create_buf_file_default_callback(const char *filename,
-                                                      struct dentry *parent,
-                                                      umode_t mode,
-                                                      struct rchan_buf *buf,
-                                                      int *is_global)
-{
-       return NULL;
-}
-
-/*
- * remove_buf_file() default callback.  Does nothing.
- */
-static int remove_buf_file_default_callback(struct dentry *dentry)
-{
-       return -EINVAL;
-}
-
 /**
  *     wakeup_readers - wake up readers waiting on a channel
  *     @work: contains the channel buffer
 {
        if (!cb->subbuf_start)
                cb->subbuf_start = subbuf_start_default_callback;
-       if (!cb->create_buf_file)
-               cb->create_buf_file = create_buf_file_default_callback;
-       if (!cb->remove_buf_file)
-               cb->remove_buf_file = remove_buf_file_default_callback;
        chan->cb = cb;
 }
 
                return NULL;
        if (subbuf_size > UINT_MAX / n_subbufs)
                return NULL;
-       if (!cb)
+       if (!cb || !cb->create_buf_file || !cb->remove_buf_file)
                return NULL;
 
        chan = kzalloc(sizeof(struct rchan), GFP_KERNEL);