[Ocfs2-devel] [PATCH 1/2] ocfs2: fix trans extend while flush truncate log

2016-09-12 Thread Junxiao Bi
Every time,  ocfs2_extend_trans() included a credit for truncate log inode,
but as that inode had been managed by jbd2 running transaction first time,
it will not consume that credit until jbd2_journal_restart(). Since total
credits to extend always included the un-consumed ones, there will be more
and more un-consumed credit, at last jbd2_journal_restart() will fail due
to credit number over the half of max transction credit.

The following error was caught when unlink a large file with many extents.

[233096.013936] [ cut here ]
[233096.018586] WARNING: CPU: 0 PID: 13626 at fs/jbd2/transaction.c:269 
start_this_handle+0x4c3/0x510 [jbd2]()
[233096.028335] Modules linked in: ocfs2 nfsd lockd grace nfs_acl auth_rpcgss 
sunrpc autofs4 ocfs2_dlmfs ocfs2_stack_o2cb ocfs2_dlm ocfs2_nodemanager 
ocfs2_stackglue configfs sd_mod sg ip6t_REJECT nf_reject_ipv6 nf_conntrack_ipv6 
nf_defrag_ipv6 xt_state nf_conntrack ip6table_filter ip6_tables be2iscsi 
iscsi_boot_sysfs bnx2i cnic uio cxgb4i cxgb4 cxgb3i libcxgbi cxgb3 mdio ib_iser 
rdma_cm ib_cm iw_cm ib_sa ib_mad ib_core ib_addr ipv6 iscsi_tcp libiscsi_tcp 
libiscsi scsi_transport_iscsi ppdev xen_kbdfront xen_netfront fb_sys_fops 
sysimgblt sysfillrect syscopyarea parport_pc parport pcspkr i2c_piix4 i2c_core 
acpi_cpufreq ext4 jbd2 mbcache xen_blkfront floppy pata_acpi ata_generic 
ata_piix dm_mirror dm_region_hash dm_log dm_mod
[233096.081751] CPU: 0 PID: 13626 Comm: unlink Tainted: GW   
4.1.12-37.6.3.el6uek.x86_64 #2
[233096.088556] Hardware name: Xen HVM domU, BIOS 4.4.4OVM 02/11/2016
[233096.093125]  010d 8818b768 816bc5bc 
010d
[233096.099082]   8818b7a8 81081475 
8818b788
[233096.105038]  88007a99a000 88007b573390 00fb 
0050
[233096.110540] Call Trace:
[233096.111893]  [] dump_stack+0x48/0x5c
[233096.114637]  [] warn_slowpath_common+0x95/0xe0
[233096.117797]  [] warn_slowpath_null+0x1a/0x20
[233096.120984]  [] start_this_handle+0x4c3/0x510 [jbd2]
[233096.124505]  [] ? __jbd2_log_start_commit+0xe5/0xf0 [jbd2]
[233096.128115]  [] ? __wake_up+0x53/0x70
[233096.130924]  [] jbd2__journal_restart+0x161/0x1b0 [jbd2]
[233096.134523]  [] jbd2_journal_restart+0x13/0x20 [jbd2]
[233096.137986]  [] ocfs2_extend_trans+0x74/0x220 [ocfs2]
[233096.141407]  [] ? ocfs2_journal_dirty+0x3a/0x90 [ocfs2]
[233096.144921]  [] ocfs2_replay_truncate_records+0x93/0x360 
[ocfs2]
[233096.148819]  [] __ocfs2_flush_truncate_log+0x13e/0x3a0 
[ocfs2]
[233096.152644]  [] ? 
ocfs2_reserve_blocks_for_rec_trunc.clone.0+0x44/0x1f0 [ocfs2]
[233096.157310]  [] ocfs2_remove_btree_range+0x458/0x7f0 
[ocfs2]
[233096.161099]  [] ? __ocfs2_find_path+0x187/0x2d0 [ocfs2]
[233096.164612]  [] ocfs2_commit_truncate+0x1b3/0x6f0 [ocfs2]
[233096.168204]  [] ? 
ocfs2_xattr_tree_et_ops+0x60/0xfffe8c20 [ocfs2]
[233096.172539]  [] ? ocfs2_journal_access_eb+0x20/0x20 
[ocfs2]
[233096.176285]  [] ? __sb_end_write+0x33/0x70
[233096.179226]  [] ocfs2_truncate_for_delete+0xbd/0x380 
[ocfs2]
[233096.183009]  [] ? ocfs2_query_inode_wipe+0xf4/0x320 
[ocfs2]
[233096.186738]  [] ocfs2_wipe_inode+0x136/0x6a0 [ocfs2]
[233096.190165]  [] ? ocfs2_query_inode_wipe+0xf4/0x320 
[ocfs2]
[233096.193846]  [] ocfs2_delete_inode+0x2a2/0x3e0 [ocfs2]
[233096.197274]  [] ? __inode_wait_for_writeback+0x69/0xc0
[233096.200736]  [] ? 
__PRETTY_FUNCTION__.112282+0x20/0xb520 [ocfs2]
[233096.205146]  [] ocfs2_evict_inode+0x28/0x60 [ocfs2]
[233096.208462]  [] evict+0xab/0x1a0
[233096.211020]  [] ? 
__PRETTY_FUNCTION__.112282+0x20/0xb520 [ocfs2]
[233096.215396]  [] iput_final+0xf6/0x190
[233096.218169]  [] iput+0xc8/0xe0
[233096.220586]  [] do_unlinkat+0x1b7/0x310
[233096.223487]  [] ? __do_page_fault+0x18b/0x480
[233096.226655]  [] ? __audit_syscall_entry+0xac/0x110
[233096.230009]  [] ? do_audit_syscall_entry+0x6c/0x70
[233096.233346]  [] ? syscall_trace_enter_phase1+0x153/0x180
[233096.237103]  [] SyS_unlink+0x16/0x20
[233096.239800]  [] system_call_fastpath+0x12/0x71
[233096.244346] ---[ end trace 28aa7410e69369cf ]---
[233096.247798] JBD2: unlink wants too many credits (251 > 128)

Signed-off-by: Junxiao Bi 
---
 fs/ocfs2/alloc.c |   29 ++---
 1 file changed, 10 insertions(+), 19 deletions(-)

diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index 7dabbc31060e..51128789a661 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -5922,7 +5922,6 @@ bail:
 }
 
 static int ocfs2_replay_truncate_records(struct ocfs2_super *osb,
-handle_t *handle,
 struct inode *data_alloc_inode,
 struct buffer_head *data_alloc_bh)
 {
@@ -5935,11 +5934,19 @@ static int ocfs2_replay_truncate_records(struct 
ocfs2_super *osb,
struct ocfs2_truncate_log *tl;
struct inode *tl_inode = osb->osb_tl_inode;
struct buffer_head *tl_bh 

[Ocfs2-devel] [PATCH 2/2] ocfs2: fix trans extend while free cached blocks

2016-09-12 Thread Junxiao Bi
Root cause of this issue is the same with the one fixed by last patch,
but this time credits for allocator inode and group descriptor may not
be consumed before trans extend.

The following error was caught.

[  685.240276] WARNING: CPU: 0 PID: 2037 at fs/jbd2/transaction.c:269 
start_this_handle+0x4c3/0x510 [jbd2]()
[  685.240294] Modules linked in: ocfs2 nfsd lockd grace nfs_acl auth_rpcgss 
sunrpc autofs4 ocfs2_dlmfs ocfs2_stack_o2cb ocfs2_dlm ocfs2_nodemanager 
ocfs2_stackglue configfs sd_mod sg ip6t_REJECT nf_reject_ipv6 nf_conntrack_ipv6 
nf_defrag_ipv6 xt_state nf_conntrack ip6table_filter ip6_tables be2iscsi 
iscsi_boot_sysfs bnx2i cnic uio cxgb4i cxgb4 cxgb3i libcxgbi cxgb3 mdio ib_iser 
rdma_cm ib_cm iw_cm ib_sa ib_mad ib_core ib_addr ipv6 iscsi_tcp libiscsi_tcp 
libiscsi scsi_transport_iscsi ppdev xen_kbdfront fb_sys_fops sysimgblt 
sysfillrect syscopyarea xen_netfront parport_pc parport pcspkr i2c_piix4 
i2c_core acpi_cpufreq ext4 jbd2 mbcache xen_blkfront floppy pata_acpi 
ata_generic ata_piix dm_mirror dm_region_hash dm_log dm_mod
[  685.240296] CPU: 0 PID: 2037 Comm: rm Tainted: GW   
4.1.12-37.6.3.el6uek.bug24573128v2.x86_64 #2
[  685.240296] Hardware name: Xen HVM domU, BIOS 4.4.4OVM 02/11/2016
[  685.240298]  010d 88007ac3f808 816bc5bc 
010d
[  685.240300]   88007ac3f848 81081475 
88007ac3f828
[  685.240301]  880037bbf000 880037688210 0095 
0050
[  685.240301] Call Trace:
[  685.240305]  [] dump_stack+0x48/0x5c
[  685.240308]  [] warn_slowpath_common+0x95/0xe0
[  685.240310]  [] warn_slowpath_null+0x1a/0x20
[  685.240313]  [] start_this_handle+0x4c3/0x510 [jbd2]
[  685.240317]  [] ? __jbd2_log_start_commit+0xe5/0xf0 [jbd2]
[  685.240319]  [] ? __wake_up+0x53/0x70
[  685.240322]  [] jbd2__journal_restart+0x161/0x1b0 [jbd2]
[  685.240325]  [] jbd2_journal_restart+0x13/0x20 [jbd2]
[  685.240340]  [] ocfs2_extend_trans+0x74/0x220 [ocfs2]
[  685.240347]  [] ocfs2_free_cached_blocks+0x16b/0x4e0 
[ocfs2]
[  685.240349]  [] ? internal_add_timer+0x91/0xc0
[  685.240356]  [] ocfs2_run_deallocs+0x70/0x270 [ocfs2]
[  685.240363]  [] ocfs2_commit_truncate+0x474/0x6f0 [ocfs2]
[  685.240374]  [] ? 
ocfs2_xattr_tree_et_ops+0x60/0xfffe8c00 [ocfs2]
[  685.240384]  [] ? ocfs2_journal_access_eb+0x20/0x20 [ocfs2]
[  685.240385]  [] ? __sb_end_write+0x33/0x70
[  685.240394]  [] ocfs2_truncate_for_delete+0xbd/0x380 
[ocfs2]
[  685.240402]  [] ? ocfs2_query_inode_wipe+0xf4/0x320 [ocfs2]
[  685.240409]  [] ocfs2_wipe_inode+0x136/0x6a0 [ocfs2]
[  685.240415]  [] ? ocfs2_query_inode_wipe+0xf4/0x320 [ocfs2]
[  685.240422]  [] ocfs2_delete_inode+0x2a2/0x3e0 [ocfs2]
[  685.240424]  [] ? __inode_wait_for_writeback+0x69/0xc0
[  685.240437]  [] ? 
__PRETTY_FUNCTION__.112282+0x20/0xb500 [ocfs2]
[  685.240444]  [] ocfs2_evict_inode+0x28/0x60 [ocfs2]
[  685.240445]  [] evict+0xab/0x1a0
[  685.240456]  [] ? 
__PRETTY_FUNCTION__.112282+0x20/0xb500 [ocfs2]
[  685.240457]  [] iput_final+0xf6/0x190
[  685.240458]  [] iput+0xc8/0xe0
[  685.240460]  [] do_unlinkat+0x1b7/0x310
[  685.240462]  [] ? __audit_syscall_entry+0xac/0x110
[  685.240464]  [] ? do_audit_syscall_entry+0x6c/0x70
[  685.240465]  [] ? syscall_trace_enter_phase1+0x153/0x180
[  685.240467]  [] SyS_unlinkat+0x22/0x40
[  685.240468]  [] system_call_fastpath+0x12/0x71
[  685.240469] ---[ end trace a62437cb060baa71 ]---
[  685.240470] JBD2: rm wants too many credits (149 > 128)

Signed-off-by: Junxiao Bi 
---
 fs/ocfs2/alloc.c |   27 +--
 1 file changed, 9 insertions(+), 18 deletions(-)

diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index 51128789a661..f165f867f332 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -6404,43 +6404,34 @@ static int ocfs2_free_cached_blocks(struct ocfs2_super 
*osb,
goto out_mutex;
}
 
-   handle = ocfs2_start_trans(osb, OCFS2_SUBALLOC_FREE);
-   if (IS_ERR(handle)) {
-   ret = PTR_ERR(handle);
-   mlog_errno(ret);
-   goto out_unlock;
-   }
-
while (head) {
if (head->free_bg)
bg_blkno = head->free_bg;
else
bg_blkno = ocfs2_which_suballoc_group(head->free_blk,
  head->free_bit);
+   handle = ocfs2_start_trans(osb, OCFS2_SUBALLOC_FREE);
+   if (IS_ERR(handle)) {
+   ret = PTR_ERR(handle);
+   mlog_errno(ret);
+   goto out_unlock;
+   }
+
trace_ocfs2_free_cached_blocks(
 (unsigned long long)head->free_blk, head->free_bit);
 
ret = ocfs2_free_suballoc_bits(handle, inode, di_bh,
   head->free_bit, bg_blkno, 1);
-   if (ret) {
+   if (ret)
   

Re: [Ocfs2-devel] [PATCH 1/2] ocfs2: fix trans extend while flush truncate log

2016-09-12 Thread Joseph Qi
Hi Junxiao,

On 2016/9/12 18:03, Junxiao Bi wrote:
> Every time,  ocfs2_extend_trans() included a credit for truncate log inode,
> but as that inode had been managed by jbd2 running transaction first time,
> it will not consume that credit until jbd2_journal_restart(). Since total
> credits to extend always included the un-consumed ones, there will be more
> and more un-consumed credit, at last jbd2_journal_restart() will fail due
> to credit number over the half of max transction credit.
> 
> The following error was caught when unlink a large file with many extents.
> 
> [233096.013936] [ cut here ]
> [233096.018586] WARNING: CPU: 0 PID: 13626 at fs/jbd2/transaction.c:269 
> start_this_handle+0x4c3/0x510 [jbd2]()
> [233096.028335] Modules linked in: ocfs2 nfsd lockd grace nfs_acl auth_rpcgss 
> sunrpc autofs4 ocfs2_dlmfs ocfs2_stack_o2cb ocfs2_dlm ocfs2_nodemanager 
> ocfs2_stackglue configfs sd_mod sg ip6t_REJECT nf_reject_ipv6 
> nf_conntrack_ipv6 nf_defrag_ipv6 xt_state nf_conntrack ip6table_filter 
> ip6_tables be2iscsi iscsi_boot_sysfs bnx2i cnic uio cxgb4i cxgb4 cxgb3i 
> libcxgbi cxgb3 mdio ib_iser rdma_cm ib_cm iw_cm ib_sa ib_mad ib_core ib_addr 
> ipv6 iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi ppdev xen_kbdfront 
> xen_netfront fb_sys_fops sysimgblt sysfillrect syscopyarea parport_pc parport 
> pcspkr i2c_piix4 i2c_core acpi_cpufreq ext4 jbd2 mbcache xen_blkfront floppy 
> pata_acpi ata_generic ata_piix dm_mirror dm_region_hash dm_log dm_mod
> [233096.081751] CPU: 0 PID: 13626 Comm: unlink Tainted: GW   
> 4.1.12-37.6.3.el6uek.x86_64 #2
> [233096.088556] Hardware name: Xen HVM domU, BIOS 4.4.4OVM 02/11/2016
> [233096.093125]  010d 8818b768 816bc5bc 
> 010d
> [233096.099082]   8818b7a8 81081475 
> 8818b788
> [233096.105038]  88007a99a000 88007b573390 00fb 
> 0050
> [233096.110540] Call Trace:
> [233096.111893]  [] dump_stack+0x48/0x5c
> [233096.114637]  [] warn_slowpath_common+0x95/0xe0
> [233096.117797]  [] warn_slowpath_null+0x1a/0x20
> [233096.120984]  [] start_this_handle+0x4c3/0x510 [jbd2]
> [233096.124505]  [] ? __jbd2_log_start_commit+0xe5/0xf0 
> [jbd2]
> [233096.128115]  [] ? __wake_up+0x53/0x70
> [233096.130924]  [] jbd2__journal_restart+0x161/0x1b0 [jbd2]
> [233096.134523]  [] jbd2_journal_restart+0x13/0x20 [jbd2]
> [233096.137986]  [] ocfs2_extend_trans+0x74/0x220 [ocfs2]
> [233096.141407]  [] ? ocfs2_journal_dirty+0x3a/0x90 [ocfs2]
> [233096.144921]  [] 
> ocfs2_replay_truncate_records+0x93/0x360 [ocfs2]
> [233096.148819]  [] __ocfs2_flush_truncate_log+0x13e/0x3a0 
> [ocfs2]
> [233096.152644]  [] ? 
> ocfs2_reserve_blocks_for_rec_trunc.clone.0+0x44/0x1f0 [ocfs2]
> [233096.157310]  [] ocfs2_remove_btree_range+0x458/0x7f0 
> [ocfs2]
> [233096.161099]  [] ? __ocfs2_find_path+0x187/0x2d0 [ocfs2]
> [233096.164612]  [] ocfs2_commit_truncate+0x1b3/0x6f0 
> [ocfs2]
> [233096.168204]  [] ? 
> ocfs2_xattr_tree_et_ops+0x60/0xfffe8c20 [ocfs2]
> [233096.172539]  [] ? ocfs2_journal_access_eb+0x20/0x20 
> [ocfs2]
> [233096.176285]  [] ? __sb_end_write+0x33/0x70
> [233096.179226]  [] ocfs2_truncate_for_delete+0xbd/0x380 
> [ocfs2]
> [233096.183009]  [] ? ocfs2_query_inode_wipe+0xf4/0x320 
> [ocfs2]
> [233096.186738]  [] ocfs2_wipe_inode+0x136/0x6a0 [ocfs2]
> [233096.190165]  [] ? ocfs2_query_inode_wipe+0xf4/0x320 
> [ocfs2]
> [233096.193846]  [] ocfs2_delete_inode+0x2a2/0x3e0 [ocfs2]
> [233096.197274]  [] ? __inode_wait_for_writeback+0x69/0xc0
> [233096.200736]  [] ? 
> __PRETTY_FUNCTION__.112282+0x20/0xb520 [ocfs2]
> [233096.205146]  [] ocfs2_evict_inode+0x28/0x60 [ocfs2]
> [233096.208462]  [] evict+0xab/0x1a0
> [233096.211020]  [] ? 
> __PRETTY_FUNCTION__.112282+0x20/0xb520 [ocfs2]
> [233096.215396]  [] iput_final+0xf6/0x190
> [233096.218169]  [] iput+0xc8/0xe0
> [233096.220586]  [] do_unlinkat+0x1b7/0x310
> [233096.223487]  [] ? __do_page_fault+0x18b/0x480
> [233096.226655]  [] ? __audit_syscall_entry+0xac/0x110
> [233096.230009]  [] ? do_audit_syscall_entry+0x6c/0x70
> [233096.233346]  [] ? syscall_trace_enter_phase1+0x153/0x180
> [233096.237103]  [] SyS_unlink+0x16/0x20
> [233096.239800]  [] system_call_fastpath+0x12/0x71
> [233096.244346] ---[ end trace 28aa7410e69369cf ]---
> [233096.247798] JBD2: unlink wants too many credits (251 > 128)
> 
> Signed-off-by: Junxiao Bi 
> ---
>  fs/ocfs2/alloc.c |   29 ++---
>  1 file changed, 10 insertions(+), 19 deletions(-)
> 
> diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
> index 7dabbc31060e..51128789a661 100644
> --- a/fs/ocfs2/alloc.c
> +++ b/fs/ocfs2/alloc.c
> @@ -5922,7 +5922,6 @@ bail:
>  }
>  
>  static int ocfs2_replay_truncate_records(struct ocfs2_super *osb,
> -  handle_t *handle,
>struct inode *data_alloc_inode,
>str

Re: [Ocfs2-devel] [PATCH 1/2] ocfs2: fix trans extend while flush truncate log

2016-09-12 Thread Junxiao Bi
On 09/13/2016 10:04 AM, Joseph Qi wrote:
> Hi Junxiao,
> 
> On 2016/9/12 18:03, Junxiao Bi wrote:
>> Every time,  ocfs2_extend_trans() included a credit for truncate log inode,
>> but as that inode had been managed by jbd2 running transaction first time,
>> it will not consume that credit until jbd2_journal_restart(). Since total
>> credits to extend always included the un-consumed ones, there will be more
>> and more un-consumed credit, at last jbd2_journal_restart() will fail due
>> to credit number over the half of max transction credit.
>>
>> The following error was caught when unlink a large file with many extents.
>>
>> [233096.013936] [ cut here ]
>> [233096.018586] WARNING: CPU: 0 PID: 13626 at fs/jbd2/transaction.c:269 
>> start_this_handle+0x4c3/0x510 [jbd2]()
>> [233096.028335] Modules linked in: ocfs2 nfsd lockd grace nfs_acl 
>> auth_rpcgss sunrpc autofs4 ocfs2_dlmfs ocfs2_stack_o2cb ocfs2_dlm 
>> ocfs2_nodemanager ocfs2_stackglue configfs sd_mod sg ip6t_REJECT 
>> nf_reject_ipv6 nf_conntrack_ipv6 nf_defrag_ipv6 xt_state nf_conntrack 
>> ip6table_filter ip6_tables be2iscsi iscsi_boot_sysfs bnx2i cnic uio cxgb4i 
>> cxgb4 cxgb3i libcxgbi cxgb3 mdio ib_iser rdma_cm ib_cm iw_cm ib_sa ib_mad 
>> ib_core ib_addr ipv6 iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi 
>> ppdev xen_kbdfront xen_netfront fb_sys_fops sysimgblt sysfillrect 
>> syscopyarea parport_pc parport pcspkr i2c_piix4 i2c_core acpi_cpufreq ext4 
>> jbd2 mbcache xen_blkfront floppy pata_acpi ata_generic ata_piix dm_mirror 
>> dm_region_hash dm_log dm_mod
>> [233096.081751] CPU: 0 PID: 13626 Comm: unlink Tainted: GW   
>> 4.1.12-37.6.3.el6uek.x86_64 #2
>> [233096.088556] Hardware name: Xen HVM domU, BIOS 4.4.4OVM 02/11/2016
>> [233096.093125]  010d 8818b768 816bc5bc 
>> 010d
>> [233096.099082]   8818b7a8 81081475 
>> 8818b788
>> [233096.105038]  88007a99a000 88007b573390 00fb 
>> 0050
>> [233096.110540] Call Trace:
>> [233096.111893]  [] dump_stack+0x48/0x5c
>> [233096.114637]  [] warn_slowpath_common+0x95/0xe0
>> [233096.117797]  [] warn_slowpath_null+0x1a/0x20
>> [233096.120984]  [] start_this_handle+0x4c3/0x510 [jbd2]
>> [233096.124505]  [] ? __jbd2_log_start_commit+0xe5/0xf0 
>> [jbd2]
>> [233096.128115]  [] ? __wake_up+0x53/0x70
>> [233096.130924]  [] jbd2__journal_restart+0x161/0x1b0 
>> [jbd2]
>> [233096.134523]  [] jbd2_journal_restart+0x13/0x20 [jbd2]
>> [233096.137986]  [] ocfs2_extend_trans+0x74/0x220 [ocfs2]
>> [233096.141407]  [] ? ocfs2_journal_dirty+0x3a/0x90 [ocfs2]
>> [233096.144921]  [] 
>> ocfs2_replay_truncate_records+0x93/0x360 [ocfs2]
>> [233096.148819]  [] __ocfs2_flush_truncate_log+0x13e/0x3a0 
>> [ocfs2]
>> [233096.152644]  [] ? 
>> ocfs2_reserve_blocks_for_rec_trunc.clone.0+0x44/0x1f0 [ocfs2]
>> [233096.157310]  [] ocfs2_remove_btree_range+0x458/0x7f0 
>> [ocfs2]
>> [233096.161099]  [] ? __ocfs2_find_path+0x187/0x2d0 [ocfs2]
>> [233096.164612]  [] ocfs2_commit_truncate+0x1b3/0x6f0 
>> [ocfs2]
>> [233096.168204]  [] ? 
>> ocfs2_xattr_tree_et_ops+0x60/0xfffe8c20 [ocfs2]
>> [233096.172539]  [] ? ocfs2_journal_access_eb+0x20/0x20 
>> [ocfs2]
>> [233096.176285]  [] ? __sb_end_write+0x33/0x70
>> [233096.179226]  [] ocfs2_truncate_for_delete+0xbd/0x380 
>> [ocfs2]
>> [233096.183009]  [] ? ocfs2_query_inode_wipe+0xf4/0x320 
>> [ocfs2]
>> [233096.186738]  [] ocfs2_wipe_inode+0x136/0x6a0 [ocfs2]
>> [233096.190165]  [] ? ocfs2_query_inode_wipe+0xf4/0x320 
>> [ocfs2]
>> [233096.193846]  [] ocfs2_delete_inode+0x2a2/0x3e0 [ocfs2]
>> [233096.197274]  [] ? __inode_wait_for_writeback+0x69/0xc0
>> [233096.200736]  [] ? 
>> __PRETTY_FUNCTION__.112282+0x20/0xb520 [ocfs2]
>> [233096.205146]  [] ocfs2_evict_inode+0x28/0x60 [ocfs2]
>> [233096.208462]  [] evict+0xab/0x1a0
>> [233096.211020]  [] ? 
>> __PRETTY_FUNCTION__.112282+0x20/0xb520 [ocfs2]
>> [233096.215396]  [] iput_final+0xf6/0x190
>> [233096.218169]  [] iput+0xc8/0xe0
>> [233096.220586]  [] do_unlinkat+0x1b7/0x310
>> [233096.223487]  [] ? __do_page_fault+0x18b/0x480
>> [233096.226655]  [] ? __audit_syscall_entry+0xac/0x110
>> [233096.230009]  [] ? do_audit_syscall_entry+0x6c/0x70
>> [233096.233346]  [] ? 
>> syscall_trace_enter_phase1+0x153/0x180
>> [233096.237103]  [] SyS_unlink+0x16/0x20
>> [233096.239800]  [] system_call_fastpath+0x12/0x71
>> [233096.244346] ---[ end trace 28aa7410e69369cf ]---
>> [233096.247798] JBD2: unlink wants too many credits (251 > 128)
>>
>> Signed-off-by: Junxiao Bi 
>> ---
>>  fs/ocfs2/alloc.c |   29 ++---
>>  1 file changed, 10 insertions(+), 19 deletions(-)
>>
>> diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
>> index 7dabbc31060e..51128789a661 100644
>> --- a/fs/ocfs2/alloc.c
>> +++ b/fs/ocfs2/alloc.c
>> @@ -5922,7 +5922,6 @@ bail:
>>  }
>>  
>>  static int ocfs2_replay_truncate_records(struct ocfs2_super *osb,
>> -  

Re: [Ocfs2-devel] [PATCH 2/2] ocfs2: fix trans extend while free cached blocks

2016-09-12 Thread Joseph Qi
Thanks Junxiao.
Reviewed-by: Joseph Qi 

On 2016/9/12 18:03, Junxiao Bi wrote:
> Root cause of this issue is the same with the one fixed by last patch,
> but this time credits for allocator inode and group descriptor may not
> be consumed before trans extend.
> 
> The following error was caught.
> 
> [  685.240276] WARNING: CPU: 0 PID: 2037 at fs/jbd2/transaction.c:269 
> start_this_handle+0x4c3/0x510 [jbd2]()
> [  685.240294] Modules linked in: ocfs2 nfsd lockd grace nfs_acl auth_rpcgss 
> sunrpc autofs4 ocfs2_dlmfs ocfs2_stack_o2cb ocfs2_dlm ocfs2_nodemanager 
> ocfs2_stackglue configfs sd_mod sg ip6t_REJECT nf_reject_ipv6 
> nf_conntrack_ipv6 nf_defrag_ipv6 xt_state nf_conntrack ip6table_filter 
> ip6_tables be2iscsi iscsi_boot_sysfs bnx2i cnic uio cxgb4i cxgb4 cxgb3i 
> libcxgbi cxgb3 mdio ib_iser rdma_cm ib_cm iw_cm ib_sa ib_mad ib_core ib_addr 
> ipv6 iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi ppdev xen_kbdfront 
> fb_sys_fops sysimgblt sysfillrect syscopyarea xen_netfront parport_pc parport 
> pcspkr i2c_piix4 i2c_core acpi_cpufreq ext4 jbd2 mbcache xen_blkfront floppy 
> pata_acpi ata_generic ata_piix dm_mirror dm_region_hash dm_log dm_mod
> [  685.240296] CPU: 0 PID: 2037 Comm: rm Tainted: GW   
> 4.1.12-37.6.3.el6uek.bug24573128v2.x86_64 #2
> [  685.240296] Hardware name: Xen HVM domU, BIOS 4.4.4OVM 02/11/2016
> [  685.240298]  010d 88007ac3f808 816bc5bc 
> 010d
> [  685.240300]   88007ac3f848 81081475 
> 88007ac3f828
> [  685.240301]  880037bbf000 880037688210 0095 
> 0050
> [  685.240301] Call Trace:
> [  685.240305]  [] dump_stack+0x48/0x5c
> [  685.240308]  [] warn_slowpath_common+0x95/0xe0
> [  685.240310]  [] warn_slowpath_null+0x1a/0x20
> [  685.240313]  [] start_this_handle+0x4c3/0x510 [jbd2]
> [  685.240317]  [] ? __jbd2_log_start_commit+0xe5/0xf0 
> [jbd2]
> [  685.240319]  [] ? __wake_up+0x53/0x70
> [  685.240322]  [] jbd2__journal_restart+0x161/0x1b0 [jbd2]
> [  685.240325]  [] jbd2_journal_restart+0x13/0x20 [jbd2]
> [  685.240340]  [] ocfs2_extend_trans+0x74/0x220 [ocfs2]
> [  685.240347]  [] ocfs2_free_cached_blocks+0x16b/0x4e0 
> [ocfs2]
> [  685.240349]  [] ? internal_add_timer+0x91/0xc0
> [  685.240356]  [] ocfs2_run_deallocs+0x70/0x270 [ocfs2]
> [  685.240363]  [] ocfs2_commit_truncate+0x474/0x6f0 [ocfs2]
> [  685.240374]  [] ? 
> ocfs2_xattr_tree_et_ops+0x60/0xfffe8c00 [ocfs2]
> [  685.240384]  [] ? ocfs2_journal_access_eb+0x20/0x20 
> [ocfs2]
> [  685.240385]  [] ? __sb_end_write+0x33/0x70
> [  685.240394]  [] ocfs2_truncate_for_delete+0xbd/0x380 
> [ocfs2]
> [  685.240402]  [] ? ocfs2_query_inode_wipe+0xf4/0x320 
> [ocfs2]
> [  685.240409]  [] ocfs2_wipe_inode+0x136/0x6a0 [ocfs2]
> [  685.240415]  [] ? ocfs2_query_inode_wipe+0xf4/0x320 
> [ocfs2]
> [  685.240422]  [] ocfs2_delete_inode+0x2a2/0x3e0 [ocfs2]
> [  685.240424]  [] ? __inode_wait_for_writeback+0x69/0xc0
> [  685.240437]  [] ? 
> __PRETTY_FUNCTION__.112282+0x20/0xb500 [ocfs2]
> [  685.240444]  [] ocfs2_evict_inode+0x28/0x60 [ocfs2]
> [  685.240445]  [] evict+0xab/0x1a0
> [  685.240456]  [] ? 
> __PRETTY_FUNCTION__.112282+0x20/0xb500 [ocfs2]
> [  685.240457]  [] iput_final+0xf6/0x190
> [  685.240458]  [] iput+0xc8/0xe0
> [  685.240460]  [] do_unlinkat+0x1b7/0x310
> [  685.240462]  [] ? __audit_syscall_entry+0xac/0x110
> [  685.240464]  [] ? do_audit_syscall_entry+0x6c/0x70
> [  685.240465]  [] ? syscall_trace_enter_phase1+0x153/0x180
> [  685.240467]  [] SyS_unlinkat+0x22/0x40
> [  685.240468]  [] system_call_fastpath+0x12/0x71
> [  685.240469] ---[ end trace a62437cb060baa71 ]---
> [  685.240470] JBD2: rm wants too many credits (149 > 128)
> 
> Signed-off-by: Junxiao Bi 
> ---
>  fs/ocfs2/alloc.c |   27 +--
>  1 file changed, 9 insertions(+), 18 deletions(-)
> 
> diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
> index 51128789a661..f165f867f332 100644
> --- a/fs/ocfs2/alloc.c
> +++ b/fs/ocfs2/alloc.c
> @@ -6404,43 +6404,34 @@ static int ocfs2_free_cached_blocks(struct 
> ocfs2_super *osb,
>   goto out_mutex;
>   }
>  
> - handle = ocfs2_start_trans(osb, OCFS2_SUBALLOC_FREE);
> - if (IS_ERR(handle)) {
> - ret = PTR_ERR(handle);
> - mlog_errno(ret);
> - goto out_unlock;
> - }
> -
>   while (head) {
>   if (head->free_bg)
>   bg_blkno = head->free_bg;
>   else
>   bg_blkno = ocfs2_which_suballoc_group(head->free_blk,
> head->free_bit);
> + handle = ocfs2_start_trans(osb, OCFS2_SUBALLOC_FREE);
> + if (IS_ERR(handle)) {
> + ret = PTR_ERR(handle);
> + mlog_errno(ret);
> + goto out_unlock;
> + }
> +
>   trace_ocfs2_free_cached_blocks(
>