[-mm patch] relayfs: API cleanup

2005-08-04 Thread Tom Zanussi
This patch does a bit of cleanup of the relayfs API, as discussed
previously:

http://marc.theaimsgroup.com/?l=linux-kernel=112134773617086=2

To recap, it:

- removes the commit counts, relay_commit() and the deliver() callback
(the padding counts had to stay, for the read() implementation)
- removes the buffer_full() callback
- changes the subbuf_start() callback
- changes 'unsigned' to 'unsigned int'
- other similar and related changes

The examples have been updated to use the new API (there's also a new
example that does commit/deliver in the client):

http://prdownloads.sourceforge.net/relayfs/relay-apps-0.7.tar.gz?download

Andrew, please apply.

Thanks,

Tom

Signed-off-by: Tom Zanussi <[EMAIL PROTECTED]>

diff -urpN -X dontdiff linux-2.6.13-rc4-mm1/fs/relayfs/buffers.c 
linux-2.6.13-rc4-mm1-cur/fs/relayfs/buffers.c
--- linux-2.6.13-rc4-mm1/fs/relayfs/buffers.c   2005-08-05 10:14:34.0 
-0500
+++ linux-2.6.13-rc4-mm1-cur/fs/relayfs/buffers.c   2005-08-05 
10:17:30.0 -0500
@@ -95,7 +95,7 @@ int relay_mmap_buf(struct rchan_buf *buf
 static void *relay_alloc_buf(struct rchan_buf *buf, unsigned long size)
 {
void *mem;
-   int i, j, n_pages;
+   unsigned int i, j, n_pages;
 
size = PAGE_ALIGN(size);
n_pages = size >> PAGE_SHIFT;
@@ -141,20 +141,15 @@ struct rchan_buf *relay_create_buf(struc
if (!buf->padding)
goto free_buf;
 
-   buf->commit = kmalloc(chan->n_subbufs * sizeof(unsigned *), GFP_KERNEL);
-   if (!buf->commit)
-   goto free_buf;
-
buf->start = relay_alloc_buf(buf, chan->alloc_size);
if (!buf->start)
goto free_buf;
-
+   
buf->chan = chan;
kref_get(>chan->kref);
return buf;
 
 free_buf:
-   kfree(buf->commit);
kfree(buf->padding);
kfree(buf);
return NULL;
@@ -167,7 +162,7 @@ free_buf:
 void relay_destroy_buf(struct rchan_buf *buf)
 {
struct rchan *chan = buf->chan;
-   int i;
+   unsigned int i;
 
if (likely(buf->start)) {
vunmap(buf->start);
@@ -176,7 +171,6 @@ void relay_destroy_buf(struct rchan_buf 
kfree(buf->page_array);
}
kfree(buf->padding);
-   kfree(buf->commit);
kfree(buf);
kref_put(>kref, relay_destroy_channel);
 }
diff -urpN -X dontdiff linux-2.6.13-rc4-mm1/fs/relayfs/relay.c 
linux-2.6.13-rc4-mm1-cur/fs/relayfs/relay.c
--- linux-2.6.13-rc4-mm1/fs/relayfs/relay.c 2005-08-05 10:14:34.0 
-0500
+++ linux-2.6.13-rc4-mm1-cur/fs/relayfs/relay.c 2005-08-05 10:17:30.0 
-0500
@@ -26,10 +26,7 @@
  */
 int relay_buf_empty(struct rchan_buf *buf)
 {
-   int produced = atomic_read(>subbufs_produced);
-   int consumed = atomic_read(>subbufs_consumed);
-
-   return (produced - consumed) ? 0 : 1;
+   return (buf->subbufs_produced - buf->subbufs_consumed) ? 0 : 1;
 }
 
 /**
@@ -38,17 +35,10 @@ int relay_buf_empty(struct rchan_buf *bu
  *
  * Returns 1 if the buffer is full, 0 otherwise.
  */
-static inline int relay_buf_full(struct rchan_buf *buf)
+int relay_buf_full(struct rchan_buf *buf)
 {
-   int produced, consumed;
-
-   if (buf->chan->overwrite)
-   return 0;
-
-   produced = atomic_read(>subbufs_produced);
-   consumed = atomic_read(>subbufs_consumed);
-
-   return (produced - consumed > buf->chan->n_subbufs - 1) ? 1 : 0;
+   unsigned int ready = buf->subbufs_produced - buf->subbufs_consumed;
+   return (ready >= buf->chan->n_subbufs) ? 1 : 0;
 }
 
 /*
@@ -65,19 +55,10 @@ static inline int relay_buf_full(struct 
  */
 static int subbuf_start_default_callback (struct rchan_buf *buf,
  void *subbuf,
- unsigned prev_subbuf_idx,
- void *prev_subbuf)
-{
-   return 0;
-}
-
-/*
- * deliver() default callback.  Does nothing.
- */
-static void deliver_default_callback (struct rchan_buf *buf,
- unsigned subbuf_idx,
- void *subbuf)
+ void *prev_subbuf,
+ unsigned int prev_padding)
 {
+   return 1;
 }
 
 /*
@@ -96,22 +77,11 @@ static void buf_unmapped_default_callbac
 {
 }
 
-/*
- * buf_full() default callback.  Does nothing.
- */
-static void buf_full_default_callback(struct rchan_buf *buf,
- unsigned subbuf_idx,
- void *subbuf)
-{
-}
-
 /* relay channel default callbacks */
 static struct rchan_callbacks default_channel_callbacks = {
.subbuf_start = subbuf_start_default_callback,
-   .deliver = deliver_default_callback,
.buf_mapped = buf_mapped_default_callback,
.buf_unmapped = buf_unmapped_default_callback,
-   .buf_full = buf_full_default_callback,
 };
 
 /**
@@ -129,29 

[-mm patch] relayfs: API cleanup

2005-08-04 Thread Tom Zanussi
This patch does a bit of cleanup of the relayfs API, as discussed
previously:

http://marc.theaimsgroup.com/?l=linux-kernelm=112134773617086w=2

To recap, it:

- removes the commit counts, relay_commit() and the deliver() callback
(the padding counts had to stay, for the read() implementation)
- removes the buffer_full() callback
- changes the subbuf_start() callback
- changes 'unsigned' to 'unsigned int'
- other similar and related changes

The examples have been updated to use the new API (there's also a new
example that does commit/deliver in the client):

http://prdownloads.sourceforge.net/relayfs/relay-apps-0.7.tar.gz?download

Andrew, please apply.

Thanks,

Tom

Signed-off-by: Tom Zanussi [EMAIL PROTECTED]

diff -urpN -X dontdiff linux-2.6.13-rc4-mm1/fs/relayfs/buffers.c 
linux-2.6.13-rc4-mm1-cur/fs/relayfs/buffers.c
--- linux-2.6.13-rc4-mm1/fs/relayfs/buffers.c   2005-08-05 10:14:34.0 
-0500
+++ linux-2.6.13-rc4-mm1-cur/fs/relayfs/buffers.c   2005-08-05 
10:17:30.0 -0500
@@ -95,7 +95,7 @@ int relay_mmap_buf(struct rchan_buf *buf
 static void *relay_alloc_buf(struct rchan_buf *buf, unsigned long size)
 {
void *mem;
-   int i, j, n_pages;
+   unsigned int i, j, n_pages;
 
size = PAGE_ALIGN(size);
n_pages = size  PAGE_SHIFT;
@@ -141,20 +141,15 @@ struct rchan_buf *relay_create_buf(struc
if (!buf-padding)
goto free_buf;
 
-   buf-commit = kmalloc(chan-n_subbufs * sizeof(unsigned *), GFP_KERNEL);
-   if (!buf-commit)
-   goto free_buf;
-
buf-start = relay_alloc_buf(buf, chan-alloc_size);
if (!buf-start)
goto free_buf;
-
+   
buf-chan = chan;
kref_get(buf-chan-kref);
return buf;
 
 free_buf:
-   kfree(buf-commit);
kfree(buf-padding);
kfree(buf);
return NULL;
@@ -167,7 +162,7 @@ free_buf:
 void relay_destroy_buf(struct rchan_buf *buf)
 {
struct rchan *chan = buf-chan;
-   int i;
+   unsigned int i;
 
if (likely(buf-start)) {
vunmap(buf-start);
@@ -176,7 +171,6 @@ void relay_destroy_buf(struct rchan_buf 
kfree(buf-page_array);
}
kfree(buf-padding);
-   kfree(buf-commit);
kfree(buf);
kref_put(chan-kref, relay_destroy_channel);
 }
diff -urpN -X dontdiff linux-2.6.13-rc4-mm1/fs/relayfs/relay.c 
linux-2.6.13-rc4-mm1-cur/fs/relayfs/relay.c
--- linux-2.6.13-rc4-mm1/fs/relayfs/relay.c 2005-08-05 10:14:34.0 
-0500
+++ linux-2.6.13-rc4-mm1-cur/fs/relayfs/relay.c 2005-08-05 10:17:30.0 
-0500
@@ -26,10 +26,7 @@
  */
 int relay_buf_empty(struct rchan_buf *buf)
 {
-   int produced = atomic_read(buf-subbufs_produced);
-   int consumed = atomic_read(buf-subbufs_consumed);
-
-   return (produced - consumed) ? 0 : 1;
+   return (buf-subbufs_produced - buf-subbufs_consumed) ? 0 : 1;
 }
 
 /**
@@ -38,17 +35,10 @@ int relay_buf_empty(struct rchan_buf *bu
  *
  * Returns 1 if the buffer is full, 0 otherwise.
  */
-static inline int relay_buf_full(struct rchan_buf *buf)
+int relay_buf_full(struct rchan_buf *buf)
 {
-   int produced, consumed;
-
-   if (buf-chan-overwrite)
-   return 0;
-
-   produced = atomic_read(buf-subbufs_produced);
-   consumed = atomic_read(buf-subbufs_consumed);
-
-   return (produced - consumed  buf-chan-n_subbufs - 1) ? 1 : 0;
+   unsigned int ready = buf-subbufs_produced - buf-subbufs_consumed;
+   return (ready = buf-chan-n_subbufs) ? 1 : 0;
 }
 
 /*
@@ -65,19 +55,10 @@ static inline int relay_buf_full(struct 
  */
 static int subbuf_start_default_callback (struct rchan_buf *buf,
  void *subbuf,
- unsigned prev_subbuf_idx,
- void *prev_subbuf)
-{
-   return 0;
-}
-
-/*
- * deliver() default callback.  Does nothing.
- */
-static void deliver_default_callback (struct rchan_buf *buf,
- unsigned subbuf_idx,
- void *subbuf)
+ void *prev_subbuf,
+ unsigned int prev_padding)
 {
+   return 1;
 }
 
 /*
@@ -96,22 +77,11 @@ static void buf_unmapped_default_callbac
 {
 }
 
-/*
- * buf_full() default callback.  Does nothing.
- */
-static void buf_full_default_callback(struct rchan_buf *buf,
- unsigned subbuf_idx,
- void *subbuf)
-{
-}
-
 /* relay channel default callbacks */
 static struct rchan_callbacks default_channel_callbacks = {
.subbuf_start = subbuf_start_default_callback,
-   .deliver = deliver_default_callback,
.buf_mapped = buf_mapped_default_callback,
.buf_unmapped = buf_unmapped_default_callback,
-   .buf_full = buf_full_default_callback,
 };
 
 /**
@@ -129,29 +99,16 @@