diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-09 15:51:21 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-09 15:51:21 -0500 |
commit | ac69e0928054ff29a5049902fb477f9c7605c773 (patch) | |
tree | 05be6b9285186823452e0adeffe40e1dfee6e354 /fs/reiserfs | |
parent | 9e203936eac786f9268d6a13e6442d2accef1829 (diff) | |
parent | 302bf2f3259948c93361d501b04a5ed69c3bd4f8 (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.c | 27 |
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) | |||
455 | static void reiserfs_kill_sb(struct super_block *s) | 455 | static 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 | ||