X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fext3%2Fxattr.c;h=b6c382c83d3dca217b705a25915339f6bb7deaf7;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=5cbac5df4dfd44a0f3ec3ce1b9a6d7c9a62408ee;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/fs/ext3/xattr.c b/fs/ext3/xattr.c index 5cbac5df4..b6c382c83 100644 --- a/fs/ext3/xattr.c +++ b/fs/ext3/xattr.c @@ -791,8 +791,8 @@ ext3_xattr_set_handle2(handle_t *handle, struct inode *inode, EXT3_SB(sb)->s_es->s_first_data_block) + EXT3_I(inode)->i_block_group * EXT3_BLOCKS_PER_GROUP(sb); - int block = ext3_new_block(handle, - inode, goal, 0, 0, &error); + int block = ext3_new_block(handle, inode, goal, + NULL, NULL, &error); if (error) goto cleanup; ea_idebug(inode, "creating block %d", block); @@ -881,8 +881,9 @@ ext3_xattr_set(struct inode *inode, int name_index, const char *name, const void *value, size_t value_len, int flags) { handle_t *handle; - int error; + int error, retries = 0; +retry: handle = ext3_journal_start(inode, EXT3_DATA_TRANS_BLOCKS); if (IS_ERR(handle)) { error = PTR_ERR(handle); @@ -892,6 +893,9 @@ ext3_xattr_set(struct inode *inode, int name_index, const char *name, error = ext3_xattr_set_handle(handle, inode, name_index, name, value, value_len, flags); error2 = ext3_journal_stop(handle); + if (error == -ENOSPC && + ext3_should_retry_alloc(inode->i_sb, &retries)) + goto retry; if (error == 0) error = error2; }