lkml.org 
[lkml]   [2020]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/9] relay: make create_buf_file and remove_buf_file callbacks mandatory
    Date
    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.

    Suggested-by: Christoph Hellwig <hch@infradead.org>
    Cc: Christoph Hellwig <hch@infradead.org>
    Signed-off-by: Jani Nikula <jani.nikula@intel.com>
    ---
    include/linux/relay.h | 6 ++++++
    kernel/relay.c | 26 +-------------------------
    2 files changed, 7 insertions(+), 25 deletions(-)

    diff --git a/include/linux/relay.h b/include/linux/relay.h
    index b3c4f49f6951..99d024475ba5 100644
    --- a/include/linux/relay.h
    +++ b/include/linux/relay.h
    @@ -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.
    @@ -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,
    @@ -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);
    };
    diff --git a/kernel/relay.c b/kernel/relay.c
    index d9b8185161a8..dd4ec4ec07f3 100644
    --- a/kernel/relay.c
    +++ b/kernel/relay.c
    @@ -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
    @@ -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;
    }

    @@ -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);
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-11-23 19:10    [W:3.106 / U:0.516 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site