* [Ocfs2-devel] [PATCH] ocfs2: fix umount hang while shutting down truncate log
@ 2014-05-21 3:06 Xue jiufei
2014-05-21 22:29 ` Andrew Morton
0 siblings, 1 reply; 3+ messages in thread
From: Xue jiufei @ 2014-05-21 3:06 UTC (permalink / raw)
To: ocfs2-devel
Revert the following patch because it may cause umount hang while
shutting down truncate log.
5f82eaa502c75d881c1db7979f3c2bf2da6865f
fix NULL pointer dereference when dismount and ocfs2rec simultaneously
The situation is as followes:
ocfs2_dismout_volume
-> ocfs2_recovery_exit
-> free osb->recovery_map
-> ocfs2_truncate_shutdown
-> lock global bitmap inode
-> ocfs2_wait_for_recovery
-> check whether osb->recovery_map->rm_used is zero
Because osb->recovery_map is already freed, rm_used can be any other
values, so it may yield umount hang.
To prevent NULL pointer dereference while getting sys_root_inode, we
use a osb_tl_disable flag to disable schedule osb_truncate_log_wq after
truncate log shutdown.
Signed-off-by: joyce.xue <xuejiufei@huawei.com>
---
fs/ocfs2/alloc.c | 6 +++++-
fs/ocfs2/ocfs2.h | 1 +
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index b4deb5f..9d8fcf2 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)
void ocfs2_schedule_truncate_log_flush(struct ocfs2_super *osb,
int cancel)
{
- if (osb->osb_tl_inode) {
+ if (osb->osb_tl_inode &&
+ atomic_read(&osb->osb_tl_disable) == 0) {
/* We want to push off log flushes while truncates are
* still running. */
if (cancel)
@@ -6223,6 +6224,8 @@ void ocfs2_truncate_log_shutdown(struct ocfs2_super *osb)
int status;
struct inode *tl_inode = osb->osb_tl_inode;
+ atomic_set(&osb->osb_tl_disable, 1);
+
if (tl_inode) {
cancel_delayed_work(&osb->osb_truncate_log_wq);
flush_workqueue(ocfs2_wq);
@@ -6254,6 +6257,7 @@ int ocfs2_truncate_log_init(struct ocfs2_super *osb)
* until we're sure all is well. */
INIT_DELAYED_WORK(&osb->osb_truncate_log_wq,
ocfs2_truncate_log_worker);
+ atomic_set(&osb->osb_tl_disable, 0);
osb->osb_tl_bh = tl_bh;
osb->osb_tl_inode = tl_inode;
diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h
index 8d64a97..bbec539 100644
--- a/fs/ocfs2/ocfs2.h
+++ b/fs/ocfs2/ocfs2.h
@@ -422,6 +422,7 @@ struct ocfs2_super
struct inode *osb_tl_inode;
struct buffer_head *osb_tl_bh;
struct delayed_work osb_truncate_log_wq;
+ atomic_t osb_tl_disable;
/*
* How many clusters in our truncate log.
* It must be protected by osb_tl_inode->i_mutex.
--
1.8.3.4
^ permalink raw reply related [flat|nested] 3+ messages in thread* [Ocfs2-devel] [PATCH] ocfs2: fix umount hang while shutting down truncate log
2014-05-21 3:06 [Ocfs2-devel] [PATCH] ocfs2: fix umount hang while shutting down truncate log Xue jiufei
@ 2014-05-21 22:29 ` Andrew Morton
2014-05-22 1:40 ` Xue jiufei
0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2014-05-21 22:29 UTC (permalink / raw)
To: ocfs2-devel
On Wed, 21 May 2014 11:06:48 +0800 Xue jiufei <xuejiufei@huawei.com> wrote:
> Revert the following patch because it may cause umount hang while
> shutting down truncate log.
> 5f82eaa502c75d881c1db7979f3c2bf2da6865f
I can find no such commit.
When referring to commits, please use the form
c4028958b6ec ("WorkStruct: make allyesconfig")
so that people can still identify the commit when it has a different
hash.
^ permalink raw reply [flat|nested] 3+ messages in thread* [Ocfs2-devel] [PATCH] ocfs2: fix umount hang while shutting down truncate log
2014-05-21 22:29 ` Andrew Morton
@ 2014-05-22 1:40 ` Xue jiufei
0 siblings, 0 replies; 3+ messages in thread
From: Xue jiufei @ 2014-05-22 1:40 UTC (permalink / raw)
To: ocfs2-devel
On 2014/5/22 6:29, Andrew Morton wrote:
> On Wed, 21 May 2014 11:06:48 +0800 Xue jiufei <xuejiufei@huawei.com> wrote:
>
>> Revert the following patch because it may cause umount hang while
>> shutting down truncate log.
>> 5f82eaa502c75d881c1db7979f3c2bf2da6865f
>
> I can find no such commit.
>
> When referring to commits, please use the form
>
> c4028958b6ec ("WorkStruct: make allyesconfig")
>
> so that people can still identify the commit when it has a different
> hash.
>
I am so sorry that I wrote the wrong commit id by mistake, I will
resend the patch later.
>
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-05-22 1:40 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-21 3:06 [Ocfs2-devel] [PATCH] ocfs2: fix umount hang while shutting down truncate log Xue jiufei
2014-05-21 22:29 ` Andrew Morton
2014-05-22 1:40 ` Xue jiufei
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.