diff options
| -rw-r--r-- | fs/jbd/transaction.c | 9 | ||||
| -rw-r--r-- | include/linux/jbd.h | 5 |
2 files changed, 14 insertions, 0 deletions
diff --git a/fs/jbd/transaction.c b/fs/jbd/transaction.c index 772b6531a2a2..8df5bac0b7a5 100644 --- a/fs/jbd/transaction.c +++ b/fs/jbd/transaction.c | |||
| @@ -233,6 +233,8 @@ out: | |||
| 233 | return ret; | 233 | return ret; |
| 234 | } | 234 | } |
| 235 | 235 | ||
| 236 | static struct lock_class_key jbd_handle_key; | ||
| 237 | |||
| 236 | /* Allocate a new handle. This should probably be in a slab... */ | 238 | /* Allocate a new handle. This should probably be in a slab... */ |
| 237 | static handle_t *new_handle(int nblocks) | 239 | static handle_t *new_handle(int nblocks) |
| 238 | { | 240 | { |
| @@ -243,6 +245,8 @@ static handle_t *new_handle(int nblocks) | |||
| 243 | handle->h_buffer_credits = nblocks; | 245 | handle->h_buffer_credits = nblocks; |
| 244 | handle->h_ref = 1; | 246 | handle->h_ref = 1; |
| 245 | 247 | ||
| 248 | lockdep_init_map(&handle->h_lockdep_map, "jbd_handle", &jbd_handle_key, 0); | ||
| 249 | |||
| 246 | return handle; | 250 | return handle; |
| 247 | } | 251 | } |
| 248 | 252 | ||
| @@ -286,6 +290,9 @@ handle_t *journal_start(journal_t *journal, int nblocks) | |||
| 286 | current->journal_info = NULL; | 290 | current->journal_info = NULL; |
| 287 | handle = ERR_PTR(err); | 291 | handle = ERR_PTR(err); |
| 288 | } | 292 | } |
| 293 | |||
| 294 | lock_acquire(&handle->h_lockdep_map, 0, 0, 0, 2, _THIS_IP_); | ||
| 295 | |||
| 289 | return handle; | 296 | return handle; |
| 290 | } | 297 | } |
| 291 | 298 | ||
| @@ -1411,6 +1418,8 @@ int journal_stop(handle_t *handle) | |||
| 1411 | spin_unlock(&journal->j_state_lock); | 1418 | spin_unlock(&journal->j_state_lock); |
| 1412 | } | 1419 | } |
| 1413 | 1420 | ||
| 1421 | lock_release(&handle->h_lockdep_map, 1, _THIS_IP_); | ||
| 1422 | |||
| 1414 | jbd_free_handle(handle); | 1423 | jbd_free_handle(handle); |
| 1415 | return err; | 1424 | return err; |
| 1416 | } | 1425 | } |
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index 452737551260..700a93b79189 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <linux/bit_spinlock.h> | 30 | #include <linux/bit_spinlock.h> |
| 31 | #include <linux/mutex.h> | 31 | #include <linux/mutex.h> |
| 32 | #include <linux/timer.h> | 32 | #include <linux/timer.h> |
| 33 | #include <linux/lockdep.h> | ||
| 33 | 34 | ||
| 34 | #include <asm/semaphore.h> | 35 | #include <asm/semaphore.h> |
| 35 | #endif | 36 | #endif |
| @@ -396,6 +397,10 @@ struct handle_s | |||
| 396 | unsigned int h_sync: 1; /* sync-on-close */ | 397 | unsigned int h_sync: 1; /* sync-on-close */ |
| 397 | unsigned int h_jdata: 1; /* force data journaling */ | 398 | unsigned int h_jdata: 1; /* force data journaling */ |
| 398 | unsigned int h_aborted: 1; /* fatal error on handle */ | 399 | unsigned int h_aborted: 1; /* fatal error on handle */ |
| 400 | |||
| 401 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
| 402 | struct lockdep_map h_lockdep_map; | ||
| 403 | #endif | ||
| 399 | }; | 404 | }; |
| 400 | 405 | ||
| 401 | 406 | ||
