[XFS] Remove a race condition where a linked inode could BUG_ON in
d_instantiate, due to fast transaction committal removing the last remaining reference before we were all done. SGI-PV: 953287 SGI-Modid: xfs-linux-melb:xfs-kern:26347a Signed-off-by: Nathan Scott <nathans@sgi.com>
This commit is contained in:
parent
05a3332885
commit
97dfd70c89
|
@ -422,10 +422,12 @@ xfs_vn_link(
|
||||||
tdvp = vn_from_inode(dir);
|
tdvp = vn_from_inode(dir);
|
||||||
vp = vn_from_inode(ip);
|
vp = vn_from_inode(ip);
|
||||||
|
|
||||||
|
VN_HOLD(vp);
|
||||||
error = bhv_vop_link(tdvp, vp, dentry, NULL);
|
error = bhv_vop_link(tdvp, vp, dentry, NULL);
|
||||||
if (likely(!error)) {
|
if (unlikely(error)) {
|
||||||
|
VN_RELE(vp);
|
||||||
|
} else {
|
||||||
VMODIFY(tdvp);
|
VMODIFY(tdvp);
|
||||||
VN_HOLD(vp);
|
|
||||||
xfs_validate_fields(ip, &vattr);
|
xfs_validate_fields(ip, &vattr);
|
||||||
d_instantiate(dentry, ip);
|
d_instantiate(dentry, ip);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue