From: Vitaliy Makkoveev Subject: Re: rwlocks don't need to provide RW_SLEEPFAIL anymore To: David Gwynne Cc: tech@openbsd.org Date: Sat, 17 May 2025 10:55:34 +0300 On Sat, May 17, 2025 at 05:45:12PM +1000, David Gwynne wrote: > nothing uses it. the few things that did use it were too tricky, so i'm > not keen to leave it around for people to cause confusion with in the > future. > > ok? > ok mvs > Index: share/man/man9/rwlock.9 > =================================================================== > RCS file: /cvs/src/share/man/man9/rwlock.9,v > diff -u -p -r1.27 rwlock.9 > --- share/man/man9/rwlock.9 29 Jan 2025 15:10:35 -0000 1.27 > +++ share/man/man9/rwlock.9 17 May 2025 07:38:35 -0000 > @@ -149,10 +149,6 @@ When waiting for a lock, allow signals t > Do not wait for busy locks, fail with > .Dv EBUSY > instead. > -.It Dv RW_SLEEPFAIL > -Wait for busy locks, but do not obtain them, fail with > -.Dv EAGAIN > -instead. > .It Dv RW_DUPOK > Prevents > .Xr witness 4 , > Index: sys/sys/rwlock.h > =================================================================== > RCS file: /cvs/src/sys/sys/rwlock.h,v > diff -u -p -r1.32 rwlock.h > --- sys/sys/rwlock.h 29 Jan 2025 15:10:09 -0000 1.32 > +++ sys/sys/rwlock.h 17 May 2025 07:38:35 -0000 > @@ -114,7 +114,6 @@ struct rwlock { > #define RW_OPMASK 0x0007UL > > #define RW_INTR 0x0010UL /* interruptible sleep */ > -#define RW_SLEEPFAIL 0x0020UL /* fail if we slept for the lock */ > #define RW_NOSLEEP 0x0040UL /* don't wait for the lock */ > #define RW_RECURSEFAIL 0x0080UL /* Fail on recursion for RRW locks. */ > #define RW_DUPOK 0x0100UL /* Permit duplicate lock */ > Index: sys/kern/kern_rwlock.c > =================================================================== > RCS file: /cvs/src/sys/kern/kern_rwlock.c,v > diff -u -p -r1.55 kern_rwlock.c > --- sys/kern/kern_rwlock.c 29 Jan 2025 15:10:09 -0000 1.55 > +++ sys/kern/kern_rwlock.c 17 May 2025 07:38:35 -0000 > @@ -302,11 +302,6 @@ rw_do_enter_write(struct rwlock *rwl, in > rw_dec(&rwl->rwl_waiters); > return (error); > } > - if (ISSET(flags, RW_SLEEPFAIL)) { > - rw_dec(&rwl->rwl_waiters); > - rw_exited(rwl); > - return (EAGAIN); > - } > > owner = rw_cas(&rwl->rwl_owner, 0, self); > } while (owner != 0); > @@ -392,11 +387,9 @@ rw_do_enter_read(struct rwlock *rwl, int > db_enter(); > } > #endif > - if (ISSET(flags, RW_INTR) && (error != 0)) > - goto fail; > - if (ISSET(flags, RW_SLEEPFAIL)) { > - error = EAGAIN; > - goto fail; > + if (ISSET(flags, RW_INTR) && (error != 0)) { > + rw_dec(&rwl->rwl_readers); > + return (error); > } > } while (!rw_read_incr(rwl, 0)); > rw_dec(&rwl->rwl_readers); > @@ -406,9 +399,6 @@ locked: > WITNESS_LOCK(&rwl->rwl_lock_obj, lop_flags); > > return (0); > -fail: > - rw_dec(&rwl->rwl_readers); > - return (error); > } > > static int >