git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'for-linus' of git://neil.brown.name/md
[safe/jmp/linux-2.6]
/
kernel
/
relay.c
diff --git
a/kernel/relay.c
b/kernel/relay.c
index
edc0ba6
..
bc18854
100644
(file)
--- a/
kernel/relay.c
+++ b/
kernel/relay.c
@@
-748,7
+748,7
@@
size_t relay_switch_subbuf(struct rchan_buf *buf, size_t length)
* from the scheduler (trying to re-grab
* rq->lock), so defer it.
*/
* from the scheduler (trying to re-grab
* rq->lock), so defer it.
*/
-
__
mod_timer(&buf->timer, jiffies + 1);
+ mod_timer(&buf->timer, jiffies + 1);
}
old = buf->data;
}
old = buf->data;
@@
-795,13
+795,15
@@
void relay_subbufs_consumed(struct rchan *chan,
if (!chan)
return;
if (!chan)
return;
- if (cpu >= NR_CPUS || !chan->buf[cpu])
+ if (cpu >= NR_CPUS || !chan->buf[cpu] ||
+ subbufs_consumed > chan->n_subbufs)
return;
buf = chan->buf[cpu];
return;
buf = chan->buf[cpu];
- buf->subbufs_consumed += subbufs_consumed;
- if (buf->subbufs_consumed > buf->subbufs_produced)
+ if (subbufs_consumed > buf->subbufs_produced - buf->subbufs_consumed)
buf->subbufs_consumed = buf->subbufs_produced;
buf->subbufs_consumed = buf->subbufs_produced;
+ else
+ buf->subbufs_consumed += subbufs_consumed;
}
EXPORT_SYMBOL_GPL(relay_subbufs_consumed);
}
EXPORT_SYMBOL_GPL(relay_subbufs_consumed);