Commit 32433879480d13bc019d5a067ce884064a93dd63

Authored by Jan Kara
Committed by Linus Torvalds
1 parent 9de100d001

jbd: update locking coments

Update information about locking in JBD revoke code.

Reported-by: Lin Tan <tammy000@gmail.com>.
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 19 additions and 5 deletions Side-by-side Diff

... ... @@ -55,6 +55,25 @@
55 55 * need do nothing.
56 56 * RevokeValid set, Revoked set:
57 57 * buffer has been revoked.
  58 + *
  59 + * Locking rules:
  60 + * We keep two hash tables of revoke records. One hashtable belongs to the
  61 + * running transaction (is pointed to by journal->j_revoke), the other one
  62 + * belongs to the committing transaction. Accesses to the second hash table
  63 + * happen only from the kjournald and no other thread touches this table. Also
  64 + * journal_switch_revoke_table() which switches which hashtable belongs to the
  65 + * running and which to the committing transaction is called only from
  66 + * kjournald. Therefore we need no locks when accessing the hashtable belonging
  67 + * to the committing transaction.
  68 + *
  69 + * All users operating on the hash table belonging to the running transaction
  70 + * have a handle to the transaction. Therefore they are safe from kjournald
  71 + * switching hash tables under them. For operations on the lists of entries in
  72 + * the hash table j_revoke_lock is used.
  73 + *
  74 + * Finally, also replay code uses the hash tables but at this moment noone else
  75 + * can touch them (filesystem isn't mounted yet) and hence no locking is
  76 + * needed.
58 77 */
59 78  
60 79 #ifndef __KERNEL__
... ... @@ -402,8 +421,6 @@
402 421 * the second time we would still have a pending revoke to cancel. So,
403 422 * do not trust the Revoked bit on buffers unless RevokeValid is also
404 423 * set.
405   - *
406   - * The caller must have the journal locked.
407 424 */
408 425 int journal_cancel_revoke(handle_t *handle, struct journal_head *jh)
409 426 {
410 427  
... ... @@ -481,10 +498,7 @@
481 498 /*
482 499 * Write revoke records to the journal for all entries in the current
483 500 * revoke hash, deleting the entries as we go.
484   - *
485   - * Called with the journal lock held.
486 501 */
487   -
488 502 void journal_write_revoke_records(journal_t *journal,
489 503 transaction_t *transaction)
490 504 {