diff options
| author | stans <none@none> | 2006-10-27 11:20:28 -0700 |
|---|---|---|
| committer | stans <none@none> | 2006-10-27 11:20:28 -0700 |
| commit | a71e32b6401c2e76a5bf9e3a3853da3405f77ef4 (patch) | |
| tree | e6bfa23e1bf73b6f01c6afeff065341b6808a0a4 /usr/src/uts/common/vm/page_lock.c | |
| parent | 3acfefaab29d68edc293bd4435567a7d55178b41 (diff) | |
| download | illumos-joyent-a71e32b6401c2e76a5bf9e3a3853da3405f77ef4.tar.gz | |
6393251 data corruption caused by VMODSORT problem
Diffstat (limited to 'usr/src/uts/common/vm/page_lock.c')
| -rw-r--r-- | usr/src/uts/common/vm/page_lock.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/usr/src/uts/common/vm/page_lock.c b/usr/src/uts/common/vm/page_lock.c index 13860c6ea0..fdf74a5674 100644 --- a/usr/src/uts/common/vm/page_lock.c +++ b/usr/src/uts/common/vm/page_lock.c @@ -773,7 +773,7 @@ page_io_unlock(page_t *pp) pio = PAGE_IO_MUTEX(pp); mutex_enter(pio); - cv_signal(&pp->p_io_cv); + cv_broadcast(&pp->p_io_cv); pp->p_iolock_state &= ~PAGE_IO_INUSE; mutex_exit(pio); } @@ -804,13 +804,38 @@ page_io_trylock(page_t *pp) } /* + * Wait until the i/o lock is not held. + */ +void +page_io_wait(page_t *pp) +{ + kmutex_t *pio; + + pio = PAGE_IO_MUTEX(pp); + mutex_enter(pio); + while (pp->p_iolock_state & PAGE_IO_INUSE) { + cv_wait(&(pp->p_io_cv), pio); + } + mutex_exit(pio); +} + +/* + * Returns 1 on success, 0 on failure. + */ +int +page_io_locked(page_t *pp) +{ + return (pp->p_iolock_state & PAGE_IO_INUSE); +} + +/* * Assert that the i/o lock on a page is held. * Returns 1 on success, 0 on failure. */ int page_iolock_assert(page_t *pp) { - return (pp->p_iolock_state & PAGE_IO_INUSE); + return (page_io_locked(pp)); } /* |
