]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
locktorture: Cannot hold read and write lock
authorDavidlohr Bueso <dave@stgolabs.net>
Mon, 29 Sep 2014 13:14:25 +0000 (06:14 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 30 Sep 2014 07:10:02 +0000 (00:10 -0700)
... trigger an error if so.

Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
kernel/locking/locktorture.c

index 9e9cd111fb0fbc3b7a8039928f716a208a57c6fe..b05dc46c4297638bdd0c757f274323a4d9ed8639 100644 (file)
@@ -453,14 +453,19 @@ static int lock_torture_writer(void *arg)
        do {
                if ((torture_random(&rand) & 0xfffff) == 0)
                        schedule_timeout_uninterruptible(1);
+
                cxt.cur_ops->writelock();
                if (WARN_ON_ONCE(lock_is_write_held))
                        lwsp->n_lock_fail++;
                lock_is_write_held = 1;
+               if (WARN_ON_ONCE(lock_is_read_held))
+                       lwsp->n_lock_fail++; /* rare, but... */
+
                lwsp->n_lock_acquired++;
                cxt.cur_ops->write_delay(&rand);
                lock_is_write_held = 0;
                cxt.cur_ops->writeunlock();
+
                stutter_wait("lock_torture_writer");
        } while (!torture_must_stop());
        torture_kthread_stopping("lock_torture_writer");
@@ -482,12 +487,17 @@ static int lock_torture_reader(void *arg)
        do {
                if ((torture_random(&rand) & 0xfffff) == 0)
                        schedule_timeout_uninterruptible(1);
+
                cxt.cur_ops->readlock();
                lock_is_read_held = 1;
+               if (WARN_ON_ONCE(lock_is_write_held))
+                       lrsp->n_lock_fail++; /* rare, but... */
+
                lrsp->n_lock_acquired++;
                cxt.cur_ops->read_delay(&rand);
                lock_is_read_held = 0;
                cxt.cur_ops->readunlock();
+
                stutter_wait("lock_torture_reader");
        } while (!torture_must_stop());
        torture_kthread_stopping("lock_torture_reader");