ocfs2: extend enough credits for freeing one truncate record while replaying truncate records
PATCH 11/28 ocfs2: extend enough credits for freeing one truncate record while replaying truncate records
From: Xue jiufei <[email protected]>
Subject: ocfs2: extend enough credits for freeing one truncate record while replaying truncate records
Now function ocfs2_replay_truncate_records() first modifies tl_used, then calls ocfs2_extend_trans() to extend transactions for gd and alloc inode used for freeing clusters. jbd2_journal_restart() may be called and it may happen that tl_used in truncate log is decreased but the clusters are not freed, which means these clusters are lost. So we should avoid extending transactions in these two operations.
---
fs/ocfs2/alloc.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-)
fs/ocfs2/alloc.c renamed from fs/ocfs2/alloc.c~extend-enough-credits-for-freeing-one-truncate-record-while-replaying-truncate-records +8 -11
@@ -5975,16 +5975,6 @@ static int ocfs2_replay_truncate_recordsocfs2_journal_dirty (handle, tl_bh); -/* TODO: Perhaps we can calculate the bulk of the -* credits up front rather than extending like -* this. */ - status =ocfs2_extend_trans (handle, -OCFS2_TRUNCATE_LOG_FLUSH_ONE_REC ); -if (status <0 ) { -mlog_errno (status); - goto bail; - } - rec = tl->tl_recs[i]; start_blk =ocfs2_clusters_to_blocks (data_alloc_inode->i_sb,le32_to_cpu (rec.t_start));
@@ -6005,6 +5995,13 @@ static int ocfs2_replay_truncate_records goto bail; } } + + status =ocfs2_extend_trans (handle, +OCFS2_TRUNCATE_LOG_FLUSH_ONE_REC ); +if (status <0 ) { +mlog_errno (status); + goto bail; + } i--; }
@@ -6063,7 +6060,7 @@ int __ocfs2_flush_truncate_log(struct oc goto out_mutex; } - handle =ocfs2_start_trans (osb,OCFS2_TRUNCATE_LOG_UPDATE ); + handle =ocfs2_start_trans (osb,OCFS2_TRUNCATE_LOG_FLUSH_ONE_REC );if (IS_ERR (handle)) { status =PTR_ERR (handle);mlog_errno (status);
_
PATCH 11/28 ocfs2: extend enough credits for freeing one truncate record while replaying truncate records
fs/ocfs2/alloc.c
Quoted 22 lines · Andrew Morton
From: Xue jiufei <[email protected]>
Subject: ocfs2: extend enough credits for freeing one truncate record while replaying truncate recordsNow function
ocfs2_replay_truncate_records()first modifiestl_used, then callsocfs2_extend_trans()to extend transactions for gd and alloc inode used for freeing clusters.jbd2_journal_restart()may be called and it may happen thattl_usedin truncate log is decreased but the clusters are not freed, which means these clusters are lost. So we should avoid extending transactions in these two operations.Signed-off-by joyce.xue <[email protected]>Cc Mark Fasheh <[email protected]>Cc Joel Becker <[email protected]>Signed-off-by Andrew Morton <[email protected]>---
fs/ocfs2/alloc.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-)diff -puN
fs/ocfs2/alloc.c~extend-enough-credits-for-freeing-one-truncate-record-while-replaying-truncate-recordsfs/ocfs2/alloc.cfs/ocfs2/alloc.c renamed from fs/ocfs2/alloc.c~extend-enough-credits-for-freeing-one-truncate-record-while-replaying-truncate-records +0
-0
<looks good>
fs/ocfs2/alloc.c int __ocfs2_flush_truncate_log(struct oc · line 6066
Quoted 9 lines
fs/ocfs2/alloc.c renamed from fs/ocfs2/alloc.c~extend-enough-credits-for-freeing-one-truncate-record-while-replaying-truncate-records +1
-1@@ -6063,7 +6060,7 @@ int __ocfs2_flush_truncate_log(struct oc goto out_mutex; } - handle =ocfs2_start_trans (osb,OCFS2_TRUNCATE_LOG_UPDATE ); + handle =ocfs2_start_trans (osb,OCFS2_TRUNCATE_LOG_FLUSH_ONE_REC );if (IS_ERR (handle)) { status =PTR_ERR (handle);mlog_errno (status);
Why is this particular change here?
--Mark
--
Mark Fasheh
PATCH 11/28 ocfs2: extend enough credits for freeing one truncate record while replaying truncate records
Hi Mark,
Quoted 30 lines · Mark Fasheh
fs/ocfs2/alloc.c
Quoted 22 lines · Andrew Morton
From: Xue jiufei <[email protected]>
Subject: ocfs2: extend enough credits for freeing one truncate record while replaying truncate recordsNow function
ocfs2_replay_truncate_records()first modifiestl_used, then callsocfs2_extend_trans()to extend transactions for gd and alloc inode used for freeing clusters.jbd2_journal_restart()may be called and it may happen thattl_usedin truncate log is decreased but the clusters are not freed, which means these clusters are lost. So we should avoid extending transactions in these two operations.Signed-off-by joyce.xue <[email protected]>Cc Mark Fasheh <[email protected]>Cc Joel Becker <[email protected]>Signed-off-by Andrew Morton <[email protected]>---
fs/ocfs2/alloc.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-)diff -puN
fs/ocfs2/alloc.c~extend-enough-credits-for-freeing-one-truncate-record-while-replaying-truncate-recordsfs/ocfs2/alloc.cfs/ocfs2/alloc.c renamed from fs/ocfs2/alloc.c~extend-enough-credits-for-freeing-one-truncate-record-while-replaying-truncate-records +0
-0<looks good>
Quoted 4 lines
fs/ocfs2/alloc.c renamed from fs/ocfs2/alloc.c~extend-enough-credits-for-freeing-one-truncate-record-while-replaying-truncate-records +0
-0@@ -6063,7 +6060,7 @@ int __ocfs2_flush_truncate_log(struct oc goto out_mutex; }
Quoted 9 lines
fs/ocfs2/alloc.c int __ocfs2_flush_truncate_log(struct oc · line 6066
Quoted 5 lines
fs/ocfs2/alloc.c renamed from fs/ocfs2/alloc.c~extend-enough-credits-for-freeing-one-truncate-record-while-replaying-truncate-records +1
-1- handle =ocfs2_start_trans (osb,OCFS2_TRUNCATE_LOG_UPDATE ); + handle =ocfs2_start_trans (osb,OCFS2_TRUNCATE_LOG_FLUSH_ONE_REC );if (IS_ERR (handle)) { status =PTR_ERR (handle);mlog_errno (status);Why is this particular change here?
--Mark
I think Joyce wants to get enough credits at first and then call ocfs2_replay_truncate_records.
Thanks
Joseph
Quoted 9 lines
--
Mark Fasheh_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel at oss.oracle.com
https://oss.oracle.com/mailman/listinfo/ocfs2-devel
PATCH 11/28 ocfs2: extend enough credits for freeing one truncate record while replaying truncate records
Quoted 42 lines · Joseph Qi
Hi Mark,
Quoted 30 lines · Mark Fasheh
fs/ocfs2/alloc.c
Quoted 22 lines · Andrew Morton
From: Xue jiufei <[email protected]>
Subject: ocfs2: extend enough credits for freeing one truncate record while replaying truncate recordsNow function
ocfs2_replay_truncate_records()first modifiestl_used, then callsocfs2_extend_trans()to extend transactions for gd and alloc inode used for freeing clusters.jbd2_journal_restart()may be called and it may happen thattl_usedin truncate log is decreased but the clusters are not freed, which means these clusters are lost. So we should avoid extending transactions in these two operations.Signed-off-by joyce.xue <[email protected]>Cc Mark Fasheh <[email protected]>Cc Joel Becker <[email protected]>Signed-off-by Andrew Morton <[email protected]>---
fs/ocfs2/alloc.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-)diff -puN
fs/ocfs2/alloc.c~extend-enough-credits-for-freeing-one-truncate-record-while-replaying-truncate-recordsfs/ocfs2/alloc.cfs/ocfs2/alloc.c renamed from fs/ocfs2/alloc.c~extend-enough-credits-for-freeing-one-truncate-record-while-replaying-truncate-records +0
-0<looks good>
Quoted 4 lines
fs/ocfs2/alloc.c renamed from fs/ocfs2/alloc.c~extend-enough-credits-for-freeing-one-truncate-record-while-replaying-truncate-records +0
-0@@ -6063,7 +6060,7 @@ int __ocfs2_flush_truncate_log(struct oc goto out_mutex; }Quoted 9 lines
fs/ocfs2/alloc.c int __ocfs2_flush_truncate_log(struct oc · line 6066
Quoted 5 lines
fs/ocfs2/alloc.c renamed from fs/ocfs2/alloc.c~extend-enough-credits-for-freeing-one-truncate-record-while-replaying-truncate-records +1
-1- handle =ocfs2_start_trans (osb,OCFS2_TRUNCATE_LOG_UPDATE ); + handle =ocfs2_start_trans (osb,OCFS2_TRUNCATE_LOG_FLUSH_ONE_REC );if (IS_ERR (handle)) { status =PTR_ERR (handle);mlog_errno (status);Why is this particular change here?
--Mark
Quoted 2 lines
I think Joyce wants to get enough credits at first and then call
ocfs2_replay_truncate_records.
Oh ok I see. That's fine then, the patch otherwise looked good to me, thanks.
--Mark
--
Mark Fasheh
PATCH 11/28 ocfs2: extend enough credits for freeing one truncate record while replaying truncate records
Quoted 10 lines · On Tue, 1 Sep 2015 10:54:03 -0700 Mark Fasheh <[email protected]> wrote:
Quoted 5 lines
Quoted 3 lines
Why is this particular change here?
--MarkI think Joyce wants to get enough credits at first and then call
ocfs2_replay_truncate_records.Oh ok I see. That's fine then, the patch otherwise looked good to me, thanks.
Reviewed-by Mark Fasheh <[email protected]>
Cool. And where are we at with
http://ozlabs.org/~akpm/mmots/broken-out/ocfs2-extend-transaction-for-ocfs2_remove_rightmost_path-and-ocfs2_update_edge_lengths-before-to-avoid-inconsistency-between-inode-and-et.patch
?
PATCH 11/28 ocfs2: extend enough credits for freeing one truncate record while replaying truncate records
Quoted 11 lines · Andrew Morton
Quoted 9 lines · On Tue, 1 Sep 2015 10:54:03 -0700 Mark Fasheh <[email protected]> wrote:
Quoted 5 lines
Quoted 3 lines
Why is this particular change here?
--MarkI think Joyce wants to get enough credits at first and then call
ocfs2_replay_truncate_records.Oh ok I see. That's fine then, the patch otherwise looked good to me, thanks.
Quoted 6 lines
Quoted 1 line
Reviewed-by Mark Fasheh <[email protected]>Cool. And where are we at with
http://ozlabs.org/~akpm/mmots/broken-out/ocfs2-extend-transaction-for-ocfs2_remove_rightmost_path-and-ocfs2_update_edge_lengths-before-to-avoid-inconsistency-between-inode-and-et.patch?
I had a couple questions, we're waiting for a response:
https://www.mail-archive.com/ocfs2-devel at oss.oracle.com/msg10167.html
--Mark
--
Mark Fasheh