diff options
author | S. Wendy Cheng <wcheng@redhat.com> | 2007-01-18 15:56:34 -0500 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2007-02-05 13:36:15 -0500 |
commit | 5509826f1e548d14bb888c1cb6e3bbf23f855770 (patch) | |
tree | 20915fb965f5895f3a41361bdb6182ae10db242c /fs/gfs2/inode.h | |
parent | e1d5b18ae92d0bbfe66dc2b4bab65006d32c5f7d (diff) |
[GFS2] Fix change nlink deadlock
Bugzilla 215088
Fix deadlock in gfs2_change_nlink() while installing RHEL5 into GFS2
partition. The gfs2_rename() apparently needs block allocation for the
new name (into the directory) where it requires rg locks. At the same
time, while updating the nlink count for the replaced file,
gfs2_change_nlink() tries to return the inode meta-data back to resource
group where it needs rg locks too. Our logic doesn't allow process to
acquire these locks recursively by the same process (RHEL installer)
that results a BUG call. This only happens within rename code path and
only if the destination file exists before the rename operation.
Signed-off-by: S. Wendy Cheng <wcheng@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/inode.h')
-rw-r--r-- | fs/gfs2/inode.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/gfs2/inode.h b/fs/gfs2/inode.h index b57f448b15bc..85c67cb568d1 100644 --- a/fs/gfs2/inode.h +++ b/fs/gfs2/inode.h | |||
@@ -40,6 +40,7 @@ int gfs2_inode_refresh(struct gfs2_inode *ip); | |||
40 | 40 | ||
41 | int gfs2_dinode_dealloc(struct gfs2_inode *inode); | 41 | int gfs2_dinode_dealloc(struct gfs2_inode *inode); |
42 | int gfs2_change_nlink(struct gfs2_inode *ip, int diff); | 42 | int gfs2_change_nlink(struct gfs2_inode *ip, int diff); |
43 | int gfs2_change_nlink_i(struct gfs2_inode *ip, int diff); | ||
43 | struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name, | 44 | struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name, |
44 | int is_root, struct nameidata *nd); | 45 | int is_root, struct nameidata *nd); |
45 | struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name, | 46 | struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name, |