diff options
Diffstat (limited to 'fs/gfs2/ops_super.c')
| -rw-r--r-- | fs/gfs2/ops_super.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/fs/gfs2/ops_super.c b/fs/gfs2/ops_super.c index 603d940f1159..950f31460e8b 100644 --- a/fs/gfs2/ops_super.c +++ b/fs/gfs2/ops_super.c | |||
| @@ -92,7 +92,6 @@ static void gfs2_put_super(struct super_block *sb) | |||
| 92 | kthread_stop(sdp->sd_recoverd_process); | 92 | kthread_stop(sdp->sd_recoverd_process); |
| 93 | while (sdp->sd_glockd_num--) | 93 | while (sdp->sd_glockd_num--) |
| 94 | kthread_stop(sdp->sd_glockd_process[sdp->sd_glockd_num]); | 94 | kthread_stop(sdp->sd_glockd_process[sdp->sd_glockd_num]); |
| 95 | kthread_stop(sdp->sd_scand_process); | ||
| 96 | 95 | ||
| 97 | if (!(sb->s_flags & MS_RDONLY)) { | 96 | if (!(sb->s_flags & MS_RDONLY)) { |
| 98 | error = gfs2_make_fs_ro(sdp); | 97 | error = gfs2_make_fs_ro(sdp); |
| @@ -456,12 +455,15 @@ static void gfs2_delete_inode(struct inode *inode) | |||
| 456 | } | 455 | } |
| 457 | 456 | ||
| 458 | error = gfs2_dinode_dealloc(ip); | 457 | error = gfs2_dinode_dealloc(ip); |
| 459 | /* | 458 | if (error) |
| 460 | * Must do this before unlock to avoid trying to write back | 459 | goto out_unlock; |
| 461 | * potentially dirty data now that inode no longer exists | 460 | |
| 462 | * on disk. | 461 | error = gfs2_trans_begin(sdp, 0, sdp->sd_jdesc->jd_blocks); |
| 463 | */ | 462 | if (error) |
| 463 | goto out_unlock; | ||
| 464 | /* Needs to be done before glock release & also in a transaction */ | ||
| 464 | truncate_inode_pages(&inode->i_data, 0); | 465 | truncate_inode_pages(&inode->i_data, 0); |
| 466 | gfs2_trans_end(sdp); | ||
| 465 | 467 | ||
| 466 | out_unlock: | 468 | out_unlock: |
| 467 | gfs2_glock_dq(&ip->i_iopen_gh); | 469 | gfs2_glock_dq(&ip->i_iopen_gh); |
