ext4: fix the number of credits needed for ext4_unlink() and ext4_rmdir()
The ext4_unlink() and ext4_rmdir() don't actually release the blocks associated with the file/directory. This gets done in a separate jbd2 handle called via ext4_evict_inode(). Thus, we don't need to reserve lots of journal credits for the truncate. Note that using too many journal credits is non-optimal because it can leading to the journal transmit getting closed too early, before it is strictly necessary. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Reviewed-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
4b217630d0
commit
64044abf05
|
@ -59,12 +59,6 @@
|
||||||
#define EXT4_META_TRANS_BLOCKS(sb) (EXT4_XATTR_TRANS_BLOCKS + \
|
#define EXT4_META_TRANS_BLOCKS(sb) (EXT4_XATTR_TRANS_BLOCKS + \
|
||||||
EXT4_MAXQUOTAS_TRANS_BLOCKS(sb))
|
EXT4_MAXQUOTAS_TRANS_BLOCKS(sb))
|
||||||
|
|
||||||
/* Delete operations potentially hit one directory's namespace plus an
|
|
||||||
* entire inode, plus arbitrary amounts of bitmap/indirection data. Be
|
|
||||||
* generous. We can grow the delete transaction later if necessary. */
|
|
||||||
|
|
||||||
#define EXT4_DELETE_TRANS_BLOCKS(sb) (2 * EXT4_DATA_TRANS_BLOCKS(sb) + 64)
|
|
||||||
|
|
||||||
/* Define an arbitrary limit for the amount of data we will anticipate
|
/* Define an arbitrary limit for the amount of data we will anticipate
|
||||||
* writing to any given transaction. For unbounded transactions such as
|
* writing to any given transaction. For unbounded transactions such as
|
||||||
* write(2) and truncate(2) we can write more than this, but we always
|
* write(2) and truncate(2) we can write more than this, but we always
|
||||||
|
|
|
@ -2748,7 +2748,7 @@ static int ext4_rmdir(struct inode *dir, struct dentry *dentry)
|
||||||
goto end_rmdir;
|
goto end_rmdir;
|
||||||
|
|
||||||
handle = ext4_journal_start(dir, EXT4_HT_DIR,
|
handle = ext4_journal_start(dir, EXT4_HT_DIR,
|
||||||
EXT4_DELETE_TRANS_BLOCKS(dir->i_sb));
|
EXT4_DATA_TRANS_BLOCKS(dir->i_sb));
|
||||||
if (IS_ERR(handle)) {
|
if (IS_ERR(handle)) {
|
||||||
retval = PTR_ERR(handle);
|
retval = PTR_ERR(handle);
|
||||||
handle = NULL;
|
handle = NULL;
|
||||||
|
@ -2811,7 +2811,7 @@ static int ext4_unlink(struct inode *dir, struct dentry *dentry)
|
||||||
goto end_unlink;
|
goto end_unlink;
|
||||||
|
|
||||||
handle = ext4_journal_start(dir, EXT4_HT_DIR,
|
handle = ext4_journal_start(dir, EXT4_HT_DIR,
|
||||||
EXT4_DELETE_TRANS_BLOCKS(dir->i_sb));
|
EXT4_DATA_TRANS_BLOCKS(dir->i_sb));
|
||||||
if (IS_ERR(handle)) {
|
if (IS_ERR(handle)) {
|
||||||
retval = PTR_ERR(handle);
|
retval = PTR_ERR(handle);
|
||||||
handle = NULL;
|
handle = NULL;
|
||||||
|
|
Loading…
Reference in New Issue