From d36f00b3b7c977acf1a092d188535d34d079c57a Mon Sep 17 00:00:00 2001 From: Alexander Boyko Date: Fri, 22 Apr 2016 16:00:40 +0300 Subject: [PATCH] LU-6722 ldiskfs: fix credits at ldiskfs_delete_inode extra_credits was added to take account of quota, but later journal extend still use 3 blocks. The patch changes this 3 credits to extra_credits. Signed-off-by: Alexander Boyko Seagate-bug-id: MRP-3441 Change-Id: Ib098f3181790367cbc384f25072588b08ea624e4 Reviewed-on: http://review.whamcloud.com/19732 Tested-by: Jenkins Reviewed-by: Alex Zhuravlev Tested-by: Maloo Reviewed-by: Fan Yong Reviewed-by: Oleg Drokin --- .../kernel_patches/patches/rhel6.3/ext4-large-eas.patch | 14 ++++++++++++++ .../kernel_patches/patches/rhel7.2/ext4-large-eas.patch | 14 ++++++++++++++ ldiskfs/kernel_patches/patches/rhel7/ext4-large-eas.patch | 14 ++++++++++++++ ldiskfs/kernel_patches/patches/sles12/ext4-large-eas.patch | 14 ++++++++++++++ 4 files changed, 56 insertions(+) diff --git a/ldiskfs/kernel_patches/patches/rhel6.3/ext4-large-eas.patch b/ldiskfs/kernel_patches/patches/rhel6.3/ext4-large-eas.patch index ad656bf..a321b21 100644 --- a/ldiskfs/kernel_patches/patches/rhel6.3/ext4-large-eas.patch +++ b/ldiskfs/kernel_patches/patches/rhel6.3/ext4-large-eas.patch @@ -998,6 +998,20 @@ Index: linux-stage/fs/ext4/inode.c inode->i_size = 0; err = ext4_mark_inode_dirty(handle, inode); if (err) { +@@ -266,10 +296,10 @@ void ext4_delete_inode(struct inode *ino + * enough credits left in the handle to remove the inode from + * the orphan list and set the dtime field. + */ +- if (!ext4_handle_has_enough_credits(handle, 3)) { +- err = ext4_journal_extend(handle, 3); ++ if (!ext4_handle_has_enough_credits(handle, extra_credits)) { ++ err = ext4_journal_extend(handle, extra_credits); + if (err > 0) +- err = ext4_journal_restart(handle, 3); ++ err = ext4_journal_restart(handle, extra_credits); + if (err != 0) { + ext4_warning(inode->i_sb, + "couldn't extend journal (err %d)", err); @@ -303,8 +333,12 @@ void ext4_delete_inode(struct inode *ino clear_inode(inode); else diff --git a/ldiskfs/kernel_patches/patches/rhel7.2/ext4-large-eas.patch b/ldiskfs/kernel_patches/patches/rhel7.2/ext4-large-eas.patch index cf59bc4..3b05c6e 100644 --- a/ldiskfs/kernel_patches/patches/rhel7.2/ext4-large-eas.patch +++ b/ldiskfs/kernel_patches/patches/rhel7.2/ext4-large-eas.patch @@ -114,6 +114,20 @@ Index: linux-stage/fs/ext4/inode.c inode->i_size = 0; err = ext4_mark_inode_dirty(handle, inode); if (err) { +@@ -269,10 +296,10 @@ void ext4_evict_inode(struct inode *inod + * enough credits left in the handle to remove the inode from + * the orphan list and set the dtime field. + */ +- if (!ext4_handle_has_enough_credits(handle, 3)) { +- err = ext4_journal_extend(handle, 3); ++ if (!ext4_handle_has_enough_credits(handle, extra_credits)) { ++ err = ext4_journal_extend(handle, extra_credits); + if (err > 0) +- err = ext4_journal_restart(handle, 3); ++ err = ext4_journal_restart(handle, extra_credits); + if (err != 0) { + ext4_warning(inode->i_sb, + "couldn't extend journal (err %d)", err); @@ -308,6 +335,9 @@ void ext4_evict_inode(struct inode *inod ext4_free_inode(handle, inode); ext4_journal_stop(handle); diff --git a/ldiskfs/kernel_patches/patches/rhel7/ext4-large-eas.patch b/ldiskfs/kernel_patches/patches/rhel7/ext4-large-eas.patch index a461062..20d5b1e 100644 --- a/ldiskfs/kernel_patches/patches/rhel7/ext4-large-eas.patch +++ b/ldiskfs/kernel_patches/patches/rhel7/ext4-large-eas.patch @@ -119,6 +119,20 @@ Index: linux-stage/fs/ext4/inode.c inode->i_size = 0; err = ext4_mark_inode_dirty(handle, inode); if (err) { +@@ -269,10 +296,10 @@ void ext4_evict_inode(struct inode *inod + * enough credits left in the handle to remove the inode from + * the orphan list and set the dtime field. + */ +- if (!ext4_handle_has_enough_credits(handle, 3)) { +- err = ext4_journal_extend(handle, 3); ++ if (!ext4_handle_has_enough_credits(handle, extra_credits)) { ++ err = ext4_journal_extend(handle, extra_credits); + if (err > 0) +- err = ext4_journal_restart(handle, 3); ++ err = ext4_journal_restart(handle, extra_credits); + if (err != 0) { + ext4_warning(inode->i_sb, + "couldn't extend journal (err %d)", err); @@ -306,8 +333,12 @@ void ext4_evict_inode(struct inode *inod ext4_clear_inode(inode); else diff --git a/ldiskfs/kernel_patches/patches/sles12/ext4-large-eas.patch b/ldiskfs/kernel_patches/patches/sles12/ext4-large-eas.patch index 15ded92..2820da2 100644 --- a/ldiskfs/kernel_patches/patches/sles12/ext4-large-eas.patch +++ b/ldiskfs/kernel_patches/patches/sles12/ext4-large-eas.patch @@ -114,6 +114,20 @@ Index: linux-stage/fs/ext4/inode.c inode->i_size = 0; err = ext4_mark_inode_dirty(handle, inode); if (err) { +@@ -269,10 +296,10 @@ void ext4_evict_inode(struct inode *inod + * enough credits left in the handle to remove the inode from + * the orphan list and set the dtime field. + */ +- if (!ext4_handle_has_enough_credits(handle, 3)) { +- err = ext4_journal_extend(handle, 3); ++ if (!ext4_handle_has_enough_credits(handle, extra_credits)) { ++ err = ext4_journal_extend(handle, extra_credits); + if (err > 0) +- err = ext4_journal_restart(handle, 3); ++ err = ext4_journal_restart(handle, extra_credits); + if (err != 0) { + ext4_warning(inode->i_sb, + "couldn't extend journal (err %d)", err); @@ -307,6 +334,9 @@ void ext4_evict_inode(struct inode *inod ext4_free_inode(handle, inode); ext4_journal_stop(handle); -- 1.8.3.1