@@ -1282,23 +1282,14 @@ static int ext4_write_end(struct file *file,
1282
1282
loff_t old_size = inode -> i_size ;
1283
1283
int ret = 0 , ret2 ;
1284
1284
int i_size_changed = 0 ;
1285
- int inline_data = ext4_has_inline_data (inode );
1286
1285
bool verity = ext4_verity_in_progress (inode );
1287
1286
1288
1287
trace_ext4_write_end (inode , pos , len , copied );
1289
- if (inline_data ) {
1290
- ret = ext4_write_inline_data_end (inode , pos , len ,
1291
- copied , page );
1292
- if (ret < 0 ) {
1293
- unlock_page (page );
1294
- put_page (page );
1295
- goto errout ;
1296
- }
1297
- copied = ret ;
1298
- ret = 0 ;
1299
- } else
1300
- copied = block_write_end (file , mapping , pos ,
1301
- len , copied , page , fsdata );
1288
+
1289
+ if (ext4_has_inline_data (inode ))
1290
+ return ext4_write_inline_data_end (inode , pos , len , copied , page );
1291
+
1292
+ copied = block_write_end (file , mapping , pos , len , copied , page , fsdata );
1302
1293
/*
1303
1294
* it's important to update i_size while still holding page lock:
1304
1295
* page writeout could otherwise come in and zero beyond i_size.
@@ -1319,10 +1310,9 @@ static int ext4_write_end(struct file *file,
1319
1310
* ordering of page lock and transaction start for journaling
1320
1311
* filesystems.
1321
1312
*/
1322
- if (i_size_changed || inline_data )
1313
+ if (i_size_changed )
1323
1314
ret = ext4_mark_inode_dirty (handle , inode );
1324
1315
1325
- errout :
1326
1316
if (pos + len > inode -> i_size && !verity && ext4_can_truncate (inode ))
1327
1317
/* if we have allocated more blocks and copied
1328
1318
* less. We will have blocks allocated outside
@@ -1394,7 +1384,6 @@ static int ext4_journalled_write_end(struct file *file,
1394
1384
int partial = 0 ;
1395
1385
unsigned from , to ;
1396
1386
int size_changed = 0 ;
1397
- int inline_data = ext4_has_inline_data (inode );
1398
1387
bool verity = ext4_verity_in_progress (inode );
1399
1388
1400
1389
trace_ext4_journalled_write_end (inode , pos , len , copied );
@@ -1403,17 +1392,10 @@ static int ext4_journalled_write_end(struct file *file,
1403
1392
1404
1393
BUG_ON (!ext4_handle_valid (handle ));
1405
1394
1406
- if (inline_data ) {
1407
- ret = ext4_write_inline_data_end (inode , pos , len ,
1408
- copied , page );
1409
- if (ret < 0 ) {
1410
- unlock_page (page );
1411
- put_page (page );
1412
- goto errout ;
1413
- }
1414
- copied = ret ;
1415
- ret = 0 ;
1416
- } else if (unlikely (copied < len ) && !PageUptodate (page )) {
1395
+ if (ext4_has_inline_data (inode ))
1396
+ return ext4_write_inline_data_end (inode , pos , len , copied , page );
1397
+
1398
+ if (unlikely (copied < len ) && !PageUptodate (page )) {
1417
1399
copied = 0 ;
1418
1400
ext4_journalled_zero_new_buffers (handle , page , from , to );
1419
1401
} else {
@@ -1436,13 +1418,12 @@ static int ext4_journalled_write_end(struct file *file,
1436
1418
if (old_size < pos && !verity )
1437
1419
pagecache_isize_extended (inode , old_size , pos );
1438
1420
1439
- if (size_changed || inline_data ) {
1421
+ if (size_changed ) {
1440
1422
ret2 = ext4_mark_inode_dirty (handle , inode );
1441
1423
if (!ret )
1442
1424
ret = ret2 ;
1443
1425
}
1444
1426
1445
- errout :
1446
1427
if (pos + len > inode -> i_size && !verity && ext4_can_truncate (inode ))
1447
1428
/* if we have allocated more blocks and copied
1448
1429
* less. We will have blocks allocated outside
@@ -3072,7 +3053,7 @@ static int ext4_da_write_end(struct file *file,
3072
3053
struct page * page , void * fsdata )
3073
3054
{
3074
3055
struct inode * inode = mapping -> host ;
3075
- int ret = 0 , ret2 ;
3056
+ int ret ;
3076
3057
handle_t * handle = ext4_journal_current_handle ();
3077
3058
loff_t new_i_size ;
3078
3059
unsigned long start , end ;
@@ -3083,6 +3064,12 @@ static int ext4_da_write_end(struct file *file,
3083
3064
len , copied , page , fsdata );
3084
3065
3085
3066
trace_ext4_da_write_end (inode , pos , len , copied );
3067
+
3068
+ if (write_mode != CONVERT_INLINE_DATA &&
3069
+ ext4_test_inode_state (inode , EXT4_STATE_MAY_INLINE_DATA ) &&
3070
+ ext4_has_inline_data (inode ))
3071
+ return ext4_write_inline_data_end (inode , pos , len , copied , page );
3072
+
3086
3073
start = pos & (PAGE_SIZE - 1 );
3087
3074
end = start + copied - 1 ;
3088
3075
@@ -3102,26 +3089,12 @@ static int ext4_da_write_end(struct file *file,
3102
3089
* ext4_da_write_inline_data_end().
3103
3090
*/
3104
3091
new_i_size = pos + copied ;
3105
- if (copied && new_i_size > inode -> i_size ) {
3106
- if (ext4_has_inline_data (inode ) ||
3107
- ext4_da_should_update_i_disksize (page , end ))
3108
- ext4_update_i_disksize (inode , new_i_size );
3109
- }
3110
-
3111
- if (write_mode != CONVERT_INLINE_DATA &&
3112
- ext4_test_inode_state (inode , EXT4_STATE_MAY_INLINE_DATA ) &&
3113
- ext4_has_inline_data (inode ))
3114
- ret = ext4_da_write_inline_data_end (inode , pos , len , copied ,
3115
- page );
3116
- else
3117
- ret = generic_write_end (file , mapping , pos , len , copied ,
3118
- page , fsdata );
3119
-
3120
- copied = ret ;
3121
- ret2 = ext4_journal_stop (handle );
3122
- if (unlikely (ret2 && !ret ))
3123
- ret = ret2 ;
3092
+ if (copied && new_i_size > inode -> i_size &&
3093
+ ext4_da_should_update_i_disksize (page , end ))
3094
+ ext4_update_i_disksize (inode , new_i_size );
3124
3095
3096
+ copied = generic_write_end (file , mapping , pos , len , copied , page , fsdata );
3097
+ ret = ext4_journal_stop (handle );
3125
3098
return ret ? ret : copied ;
3126
3099
}
3127
3100
0 commit comments