Skip to content

Commit d5bf141

Browse files
biger410torvalds
authored andcommitted
ocfs2: fix trans extend while free cached blocks
The root cause of this issue is the same with the one fixed by the last patch, but this time credits for allocator inode and group descriptor may not be consumed before trans extend. The following error was caught: WARNING: CPU: 0 PID: 2037 at fs/jbd2/transaction.c:269 start_this_handle+0x4c3/0x510 [jbd2]() 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 CPU: 0 PID: 2037 Comm: rm Tainted: G W 4.1.12-37.6.3.el6uek.bug24573128v2.x86_64 #2 Hardware name: Xen HVM domU, BIOS 4.4.4OVM 02/11/2016 Call Trace: dump_stack+0x48/0x5c warn_slowpath_common+0x95/0xe0 warn_slowpath_null+0x1a/0x20 start_this_handle+0x4c3/0x510 [jbd2] jbd2__journal_restart+0x161/0x1b0 [jbd2] jbd2_journal_restart+0x13/0x20 [jbd2] ocfs2_extend_trans+0x74/0x220 [ocfs2] ocfs2_free_cached_blocks+0x16b/0x4e0 [ocfs2] ocfs2_run_deallocs+0x70/0x270 [ocfs2] ocfs2_commit_truncate+0x474/0x6f0 [ocfs2] ocfs2_truncate_for_delete+0xbd/0x380 [ocfs2] ocfs2_wipe_inode+0x136/0x6a0 [ocfs2] ocfs2_delete_inode+0x2a2/0x3e0 [ocfs2] ocfs2_evict_inode+0x28/0x60 [ocfs2] evict+0xab/0x1a0 iput_final+0xf6/0x190 iput+0xc8/0xe0 do_unlinkat+0x1b7/0x310 SyS_unlinkat+0x22/0x40 system_call_fastpath+0x12/0x71 ---[ end trace a62437cb060baa71 ]--- JBD2: rm wants too many credits (149 > 128) Link: http://lkml.kernel.org/r/1473674623-11810-2-git-send-email-junxiao.bi@oracle.com Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com> Reviewed-by: Joseph Qi <joseph.qi@huawei.com> Cc: Mark Fasheh <mfasheh@suse.de> Cc: Joel Becker <jlbec@evilplan.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 2b0ad00 commit d5bf141

1 file changed

Lines changed: 9 additions & 18 deletions

File tree

fs/ocfs2/alloc.c

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6404,43 +6404,34 @@ static int ocfs2_free_cached_blocks(struct ocfs2_super *osb,
64046404
goto out_mutex;
64056405
}
64066406

6407-
handle = ocfs2_start_trans(osb, OCFS2_SUBALLOC_FREE);
6408-
if (IS_ERR(handle)) {
6409-
ret = PTR_ERR(handle);
6410-
mlog_errno(ret);
6411-
goto out_unlock;
6412-
}
6413-
64146407
while (head) {
64156408
if (head->free_bg)
64166409
bg_blkno = head->free_bg;
64176410
else
64186411
bg_blkno = ocfs2_which_suballoc_group(head->free_blk,
64196412
head->free_bit);
6413+
handle = ocfs2_start_trans(osb, OCFS2_SUBALLOC_FREE);
6414+
if (IS_ERR(handle)) {
6415+
ret = PTR_ERR(handle);
6416+
mlog_errno(ret);
6417+
goto out_unlock;
6418+
}
6419+
64206420
trace_ocfs2_free_cached_blocks(
64216421
(unsigned long long)head->free_blk, head->free_bit);
64226422

64236423
ret = ocfs2_free_suballoc_bits(handle, inode, di_bh,
64246424
head->free_bit, bg_blkno, 1);
6425-
if (ret) {
6425+
if (ret)
64266426
mlog_errno(ret);
6427-
goto out_journal;
6428-
}
64296427

6430-
ret = ocfs2_extend_trans(handle, OCFS2_SUBALLOC_FREE);
6431-
if (ret) {
6432-
mlog_errno(ret);
6433-
goto out_journal;
6434-
}
6428+
ocfs2_commit_trans(osb, handle);
64356429

64366430
tmp = head;
64376431
head = head->free_next;
64386432
kfree(tmp);
64396433
}
64406434

6441-
out_journal:
6442-
ocfs2_commit_trans(osb, handle);
6443-
64446435
out_unlock:
64456436
ocfs2_inode_unlock(inode, 1);
64466437
brelse(di_bh);

0 commit comments

Comments
 (0)