ocfs2: Fix a missing credit when deleting from indexed directories.
The ocfs2 directory index updates two blocks when we remove an entry - the dx root and the dx leaf. OCFS2_DELETE_INODE_CREDITS was only accounting for the dx leaf. This shows up when ocfs2_delete_inode() runs out of credits in jbd2_journal_dirty_metadata() at "J_ASSERT_JH(jh, handle->h_buffer_credits > 0);". The test that caught this was running dirop_file_racer from the ocfs2-test suite with a 250-character filename PREFIX. Run on a 512B blocksize, it forces the orphan dir index to grow large enough to trigger. Signed-off-by: Joel Becker <joel.becker@oracle.com>
This commit is contained in:
parent
7e31a966ad
commit
dfa13f39b7
|
@ -437,8 +437,9 @@ static inline int ocfs2_unlink_credits(struct super_block *sb)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dinode + orphan dir dinode + inode alloc dinode + orphan dir entry +
|
/* dinode + orphan dir dinode + inode alloc dinode + orphan dir entry +
|
||||||
* inode alloc group descriptor + orphan dir index leaf */
|
* inode alloc group descriptor + orphan dir index root +
|
||||||
#define OCFS2_DELETE_INODE_CREDITS (3 * OCFS2_INODE_UPDATE_CREDITS + 3)
|
* orphan dir index leaf */
|
||||||
|
#define OCFS2_DELETE_INODE_CREDITS (3 * OCFS2_INODE_UPDATE_CREDITS + 4)
|
||||||
|
|
||||||
/* dinode update, old dir dinode update, new dir dinode update, old
|
/* dinode update, old dir dinode update, new dir dinode update, old
|
||||||
* dir dir entry, new dir dir entry, dir entry update for renaming
|
* dir dir entry, new dir dir entry, dir entry update for renaming
|
||||||
|
|
Loading…
Reference in a new issue