@@ -35,13 +35,18 @@ static int exfat_cont_expand(struct inode *inode, loff_t size)
35
35
if (new_num_clusters == num_clusters )
36
36
goto out ;
37
37
38
- exfat_chain_set (& clu , ei -> start_clu , num_clusters , ei -> flags );
39
- ret = exfat_find_last_cluster (sb , & clu , & last_clu );
40
- if (ret )
41
- return ret ;
38
+ if (num_clusters ) {
39
+ exfat_chain_set (& clu , ei -> start_clu , num_clusters , ei -> flags );
40
+ ret = exfat_find_last_cluster (sb , & clu , & last_clu );
41
+ if (ret )
42
+ return ret ;
43
+
44
+ clu .dir = last_clu + 1 ;
45
+ } else {
46
+ last_clu = EXFAT_EOF_CLUSTER ;
47
+ clu .dir = EXFAT_EOF_CLUSTER ;
48
+ }
42
49
43
- clu .dir = (last_clu == EXFAT_EOF_CLUSTER ) ?
44
- EXFAT_EOF_CLUSTER : last_clu + 1 ;
45
50
clu .size = 0 ;
46
51
clu .flags = ei -> flags ;
47
52
@@ -51,17 +56,19 @@ static int exfat_cont_expand(struct inode *inode, loff_t size)
51
56
return ret ;
52
57
53
58
/* Append new clusters to chain */
54
- if (clu . flags != ei -> flags ) {
55
- exfat_chain_cont_cluster ( sb , ei -> start_clu , num_clusters );
56
- ei -> flags = ALLOC_FAT_CHAIN ;
57
- }
58
- if ( clu . flags == ALLOC_FAT_CHAIN )
59
- if (exfat_ent_set ( sb , last_clu , clu .dir ) )
60
- goto free_clu ;
61
-
62
- if ( num_clusters == 0 )
59
+ if (num_clusters ) {
60
+ if ( clu . flags != ei -> flags )
61
+ if ( exfat_chain_cont_cluster ( sb , ei -> start_clu , num_clusters ))
62
+ goto free_clu ;
63
+
64
+ if (clu .flags == ALLOC_FAT_CHAIN )
65
+ if ( exfat_ent_set ( sb , last_clu , clu . dir ))
66
+ goto free_clu ;
67
+ } else
63
68
ei -> start_clu = clu .dir ;
64
69
70
+ ei -> flags = clu .flags ;
71
+
65
72
out :
66
73
inode_set_mtime_to_ts (inode , inode_set_ctime_current (inode ));
67
74
/* Expanded range not zeroed, do not update valid_size */
0 commit comments