diff options
-rw-r--r-- | fs/ocfs2/alloc.c | 6 | ||||
-rw-r--r-- | fs/ocfs2/ocfs2.h | 1 |
2 files changed, 6 insertions, 1 deletions
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c index b4deb5f750d9..9d8fcf2f3b94 100644 --- a/fs/ocfs2/alloc.c +++ b/fs/ocfs2/alloc.c | |||
@@ -6046,7 +6046,8 @@ static void ocfs2_truncate_log_worker(struct work_struct *work) | |||
6046 | void ocfs2_schedule_truncate_log_flush(struct ocfs2_super *osb, | 6046 | void ocfs2_schedule_truncate_log_flush(struct ocfs2_super *osb, |
6047 | int cancel) | 6047 | int cancel) |
6048 | { | 6048 | { |
6049 | if (osb->osb_tl_inode) { | 6049 | if (osb->osb_tl_inode && |
6050 | atomic_read(&osb->osb_tl_disable) == 0) { | ||
6050 | /* We want to push off log flushes while truncates are | 6051 | /* We want to push off log flushes while truncates are |
6051 | * still running. */ | 6052 | * still running. */ |
6052 | if (cancel) | 6053 | if (cancel) |
@@ -6223,6 +6224,8 @@ void ocfs2_truncate_log_shutdown(struct ocfs2_super *osb) | |||
6223 | int status; | 6224 | int status; |
6224 | struct inode *tl_inode = osb->osb_tl_inode; | 6225 | struct inode *tl_inode = osb->osb_tl_inode; |
6225 | 6226 | ||
6227 | atomic_set(&osb->osb_tl_disable, 1); | ||
6228 | |||
6226 | if (tl_inode) { | 6229 | if (tl_inode) { |
6227 | cancel_delayed_work(&osb->osb_truncate_log_wq); | 6230 | cancel_delayed_work(&osb->osb_truncate_log_wq); |
6228 | flush_workqueue(ocfs2_wq); | 6231 | flush_workqueue(ocfs2_wq); |
@@ -6254,6 +6257,7 @@ int ocfs2_truncate_log_init(struct ocfs2_super *osb) | |||
6254 | * until we're sure all is well. */ | 6257 | * until we're sure all is well. */ |
6255 | INIT_DELAYED_WORK(&osb->osb_truncate_log_wq, | 6258 | INIT_DELAYED_WORK(&osb->osb_truncate_log_wq, |
6256 | ocfs2_truncate_log_worker); | 6259 | ocfs2_truncate_log_worker); |
6260 | atomic_set(&osb->osb_tl_disable, 0); | ||
6257 | osb->osb_tl_bh = tl_bh; | 6261 | osb->osb_tl_bh = tl_bh; |
6258 | osb->osb_tl_inode = tl_inode; | 6262 | osb->osb_tl_inode = tl_inode; |
6259 | 6263 | ||
diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h index 8d64a97a9d5e..bbec539230fd 100644 --- a/fs/ocfs2/ocfs2.h +++ b/fs/ocfs2/ocfs2.h | |||
@@ -422,6 +422,7 @@ struct ocfs2_super | |||
422 | struct inode *osb_tl_inode; | 422 | struct inode *osb_tl_inode; |
423 | struct buffer_head *osb_tl_bh; | 423 | struct buffer_head *osb_tl_bh; |
424 | struct delayed_work osb_truncate_log_wq; | 424 | struct delayed_work osb_truncate_log_wq; |
425 | atomic_t osb_tl_disable; | ||
425 | /* | 426 | /* |
426 | * How many clusters in our truncate log. | 427 | * How many clusters in our truncate log. |
427 | * It must be protected by osb_tl_inode->i_mutex. | 428 | * It must be protected by osb_tl_inode->i_mutex. |