Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 16942
b: refs/heads/master
c: e6c0836
h: refs/heads/master
v: v3
  • Loading branch information
Tom Zanussi authored and Linus Torvalds committed Jan 9, 2006
1 parent 78950a8 commit 9138f90
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 12 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: 03d78d11d92b5ed688bb18167b05d9d01493e175
refs/heads/master: e6c08367b8fc6dce6dfd1106f53f6ef28215b313
35 changes: 25 additions & 10 deletions trunk/fs/relayfs/relay.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ static void buf_unmapped_default_callback(struct rchan_buf *buf,
static struct dentry *create_buf_file_default_callback(const char *filename,
struct dentry *parent,
int mode,
struct rchan_buf *buf)
struct rchan_buf *buf,
int *is_global)
{
return relayfs_create_file(filename, parent, mode,
&relayfs_file_operations, buf);
Expand Down Expand Up @@ -170,14 +171,16 @@ static inline void __relay_reset(struct rchan_buf *buf, unsigned int init)
void relay_reset(struct rchan *chan)
{
unsigned int i;
struct rchan_buf *prev = NULL;

if (!chan)
return;

for (i = 0; i < NR_CPUS; i++) {
if (!chan->buf[i])
continue;
if (!chan->buf[i] || chan->buf[i] == prev)
break;
__relay_reset(chan->buf[i], 0);
prev = chan->buf[i];
}
}

Expand All @@ -188,18 +191,22 @@ void relay_reset(struct rchan *chan)
*/
static struct rchan_buf *relay_open_buf(struct rchan *chan,
const char *filename,
struct dentry *parent)
struct dentry *parent,
int *is_global)
{
struct rchan_buf *buf;
struct dentry *dentry;

if (*is_global)
return chan->buf[0];

buf = relay_create_buf(chan);
if (!buf)
return NULL;

/* Create file in fs */
dentry = chan->cb->create_buf_file(filename, parent, S_IRUSR,
buf);
buf, is_global);
if (!dentry) {
relay_destroy_buf(buf);
return NULL;
Expand Down Expand Up @@ -273,6 +280,7 @@ struct rchan *relay_open(const char *base_filename,
unsigned int i;
struct rchan *chan;
char *tmpname;
int is_global = 0;

if (!base_filename)
return NULL;
Expand All @@ -297,7 +305,8 @@ struct rchan *relay_open(const char *base_filename,

for_each_online_cpu(i) {
sprintf(tmpname, "%s%d", base_filename, i);
chan->buf[i] = relay_open_buf(chan, tmpname, parent);
chan->buf[i] = relay_open_buf(chan, tmpname, parent,
&is_global);
chan->buf[i]->cpu = i;
if (!chan->buf[i])
goto free_bufs;
Expand All @@ -311,6 +320,8 @@ struct rchan *relay_open(const char *base_filename,
if (!chan->buf[i])
break;
relay_close_buf(chan->buf[i]);
if (is_global)
break;
}
kfree(tmpname);

Expand Down Expand Up @@ -420,14 +431,16 @@ void relay_destroy_channel(struct kref *kref)
void relay_close(struct rchan *chan)
{
unsigned int i;
struct rchan_buf *prev = NULL;

if (!chan)
return;

for (i = 0; i < NR_CPUS; i++) {
if (!chan->buf[i])
continue;
if (!chan->buf[i] || chan->buf[i] == prev)
break;
relay_close_buf(chan->buf[i]);
prev = chan->buf[i];
}

if (chan->last_toobig)
Expand All @@ -447,14 +460,16 @@ void relay_close(struct rchan *chan)
void relay_flush(struct rchan *chan)
{
unsigned int i;
struct rchan_buf *prev = NULL;

if (!chan)
return;

for (i = 0; i < NR_CPUS; i++) {
if (!chan->buf[i])
continue;
if (!chan->buf[i] || chan->buf[i] == prev)
break;
relay_switch_subbuf(chan->buf[i], 0);
prev = chan->buf[i];
}
}

Expand Down
8 changes: 7 additions & 1 deletion trunk/include/linux/relayfs_fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ struct rchan_callbacks
* @parent: the parent of the file to create
* @mode: the mode of the file to create
* @buf: the channel buffer
* @is_global: outparam - set non-zero if the buffer should be global
*
* Called during relay_open(), once for each per-cpu buffer,
* to allow the client to create a file to be used to
Expand All @@ -126,12 +127,17 @@ struct rchan_callbacks
* The callback should return the dentry of the file created
* to represent the relay buffer.
*
* Setting the is_global outparam to a non-zero value will
* cause relay_open() to create a single global buffer rather
* than the default set of per-cpu buffers.
*
* 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);
struct rchan_buf *buf,
int *is_global);

/*
* remove_buf_file - remove file representing a relayfs channel buffer
Expand Down

0 comments on commit 9138f90

Please sign in to comment.