diff options
author | Li Dongyang <lidongyang@novell.com> | 2010-04-22 16:11:29 +0800 |
---|---|---|
committer | Mark Fasheh <mfasheh@suse.com> | 2010-04-23 11:05:00 -0700 |
commit | 062d340384dcf77dfd8de0a082b5da571de3925a (patch) | |
tree | 875a86d75ff363fbebdb09cff12933bb23525077 /fs | |
parent | ab41fdc8fdd9f0942430941c1e2b516fd481371d (diff) | |
download | op-kernel-dev-062d340384dcf77dfd8de0a082b5da571de3925a.zip op-kernel-dev-062d340384dcf77dfd8de0a082b5da571de3925a.tar.gz |
ocfs2: use OCFS2_INODE_SKIP_ORPHAN_DIR in ocfs2_mknod error path
Mark the inode with flag OCFS2_INODE_SKIP_ORPHAN_DIR in ocfs2_mknod, so we
can kill the inode in case of error.
[ Fixed up comment style -Mark ]
Signed-off-by: Li Dongyang <lidongyang@novell.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ocfs2/namei.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c index b66e488..8ff035e 100644 --- a/fs/ocfs2/namei.c +++ b/fs/ocfs2/namei.c @@ -445,11 +445,6 @@ leave: ocfs2_free_dir_lookup_result(&lookup); - if ((status < 0) && inode) { - clear_nlink(inode); - iput(inode); - } - if (inode_ac) ocfs2_free_alloc_context(inode_ac); @@ -459,6 +454,17 @@ leave: if (meta_ac) ocfs2_free_alloc_context(meta_ac); + /* + * We should call iput after the i_mutex of the bitmap been + * unlocked in ocfs2_free_alloc_context, or the + * ocfs2_delete_inode will mutex_lock again. + */ + if ((status < 0) && inode) { + OCFS2_I(inode)->ip_flags |= OCFS2_INODE_SKIP_ORPHAN_DIR; + clear_nlink(inode); + iput(inode); + } + mlog_exit(status); return status; |