[Ocfs2-devel] unlink: why does try_open_lock fail on directory but works for a file?

Goldwyn Rodrigues rgoldwyn at gmail.com
Sat Jun 8 07:34:01 PDT 2013


Hi,

I am trying to understand why the unlinks (distributed) are slow with
ocfs2. My investigation so far has revealed that ocfs2_try_open_lock
fails on the directory unlinked but works for a file unlinked. This
creates a checkpoint everytime a directory is deleted.. slowing
transactions following it.

To explain the problem, consider the following scenario:

On node A, I create multiple directories say d1-d8, and each have 3
files under it f1, f2 and f3.
On node B, I delete all directories using rm -Rf d*

The FS first unlinks f1, f2 and f3. However, when it performs
ocfs2_evict_inode() -> ocfs2_delete_inode() ->
ocfs2_query_inode_wipe() -> ocfs2_try_open_lock() on d1, it fails.
This starts a checkpoint because OCFS2_INODE_DELETED flag is not set
on the directory inode.

Now, a checkpoint interferes with the journaling of the inodes deleted
in the following unlinks, in our case, directories d2-d8 and the files
contained in it.

So why do the files get the open_lock but the directories don't?


--
Goldwyn



More information about the Ocfs2-devel mailing list