|
@@ -831,11 +831,13 @@ static int ocfs2_inode_is_valid_to_delete(struct inode *inode)
|
|
|
goto bail;
|
|
|
}
|
|
|
|
|
|
- /* If we're coming from downconvert_thread we can't go into our own
|
|
|
- * voting [hello, deadlock city!], so unforuntately we just
|
|
|
- * have to skip deleting this guy. That's OK though because
|
|
|
- * the node who's doing the actual deleting should handle it
|
|
|
- * anyway. */
|
|
|
+ /*
|
|
|
+ * If we're coming from downconvert_thread we can't go into our own
|
|
|
+ * voting [hello, deadlock city!] so we cannot delete the inode. But
|
|
|
+ * since we dropped last inode ref when downconverting dentry lock,
|
|
|
+ * we cannot have the file open and thus the node doing unlink will
|
|
|
+ * take care of deleting the inode.
|
|
|
+ */
|
|
|
if (current == osb->dc_task)
|
|
|
goto bail;
|
|
|
|
|
@@ -981,8 +983,6 @@ static void ocfs2_delete_inode(struct inode *inode)
|
|
|
if (is_bad_inode(inode) || !OCFS2_I(inode)->ip_blkno)
|
|
|
goto bail;
|
|
|
|
|
|
- dquot_initialize(inode);
|
|
|
-
|
|
|
if (!ocfs2_inode_is_valid_to_delete(inode)) {
|
|
|
/* It's probably not necessary to truncate_inode_pages
|
|
|
* here but we do it for safety anyway (it will most
|
|
@@ -991,6 +991,8 @@ static void ocfs2_delete_inode(struct inode *inode)
|
|
|
goto bail;
|
|
|
}
|
|
|
|
|
|
+ dquot_initialize(inode);
|
|
|
+
|
|
|
/* We want to block signals in delete_inode as the lock and
|
|
|
* messaging paths may return us -ERESTARTSYS. Which would
|
|
|
* cause us to exit early, resulting in inodes being orphaned
|