aboutsummaryrefslogtreecommitdiffstats
path: root/fs/reiserfs
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-01-09 15:51:21 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2012-01-09 15:51:21 -0500
commitac69e0928054ff29a5049902fb477f9c7605c773 (patch)
tree05be6b9285186823452e0adeffe40e1dfee6e354 /fs/reiserfs
parent9e203936eac786f9268d6a13e6442d2accef1829 (diff)
parent302bf2f3259948c93361d501b04a5ed69c3bd4f8 (diff)
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs: ext2/3/4: delete unneeded includes of module.h ext{3,4}: Fix potential race when setversion ioctl updates inode udf: Mark LVID buffer as uptodate before marking it dirty ext3: Don't warn from writepage when readonly inode is spotted after error jbd: Remove j_barrier mutex reiserfs: Force inode evictions before umount to avoid crash reiserfs: Fix quota mount option parsing udf: Treat symlink component of type 2 as / udf: Fix deadlock when converting file from in-ICB one to normal one udf: Cleanup calling convention of inode_getblk() ext2: Fix error handling on inode bitmap corruption ext3: Fix error handling on inode bitmap corruption ext3: replace ll_rw_block with other functions ext3: NULL dereference in ext3_evict_inode() jbd: clear revoked flag on buffers before a new transaction started ext3: call ext3_mark_recovery_complete() when recovery is really needed
Diffstat (limited to 'fs/reiserfs')
-rw-r--r--fs/reiserfs/super.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
index 19c454e61b79..1d42e707d5fa 100644
--- a/fs/reiserfs/super.c
+++ b/fs/reiserfs/super.c
@@ -455,16 +455,20 @@ int remove_save_link(struct inode *inode, int truncate)
455static void reiserfs_kill_sb(struct super_block *s) 455static void reiserfs_kill_sb(struct super_block *s)
456{ 456{
457 if (REISERFS_SB(s)) { 457 if (REISERFS_SB(s)) {
458 if (REISERFS_SB(s)->xattr_root) { 458 /*
459 d_invalidate(REISERFS_SB(s)->xattr_root); 459 * Force any pending inode evictions to occur now. Any
460 dput(REISERFS_SB(s)->xattr_root); 460 * inodes to be removed that have extended attributes
461 REISERFS_SB(s)->xattr_root = NULL; 461 * associated with them need to clean them up before
462 } 462 * we can release the extended attribute root dentries.
463 if (REISERFS_SB(s)->priv_root) { 463 * shrink_dcache_for_umount will BUG if we don't release
464 d_invalidate(REISERFS_SB(s)->priv_root); 464 * those before it's called so ->put_super is too late.
465 dput(REISERFS_SB(s)->priv_root); 465 */
466 REISERFS_SB(s)->priv_root = NULL; 466 shrink_dcache_sb(s);
467 } 467
468 dput(REISERFS_SB(s)->xattr_root);
469 REISERFS_SB(s)->xattr_root = NULL;
470 dput(REISERFS_SB(s)->priv_root);
471 REISERFS_SB(s)->priv_root = NULL;
468 } 472 }
469 473
470 kill_block_super(s); 474 kill_block_super(s);
@@ -1249,7 +1253,8 @@ static void handle_quota_files(struct super_block *s, char **qf_names,
1249 kfree(REISERFS_SB(s)->s_qf_names[i]); 1253 kfree(REISERFS_SB(s)->s_qf_names[i]);
1250 REISERFS_SB(s)->s_qf_names[i] = qf_names[i]; 1254 REISERFS_SB(s)->s_qf_names[i] = qf_names[i];
1251 } 1255 }
1252 REISERFS_SB(s)->s_jquota_fmt = *qfmt; 1256 if (*qfmt)
1257 REISERFS_SB(s)->s_jquota_fmt = *qfmt;
1253} 1258}
1254#endif 1259#endif
1255 1260