fix buf where concurrent fs syscalls race on log entries
This commit is contained in:
parent
41f16c2183
commit
3d2dedd427
1 changed files with 2 additions and 0 deletions
2
log.c
2
log.c
|
@ -217,6 +217,7 @@ log_write(struct buf *b)
|
||||||
if (log.outstanding < 1)
|
if (log.outstanding < 1)
|
||||||
panic("log_write outside of trans");
|
panic("log_write outside of trans");
|
||||||
|
|
||||||
|
acquire(&log.lock);
|
||||||
for (i = 0; i < log.lh.n; i++) {
|
for (i = 0; i < log.lh.n; i++) {
|
||||||
if (log.lh.sector[i] == b->sector) // log absorbtion
|
if (log.lh.sector[i] == b->sector) // log absorbtion
|
||||||
break;
|
break;
|
||||||
|
@ -225,5 +226,6 @@ log_write(struct buf *b)
|
||||||
if (i == log.lh.n)
|
if (i == log.lh.n)
|
||||||
log.lh.n++;
|
log.lh.n++;
|
||||||
b->flags |= B_DIRTY; // prevent eviction
|
b->flags |= B_DIRTY; // prevent eviction
|
||||||
|
release(&log.lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue