diff options
Diffstat (limited to 'fs/reiserfs/super.c')
-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 | ||