Skip to content

Commit

Permalink
relay: make create_buf_file and remove_buf_file callbacks mandatory
Browse files Browse the repository at this point in the history
All clients provide create_buf_file and remove_buf_file callbacks, and
they're required for relay to make sense.  There is no point in them being
optional.

Also document whether each callback is mandatory/optional.

Link: https://lkml.kernel.org/r/88003c1527386b93036e286e7917f1e33aec84ac.1606153547.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <[email protected]>
Suggested-by: Christoph Hellwig <[email protected]>
Reviewed-by: Christoph Hellwig <[email protected]>
Cc: Jens Axboe <[email protected]>
Cc: Kalle Valo <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
jnikula authored and torvalds committed Dec 16, 2020
1 parent 6f8f254 commit 371e038
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 25 deletions.
6 changes: 6 additions & 0 deletions include/linux/relay.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ struct rchan_callbacks
* 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.
Expand Down Expand Up @@ -122,6 +124,8 @@ struct rchan_callbacks
* 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,
Expand All @@ -139,6 +143,8 @@ struct rchan_callbacks
* channel buffer.
*
* The callback should return 0 if successful, negative if not.
*
* This callback is mandatory.
*/
int (*remove_buf_file)(struct dentry *dentry);
};
Expand Down
26 changes: 1 addition & 25 deletions kernel/relay.c
Original file line number Diff line number Diff line change
Expand Up @@ -271,26 +271,6 @@ static int subbuf_start_default_callback (struct rchan_buf *buf,
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
Expand Down Expand Up @@ -467,10 +447,6 @@ static void setup_callbacks(struct rchan *chan,
{
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;
}

Expand Down Expand Up @@ -530,7 +506,7 @@ struct rchan *relay_open(const char *base_filename,
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);
Expand Down

0 comments on commit 371e038

Please sign in to comment.