Files
kernel-tenderloin-3.0/include/linux
Frederic Weisbecker 08f14fc896 kill-the-bkl/reiserfs: move the concurrent tree accesses checks per superblock
When do_balance() balances the tree, a trick is performed to
provide the ability for other tree writers/readers to check whether
do_balance() is executing concurrently (requires CONFIG_REISERFS_CHECK).

This is done to protect concurrent accesses to the tree. The trick
is the following:

When do_balance is called, a unique global variable called cur_tb
takes a pointer to the current tree to be rebalanced.
Once do_balance finishes its work, cur_tb takes the NULL value.

Then, concurrent tree readers/writers just have to check the value
of cur_tb to ensure do_balance isn't executing concurrently.
If it is, then it proves that schedule() occured on do_balance(),
which then relaxed the bkl that protected the tree.

Now that the bkl has be turned into a mutex, this check is still
fine even though do_balance() becomes preemptible: the write lock
will not be automatically released on schedule(), so the tree is
still protected.

But this is only fine if we have a single reiserfs mountpoint.
Indeed, because the bkl is a global lock, it didn't allowed
concurrent executions between a tree reader/writer in a mount point
and a do_balance() on another tree from another mountpoint.

So assuming all these readers/writers weren't supposed to be
reentrant, the current check now sometimes detect false positives with
the current per-superblock mutex which allows this reentrancy.

This patch keeps the concurrent tree accesses check but moves it
per superblock, so that only trees from a same mount point are
checked to be not accessed concurrently.

[ Impact: fix spurious panic while running several reiserfs mount-points ]

Cc: Jeff Mahoney <jeffm@suse.com>
Cc: Chris Mason <chris.mason@oracle.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Alexander Beregalov <a.beregalov@gmail.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
2009-09-14 07:18:25 +02:00
..
2009-06-17 19:41:52 +02:00
2009-06-18 08:46:47 +10:00
2009-06-30 18:56:00 -07:00
2009-07-12 12:22:34 -07:00
2009-06-17 00:36:36 -04:00
2009-06-30 18:55:58 -07:00
2009-06-01 06:21:13 +00:00
2009-04-23 10:06:35 +01:00
2009-06-11 21:36:09 -04:00
2009-07-29 19:10:35 -07:00
2009-06-22 10:12:35 +01:00
2009-07-12 12:22:34 -07:00
2009-05-29 08:40:01 -07:00
2009-06-11 08:50:57 -07:00
2009-06-11 21:36:06 -04:00
2009-07-12 13:02:10 -07:00
2009-06-22 10:12:30 +01:00
2009-05-18 14:46:26 +01:00
2009-06-17 09:33:49 -07:00
2009-07-08 09:18:05 -07:00
2009-06-24 08:17:04 -04:00
2009-06-30 18:56:00 -07:00
2009-06-15 21:30:25 -07:00
2009-08-24 14:58:23 +10:00
2009-06-18 18:40:18 -04:00
2009-06-30 20:12:24 +02:00
2009-06-18 13:04:05 -07:00
2009-07-12 12:22:34 -07:00
2009-06-03 14:05:10 -04:00
2009-05-19 16:02:02 -07:00
2009-06-29 08:59:10 +10:00
2009-06-02 00:45:24 -07:00
2009-06-18 13:03:57 -07:00
2009-05-18 14:46:26 +01:00
2009-07-31 08:55:48 +02:00
2009-06-18 13:03:56 -07:00
2009-04-21 13:41:48 -07:00
2009-04-21 13:41:48 -07:00
2009-06-22 10:12:35 +01:00
2009-06-15 15:49:23 +02:00
2009-06-10 11:48:39 +03:00
2009-04-06 16:06:26 +01:00
2009-06-23 20:21:39 +01:00
2009-07-30 16:03:45 +09:30
2009-07-28 21:07:09 -04:00
2009-06-16 19:47:57 -07:00
2009-04-28 07:37:28 +02:00
2009-04-14 09:00:19 +10:00
2009-06-16 19:47:48 -07:00
2009-06-16 08:40:20 +02:00
2009-04-29 17:32:35 -07:00
2009-06-11 19:05:32 +02:00
2009-05-25 00:55:45 -07:00
2009-07-08 09:31:56 -07:00
2009-06-18 13:03:57 -07:00
2009-06-11 21:36:02 -04:00
2009-06-11 21:36:01 -04:00
2009-06-17 18:02:11 -07:00
2009-06-17 18:02:11 -07:00
2009-06-17 12:24:34 -07:00
2009-08-12 08:21:39 -07:00
2009-06-17 12:24:34 -07:00
2009-06-17 18:02:11 -07:00
2009-06-15 21:44:43 -07:00
2009-06-29 12:14:51 -07:00
2009-06-30 18:55:59 -07:00
2009-04-24 08:54:21 +02:00
2009-06-18 13:04:04 -07:00
2009-07-29 19:10:36 -07:00
2009-06-11 21:36:12 -04:00
2009-07-12 12:22:34 -07:00
2009-06-24 08:17:06 -04:00
2009-05-09 10:49:41 -04:00
2009-08-18 16:31:13 -07:00
2009-04-08 14:33:38 -07:00
2009-06-11 08:50:58 -07:00
2009-06-24 08:17:06 -04:00
2009-04-13 15:04:29 -07:00
2009-06-15 15:50:49 +02:00
2009-04-21 19:40:00 -07:00
2009-06-16 19:47:48 -07:00
2009-04-27 02:45:02 -07:00
2009-05-12 11:11:48 +02:00
2009-06-23 12:50:05 -07:00
2009-07-06 13:57:03 -07:00
2009-06-11 08:50:59 -07:00
2009-07-12 15:16:39 -07:00