forked from Minki/linux
ext4: retry allocation when inline->extent conversion failed
Similarly as other ->write_begin functions in ext4, also ext4_da_write_inline_data_begin() should retry allocation if the conversion failed because of ENOSPC. This avoids returning ENOSPC prematurely because of uncommitted block deletions. Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
parent
9cb00419fa
commit
bc0ca9df3b
@ -849,11 +849,13 @@ int ext4_da_write_inline_data_begin(struct address_space *mapping,
|
||||
handle_t *handle;
|
||||
struct page *page;
|
||||
struct ext4_iloc iloc;
|
||||
int retries;
|
||||
|
||||
ret = ext4_get_inode_loc(inode, &iloc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
retry_journal:
|
||||
handle = ext4_journal_start(inode, EXT4_HT_INODE, 1);
|
||||
if (IS_ERR(handle)) {
|
||||
ret = PTR_ERR(handle);
|
||||
@ -875,6 +877,11 @@ int ext4_da_write_inline_data_begin(struct address_space *mapping,
|
||||
inode,
|
||||
flags,
|
||||
fsdata);
|
||||
ext4_journal_stop(handle);
|
||||
handle = NULL;
|
||||
if (ret == -ENOSPC &&
|
||||
ext4_should_retry_alloc(inode->i_sb, &retries))
|
||||
goto retry_journal;
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user