Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 16940
b: refs/heads/master
c: 08c541a
h: refs/heads/master
v: v3
  • Loading branch information
Tom Zanussi authored and Linus Torvalds committed Jan 9, 2006
1 parent 3ee000a commit 5bb1094
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 925ac8a2b637466ba0ad8dfaf7b49aa9a362502f
refs/heads/master: 08c541a7ade230883c48225f4ea406a0117e7c2f
2 changes: 1 addition & 1 deletion trunk/fs/relayfs/buffers.c
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,6 @@ void relay_destroy_buf(struct rchan_buf *buf)
void relay_remove_buf(struct kref *kref)
{
struct rchan_buf *buf = container_of(kref, struct rchan_buf, kref);
relayfs_remove(buf->dentry);
buf->chan->cb->remove_buf_file(buf->dentry);
relay_destroy_buf(buf);
}
30 changes: 28 additions & 2 deletions trunk/fs/relayfs/relay.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,33 @@ static void buf_unmapped_default_callback(struct rchan_buf *buf,
{
}

/*
* create_buf_file_create() default callback. Creates file to represent buf.
*/
static struct dentry *create_buf_file_default_callback(const char *filename,
struct dentry *parent,
int mode,
struct rchan_buf *buf)
{
return relayfs_create_file(filename, parent, mode,
&relayfs_file_operations, buf);
}

/*
* remove_buf_file() default callback. Removes file representing relay buffer.
*/
static int remove_buf_file_default_callback(struct dentry *dentry)
{
return relayfs_remove(dentry);
}

/* relay channel default callbacks */
static struct rchan_callbacks default_channel_callbacks = {
.subbuf_start = subbuf_start_default_callback,
.buf_mapped = buf_mapped_default_callback,
.buf_unmapped = buf_unmapped_default_callback,
.create_buf_file = create_buf_file_default_callback,
.remove_buf_file = remove_buf_file_default_callback,
};

/**
Expand Down Expand Up @@ -176,8 +198,8 @@ static struct rchan_buf *relay_open_buf(struct rchan *chan,
return NULL;

/* Create file in fs */
dentry = relayfs_create_file(filename, parent, S_IRUSR,
&relayfs_file_operations, buf);
dentry = chan->cb->create_buf_file(filename, parent, S_IRUSR,
buf);
if (!dentry) {
relay_destroy_buf(buf);
return NULL;
Expand Down Expand Up @@ -220,6 +242,10 @@ static inline void setup_callbacks(struct rchan *chan,
cb->buf_mapped = buf_mapped_default_callback;
if (!cb->buf_unmapped)
cb->buf_unmapped = buf_unmapped_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
34 changes: 34 additions & 0 deletions trunk/include/linux/relayfs_fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,40 @@ struct rchan_callbacks
*/
void (*buf_unmapped)(struct rchan_buf *buf,
struct file *filp);
/*
* create_buf_file - create file to represent a relayfs channel buffer
* @filename: the name of the file to create
* @parent: the parent of the file to create
* @mode: the mode of the file to create
* @buf: the channel buffer
*
* Called during relay_open(), once for each per-cpu buffer,
* to allow the client to create a file to be used to
* represent the corresponding channel buffer. If the file is
* created outside of relayfs, the parent must also exist in
* that filesystem.
*
* The callback should return the dentry of the file created
* to represent the relay buffer.
*
* See Documentation/filesystems/relayfs.txt for more info.
*/
struct dentry *(*create_buf_file)(const char *filename,
struct dentry *parent,
int mode,
struct rchan_buf *buf);

/*
* remove_buf_file - remove file representing a relayfs channel buffer
* @dentry: the dentry of the file to remove
*
* Called during relay_close(), once for each per-cpu buffer,
* to allow the client to remove a file used to represent a
* channel buffer.
*
* The callback should return 0 if successful, negative if not.
*/
int (*remove_buf_file)(struct dentry *dentry);
};

/*
Expand Down

0 comments on commit 5bb1094

Please sign in to comment.