aboutsummaryrefslogtreecommitdiff
path: root/fs/nilfs2/segment.c
diff options
context:
space:
mode:
authorAlex Shi <alex.shi@linaro.org>2015-03-30 11:38:40 +0800
committerAlex Shi <alex.shi@linaro.org>2015-03-30 11:38:40 +0800
commit88720d8b842c59efcc0c4dc17e2107f4dae502f5 (patch)
tree967e60ace88cd9e4f9819042eedf3be6a445bb54 /fs/nilfs2/segment.c
parentba0bfedf4c9cad58f56a7038d1462ffc21cd33df (diff)
parent73895725a9401bd3454757fcfa7d691270ac7498 (diff)
Merge tag 'v3.10.73' into linux-linaro-lskHEADlinux-linaro-lsk
This is the 3.10.73 stable release
Diffstat (limited to 'fs/nilfs2/segment.c')
-rw-r--r--fs/nilfs2/segment.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
index b3c95c1a4700..99294a286e66 100644
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -1906,6 +1906,7 @@ static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci,
struct the_nilfs *nilfs)
{
struct nilfs_inode_info *ii, *n;
+ int during_mount = !(sci->sc_super->s_flags & MS_ACTIVE);
int defer_iput = false;
spin_lock(&nilfs->ns_inode_lock);
@@ -1918,10 +1919,10 @@ static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci,
brelse(ii->i_bh);
ii->i_bh = NULL;
list_del_init(&ii->i_dirty);
- if (!ii->vfs_inode.i_nlink) {
+ if (!ii->vfs_inode.i_nlink || during_mount) {
/*
- * Defer calling iput() to avoid a deadlock
- * over I_SYNC flag for inodes with i_nlink == 0
+ * Defer calling iput() to avoid deadlocks if
+ * i_nlink == 0 or mount is not yet finished.
*/
list_add_tail(&ii->i_dirty, &sci->sc_iput_queue);
defer_iput = true;