From: yangsheng Date: Thu, 3 Nov 2011 18:25:42 +0000 (+0800) Subject: LU-762 ldiskfs: don't drop directory nlink to 0 X-Git-Tag: 2.1.52~3 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=51f76e02e2a04070ff2125285642430f703962ac LU-762 ldiskfs: don't drop directory nlink to 0 When landing the nlink patch for ext4, for an unknown reason the logic in ext4_dec_count() was changed from the ext3 version of the patch. It now drops the nlink = 0 temporarily and then if it is a directory with nlink == 0 it increases nlink again. Instead, only drop nlink if it is larger than 2. Change-Id: Ieeff3e45daea56f502848f9c2b0fb04f0a9d2b6d Author: Andreas Dilger Signed-off-by: Yang Sheng Reviewed-on: http://review.whamcloud.com/1644 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin --- diff --git a/ldiskfs/kernel_patches/patches/ext4-nlink-2.6-rhel5.patch b/ldiskfs/kernel_patches/patches/ext4-nlink-2.6-rhel5.patch new file mode 100644 index 0000000..9fa6aae --- /dev/null +++ b/ldiskfs/kernel_patches/patches/ext4-nlink-2.6-rhel5.patch @@ -0,0 +1,14 @@ +Index: linux-stage/fs/ext4/namei.c +=================================================================== +--- linux-stage.orig/fs/ext4/namei.c ++++ linux-stage/fs/ext4/namei.c +@@ -1709,9 +1709,8 @@ static void ext4_inc_count(handle_t *han + */ + static void ext4_dec_count(handle_t *handle, struct inode *inode) + { +- drop_nlink(inode); +- if (S_ISDIR(inode->i_mode) && inode->i_nlink == 0) +- inc_nlink(inode); ++ if (!S_ISDIR(inode->i_mode) || inode->i_nlink > 2) ++ drop_nlink(inode); + } diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5-ext4.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5-ext4.series index ebcd4d8..ccd906e 100644 --- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5-ext4.series +++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5-ext4.series @@ -3,6 +3,7 @@ ext4-wantedi-2.6-rhel5.patch ext4-map_inode_page-2.6.18-rhel5.patch export-ext4-2.6-rhel5.patch ext4-remove-cond_resched-calls-rhel5.patch +ext4-nlink-2.6-rhel5.patch ext4-inode-version-rhel5.patch ext4-mmp-rhel5.patch ext4-lookup-dotdot-rhel5.patch diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel6.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel6.series index 38d2111..1b1b133 100644 --- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel6.series +++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel6.series @@ -2,6 +2,7 @@ ext4-wantedi-2.6-rhel6.patch ext4-map_inode_page-2.6.18-rhel5.patch export-ext4-2.6-rhel5.patch ext4-remove-cond_resched-calls-rhel5.patch +ext4-nlink-2.6-rhel5.patch ext4-ext_generation-sles11.patch ext4-inode-version-rhel6.patch ext4-mmp-rhel6.patch