@@ -539,15 +539,12 @@ static int exfat_add_entry(struct inode *inode, const char *path,
539
539
goto out ;
540
540
541
541
exfat_init_dir_entry (& es , type , start_clu , clu_size , & ts );
542
+ exfat_init_ext_entry (& es , num_entries , & uniname );
542
543
543
544
ret = exfat_put_dentry_set (& es , IS_DIRSYNC (inode ));
544
545
if (ret )
545
546
goto out ;
546
547
547
- ret = exfat_init_ext_entry (inode , p_dir , dentry , num_entries , & uniname );
548
- if (ret )
549
- goto out ;
550
-
551
548
info -> dir = * p_dir ;
552
549
info -> entry = dentry ;
553
550
info -> flags = ALLOC_NO_FAT_CHAIN ;
@@ -1018,8 +1015,7 @@ static int exfat_rename_file(struct inode *inode, struct exfat_chain *p_dir,
1018
1015
int ret , num_new_entries ;
1019
1016
struct exfat_dentry * epold , * epnew ;
1020
1017
struct super_block * sb = inode -> i_sb ;
1021
- struct buffer_head * new_bh ;
1022
- struct exfat_entry_set_cache old_es ;
1018
+ struct exfat_entry_set_cache old_es , new_es ;
1023
1019
int sync = IS_DIRSYNC (inode );
1024
1020
1025
1021
num_new_entries = exfat_calc_num_entries (p_uniname );
@@ -1044,33 +1040,25 @@ static int exfat_rename_file(struct inode *inode, struct exfat_chain *p_dir,
1044
1040
goto put_old_es ;
1045
1041
}
1046
1042
1047
- epnew = exfat_get_dentry ( sb , p_dir , newentry , & new_bh );
1048
- if (! epnew ) {
1049
- ret = - EIO ;
1043
+ ret = exfat_get_empty_dentry_set ( & new_es , sb , p_dir , newentry ,
1044
+ num_new_entries );
1045
+ if ( ret )
1050
1046
goto put_old_es ;
1051
- }
1052
1047
1048
+ epnew = exfat_get_dentry_cached (& new_es , ES_IDX_FILE );
1053
1049
* epnew = * epold ;
1054
1050
if (exfat_get_entry_type (epnew ) == TYPE_FILE ) {
1055
1051
epnew -> dentry .file .attr |= cpu_to_le16 (EXFAT_ATTR_ARCHIVE );
1056
1052
ei -> attr |= EXFAT_ATTR_ARCHIVE ;
1057
1053
}
1058
- exfat_update_bh (new_bh , sync );
1059
- brelse (new_bh );
1060
1054
1061
1055
epold = exfat_get_dentry_cached (& old_es , ES_IDX_STREAM );
1062
- epnew = exfat_get_dentry (sb , p_dir , newentry + 1 , & new_bh );
1063
- if (!epnew ) {
1064
- ret = - EIO ;
1065
- goto put_old_es ;
1066
- }
1067
-
1056
+ epnew = exfat_get_dentry_cached (& new_es , ES_IDX_STREAM );
1068
1057
* epnew = * epold ;
1069
- exfat_update_bh (new_bh , sync );
1070
- brelse (new_bh );
1071
1058
1072
- ret = exfat_init_ext_entry (inode , p_dir , newentry ,
1073
- num_new_entries , p_uniname );
1059
+ exfat_init_ext_entry (& new_es , num_new_entries , p_uniname );
1060
+
1061
+ ret = exfat_put_dentry_set (& new_es , sync );
1074
1062
if (ret )
1075
1063
goto put_old_es ;
1076
1064
@@ -1084,11 +1072,7 @@ static int exfat_rename_file(struct inode *inode, struct exfat_chain *p_dir,
1084
1072
}
1085
1073
1086
1074
exfat_remove_entries (inode , & old_es , ES_IDX_FIRST_FILENAME + 1 );
1087
-
1088
- ret = exfat_init_ext_entry (inode , p_dir , oldentry ,
1089
- num_new_entries , p_uniname );
1090
- if (ret )
1091
- goto put_old_es ;
1075
+ exfat_init_ext_entry (& old_es , num_new_entries , p_uniname );
1092
1076
}
1093
1077
return exfat_put_dentry_set (& old_es , sync );
1094
1078
@@ -1104,8 +1088,7 @@ static int exfat_move_file(struct inode *inode, struct exfat_chain *p_olddir,
1104
1088
int ret , newentry , num_new_entries ;
1105
1089
struct exfat_dentry * epmov , * epnew ;
1106
1090
struct super_block * sb = inode -> i_sb ;
1107
- struct buffer_head * new_bh ;
1108
- struct exfat_entry_set_cache mov_es ;
1091
+ struct exfat_entry_set_cache mov_es , new_es ;
1109
1092
1110
1093
num_new_entries = exfat_calc_num_entries (p_uniname );
1111
1094
if (num_new_entries < 0 )
@@ -1120,43 +1103,35 @@ static int exfat_move_file(struct inode *inode, struct exfat_chain *p_olddir,
1120
1103
if (ret )
1121
1104
return - EIO ;
1122
1105
1123
- epmov = exfat_get_dentry_cached (& mov_es , ES_IDX_FILE );
1124
- epnew = exfat_get_dentry (sb , p_newdir , newentry , & new_bh );
1125
- if (!epnew ) {
1126
- ret = - EIO ;
1106
+ ret = exfat_get_empty_dentry_set (& new_es , sb , p_newdir , newentry ,
1107
+ num_new_entries );
1108
+ if (ret )
1127
1109
goto put_mov_es ;
1128
- }
1129
1110
1111
+ epmov = exfat_get_dentry_cached (& mov_es , ES_IDX_FILE );
1112
+ epnew = exfat_get_dentry_cached (& new_es , ES_IDX_FILE );
1130
1113
* epnew = * epmov ;
1131
1114
if (exfat_get_entry_type (epnew ) == TYPE_FILE ) {
1132
1115
epnew -> dentry .file .attr |= cpu_to_le16 (EXFAT_ATTR_ARCHIVE );
1133
1116
ei -> attr |= EXFAT_ATTR_ARCHIVE ;
1134
1117
}
1135
- exfat_update_bh (new_bh , IS_DIRSYNC (inode ));
1136
- brelse (new_bh );
1137
1118
1138
1119
epmov = exfat_get_dentry_cached (& mov_es , ES_IDX_STREAM );
1139
- epnew = exfat_get_dentry (sb , p_newdir , newentry + 1 , & new_bh );
1140
- if (!epnew ) {
1141
- ret = - EIO ;
1142
- goto put_mov_es ;
1143
- }
1144
-
1120
+ epnew = exfat_get_dentry_cached (& new_es , ES_IDX_STREAM );
1145
1121
* epnew = * epmov ;
1146
- exfat_update_bh (new_bh , IS_DIRSYNC (inode ));
1147
- brelse (new_bh );
1148
-
1149
- ret = exfat_init_ext_entry (inode , p_newdir , newentry , num_new_entries ,
1150
- p_uniname );
1151
- if (ret )
1152
- return ret ;
1153
1122
1123
+ exfat_init_ext_entry (& new_es , num_new_entries , p_uniname );
1154
1124
exfat_remove_entries (inode , & mov_es , ES_IDX_FILE );
1155
1125
1156
1126
exfat_chain_set (& ei -> dir , p_newdir -> dir , p_newdir -> size ,
1157
1127
p_newdir -> flags );
1158
1128
1159
1129
ei -> entry = newentry ;
1130
+
1131
+ ret = exfat_put_dentry_set (& new_es , IS_DIRSYNC (inode ));
1132
+ if (ret )
1133
+ goto put_mov_es ;
1134
+
1160
1135
return exfat_put_dentry_set (& mov_es , IS_DIRSYNC (inode ));
1161
1136
1162
1137
put_mov_es :
0 commit comments