fs/fat: Remove two statements without effect
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/4 fs/fat: Remove two statements without effect
fatlength is a local variable which is no more used after the assignment. s_name is not used in the function, save the strncpy.
--- fs/fat/fat_write.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
fs/fat/fat_write.c +1 -4
@@ -183,7 +183,6 @@ static __u32 get_fatent_value(fsdata *mydata, __u32 entry)if (getsize > fatlength) getsize = fatlength; - fatlength *= mydata->sect_size;/* We want it in bytes now */ startblock += mydata->fat_sect;/* Offset from start of disk */ /* Write back the fatbuf to the disk */
@@ -326,10 +325,8 @@ fill_dir_slot(fsdata *mydata, dir_entry **dentptr, const char *l_name)dir_slot *slotptr = (dir_slot *)get_contents_vfatname_block;__u8 counter =0 , checksum;int idx =0 , ret; -char s_name[16 ]; -/* Get short file name and checksum value */ -strncpy (s_name, (*dentptr)->name,16 ); +/* Get short file name checksum value */ checksum =mkcksum ((*dentptr)->name, (*dentptr)->ext); do {
Signature · 1 line
2.10.0
PATCH 1/4 fs/fat: Remove two statements without effect
Hi Stefan,
Quoted 22 lines
fatlength is a local variable which is no more used after the assignment.
s_nameis not used in the function, save the strncpy.Signed-off-by Stefan Br?ns <[email protected]>--- fs/fat/fat_write.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)fs/fat/fat_write.c +0
-1@@ -183,7 +183,6 @@ static __u32 get_fatent_value(fsdata *mydata, __u32 entry) if (getsize > fatlength) getsize = fatlength; - fatlength *= mydata->sect_size;/* We want it in bytes now */ startblock +=
mydata->fat_sect; /* Offset from
start of disk */fs/fat/fat_write.c +0
-0/* Write back the fatbuf to the disk */ @@ -326,10 +325,8 @@ fill_dir_slot(fsdata *mydata, dir_entry **dentptr, const char *l_name) dir_slot *slotptr = (dir_slot
fs/fat/fat_write.c fill_dir_slot(fsdata *mydata, dir_entry · line 332
Quoted 10 lines
fs/fat/fat_write.c +1
-3*)get_contents_vfatname_block; __u8 counter = 0, checksum;int idx =0 , ret; -char s_name[16 ]; -/* Get short file name and checksum value */ -strncpy (s_name, (*dentptr)->name,16 ); +/* Get short file name checksum value */ checksum =mkcksum ((*dentptr)->name, (*dentptr)->ext); do {
Signature · 5 lines
Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group
PATCH 1/4 fs/fat: Remove two statements without effect
In reply to Stefan BrünsQuoted 2 lines · Stefan Br?ns
fatlength is a local variable which is no more used after the assignment.
s_nameis not used in the function, save the strncpy.
The series,
PATCH 1/4 fs/fat: Remove two statements without effect
In reply to Stefan BrünsHi Stefan,
Quoted 4 lines · Stefan Br?ns
fatlength is a local variable which is no more used after the assignment.
s_nameis not used in the function, save the strncpy.Signed-off-by Stefan Br?ns <[email protected]>
[...]
For the series:
Best regards,
Beno?t
PATCH 1/4 fs/fat: Remove two statements without effect
In reply to Stefan BrünsQuoted 7 lines · Stefan Br?ns
fatlength is a local variable which is no more used after the assignment.
s_nameis not used in the function, save the strncpy.Signed-off-by Stefan Br?ns <[email protected]>Acked-by Lukasz Majewski <[email protected]>Acked-by Stephen Warren <[email protected]>Reviewed-by Beno?t Th?baudeau <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160923/cb3fcce7/attachment.sig>
PATCH 2/4 fs/fat: Do not write unmodified fat entries to disk
In reply to a message not in the archiveThe code caches 6 sectors of the FAT. On FAT traversal, the old contents needs to be flushed to disk, but only if any FAT entries had been modified. Explicitly flag the buffer on modification.
Currently, creating a new file traverses the whole FAT up to the first free cluster and rewrites the on-disk blocks.
--- fs/fat/fat.c | 1 + fs/fat/fat_write.c | 31 +++++++++++++++++++------------ include/fat.h | 1 + 3 files changed, 21 insertions(+), 12 deletions(-)
fs/fat/fat.c +1 -0
@@ -876,6 +876,7 @@ int do_fat_read_at(const char *filename, loff_t pos, void *buffer, } mydata->fatbufnum =-1 ; + mydata->fat_dirty =0 ; mydata->fatbuf =memalign (ARCH_DMA_MINALIGN ,FATBUFSIZE );if (mydata->fatbuf ==NULL ) {debug ("Error: allocating memory\n" );
fs/fat/fat_write.c +19 -12
@@ -104,13 +104,19 @@ static __u8 num_of_fats;/* * Write fat buffer into block device */ -static int flush_fat_buffer (fsdata *mydata) +static int flush_dirty_fat_buffer (fsdata *mydata) {int getsize =FATBUFBLOCKS ;__u32 fatlength = mydata->fatlength;__u8 *bufptr = mydata->fatbuf;__u32 startblock = mydata->fatbufnum *FATBUFBLOCKS ; +debug ("debug: evicting %d, dirty: %d\n" , mydata->fatbufnum, + (int )mydata->fat_dirty); + +if ((!mydata->fat_dirty) || (mydata->fatbufnum ==-1 )) +return 0 ; + startblock += mydata->fat_sect;if (getsize > fatlength)
@@ -130,6 +136,7 @@ static int flush_fat_buffer(fsdata *mydata)return -1 ; } } + mydata->fat_dirty =0 ;return 0 ; }
@@ -186,10 +193,8 @@ static __u32 get_fatent_value(fsdata *mydata, __u32 entry) startblock += mydata->fat_sect;/* Offset from start of disk */ /* Write back the fatbuf to the disk */ -if (mydata->fatbufnum !=-1 ) { -if (flush_fat_buffer (mydata) <0 ) -return -1 ; - } +if (flush_dirty_fat_buffer (mydata) <0 ) +return -1 ;if (disk_read (startblock, getsize, bufptr) <0 ) {debug ("Error reading FAT blocks\n" );
@@ -494,10 +499,8 @@ static int set_fatent_value(fsdata *mydata, __u32 entry, __u32 entry_value)if (getsize > fatlength) getsize = fatlength; -if (mydata->fatbufnum !=-1 ) { -if (flush_fat_buffer (mydata) <0 ) -return -1 ; - } +if (flush_dirty_fat_buffer (mydata) <0 ) +return -1 ;if (disk_read (startblock, getsize, bufptr) <0 ) {debug ("Error reading FAT blocks\n" );
@@ -506,6 +509,9 @@ static int set_fatent_value(fsdata *mydata, __u32 entry, __u32 entry_value) mydata->fatbufnum = bufnum; } +/* Mark as dirty */ + mydata->fat_dirty =1 ; +/* Set the actual entry */ switch (mydata->fatsize) {case 32 :
@@ -645,7 +651,7 @@ static void flush_dir_table(fsdata *mydata, dir_entry **dentptr) dir_curclust = dir_newclust; -if (flush_fat_buffer (mydata) <0 ) +if (flush_dirty_fat_buffer (mydata) <0 )return ; memset(get_dentfromdir_block, 0x00,
@@ -675,7 +681,7 @@ static int clear_fatent(fsdata *mydata, __u32 entry) }/* Flush fat buffer */ -if (flush_fat_buffer (mydata) <0 ) +if (flush_dirty_fat_buffer (mydata) <0 )return -1 ;return 0 ;
@@ -1011,6 +1017,7 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size, } mydata->fatbufnum =-1 ; + mydata->fat_dirty =0 ; mydata->fatbuf =memalign (ARCH_DMA_MINALIGN ,FATBUFSIZE );if (mydata->fatbuf ==NULL ) {debug ("Error: allocating memory\n" );
@@ -1111,7 +1118,7 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size,debug ("attempt to write 0x%llx bytes\n" , *actwrite);/* Flush fat buffer */ - ret =flush_fat_buffer (mydata); + ret =flush_dirty_fat_buffer (mydata);if (ret) {printf ("Error: flush fat buffer\n" ); goto exit;
include/fat.h +1 -0
@@ -169,6 +169,7 @@ typedef struct {int fatsize;/* Size of FAT in bits */ __u32 fatlength;/* Length of FAT in sectors */ __u16 fat_sect;/* Starting sector of the FAT */ +__u8 fat_dirty;/* Set if fatbuf has been modified */ __u32 rootdir_sect;/* Start sector of root directory */ __u16 sect_size;/* Size of sectors in bytes */ __u16 clust_size;/* Size of clusters in sectors */
Signature · 1 line
2.10.0
PATCH 2/4 fs/fat: Do not write unmodified fat entries to disk
Hi Stefan,
Quoted 140 lines
The code caches 6 sectors of the FAT. On FAT traversal, the old contents needs to be flushed to disk, but only if any FAT entries had been modified. Explicitly flag the buffer on modification.
Currently, creating a new file traverses the whole FAT up to the first free cluster and rewrites the on-disk blocks.
Signed-off-by Stefan Br?ns <[email protected]>--- fs/fat/fat.c | 1 + fs/fat/fat_write.c | 31 +++++++++++++++++++------------ include/fat.h | 1 + 3 files changed, 21 insertions(+), 12 deletions(-)fs/fat/fat.c +1
-0@@ -876,6 +876,7 @@ int do_fat_read_at(const char *filename, loff_t pos, void *buffer, } mydata->fatbufnum =-1 ; + mydata->fat_dirty =0 ; mydata->fatbuf =memalign (ARCH_DMA_MINALIGN ,FATBUFSIZE );if (mydata->fatbuf ==NULL ) {debug ("Error: allocating memory\n" );fs/fat/fat_write.c +8
-1@@ -104,13 +104,19 @@ static __u8 num_of_fats;/* * Write fat buffer into block device */ -static int flush_fat_buffer (fsdata *mydata) +static int flush_dirty_fat_buffer (fsdata *mydata) {int getsize =FATBUFBLOCKS ;__u32 fatlength = mydata->fatlength;__u8 *bufptr = mydata->fatbuf;__u32 startblock = mydata->fatbufnum *FATBUFBLOCKS ; +debug ("debug: evicting %d, dirty: %d\n" , mydata->fatbufnum, + (int )mydata->fat_dirty); + +if ((!mydata->fat_dirty) || (mydata->fatbufnum ==-1 )) +return 0 ; + startblock += mydata->fat_sect;if (getsize > fatlength)@@ -130,6 +136,7 @@ static int flush_fat_buffer(fsdata *mydata)return -1 ; } } + mydata->fat_dirty =0 ;return 0 ; }@@ -186,10 +193,8 @@ static __u32 get_fatent_value(fsdata *mydata,
__u32entry) startblock +=mydata->fat_sect; /* Offset from
start of disk */fs/fat/fat_write.c +11
-11/* Write back the fatbuf to the disk */ -if (mydata->fatbufnum !=-1 ) { -if (flush_fat_buffer (mydata) <0 ) -return -1 ; - } +if (flush_dirty_fat_buffer (mydata) <0 ) +return -1 ;if (disk_read (startblock, getsize, bufptr) <0 ) {debug ("Error reading FAT blocks\n" );@@ -494,10 +499,8 @@ static int set_fatent_value(fsdata *mydata, __u32 entry, __u32 entry_value) if (getsize > fatlength) getsize = fatlength; -if (mydata->fatbufnum !=-1 ) { -if (flush_fat_buffer (mydata) <0 ) -return -1 ; - } +if (flush_dirty_fat_buffer (mydata) <0 ) +return -1 ;if (disk_read (startblock, getsize, bufptr) <0 ) {debug ("Error reading FAT blocks\n" );@@ -506,6 +509,9 @@ static int set_fatent_value(fsdata *mydata, __u32 entry, __u32 entry_value) mydata->fatbufnum = bufnum; } +/* Mark as dirty */ + mydata->fat_dirty =1 ; +/* Set the actual entry */ switch (mydata->fatsize) {case 32 :@@ -645,7 +651,7 @@ static void flush_dir_table(fsdata *mydata, dir_entry **dentptr) dir_curclust = dir_newclust; -if (flush_fat_buffer (mydata) <0 ) +if (flush_dirty_fat_buffer (mydata) <0 )return ; memset(get_dentfromdir_block, 0x00,@@ -675,7 +681,7 @@ static int clear_fatent(fsdata *mydata, __u32 entry) }/* Flush fat buffer */ -if (flush_fat_buffer (mydata) <0 ) +if (flush_dirty_fat_buffer (mydata) <0 )return -1 ;return 0 ;@@ -1011,6 +1017,7 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size, } mydata->fatbufnum =-1 ; + mydata->fat_dirty =0 ; mydata->fatbuf =memalign (ARCH_DMA_MINALIGN ,FATBUFSIZE );if (mydata->fatbuf ==NULL ) {debug ("Error: allocating memory\n" );@@ -1111,7 +1118,7 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size, debug("attempt to write 0x%llx bytes\n", *actwrite);/* Flush fat buffer */ - ret =flush_fat_buffer (mydata); + ret =flush_dirty_fat_buffer (mydata);if (ret) {printf ("Error: flush fat buffer\n" ); goto exit;include/fat.h +1
-0@@ -169,6 +169,7 @@ typedef struct {int fatsize;/* Size of FAT in bits */ __u32 fatlength;/* Length of FAT in sectors */ __u16 fat_sect;/* Starting sector of the FAT */ +__u8 fat_dirty;/* Set if fatbuf has been
Quoted 4 lines
modified */
__u32rootdir_sect; /* Start sector of root
directory */__u16sect_size; /* Size of sectors in
bytes */__u16clust_size; /* Size of clusters in
sectors */
Signature · 5 lines
Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group
PATCH 2/4 fs/fat: Do not write unmodified fat entries to disk
In reply to Stefan BrünsQuoted 9 lines · Stefan Br?ns
The code caches 6 sectors of the FAT. On FAT traversal, the old contents needs to be flushed to disk, but only if any FAT entries had been modified. Explicitly flag the buffer on modification.
Currently, creating a new file traverses the whole FAT up to the first free cluster and rewrites the on-disk blocks.
Signed-off-by Stefan Br?ns <[email protected]>Reviewed-by Lukasz Majewski <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160923/6a83fa08/attachment.sig>
PATCH 3/4 fs/fat: Correct description of determine_fatent function
In reply to a message not in the archiveCurrent description does not match the function behaviour.
--- fs/fat/fat_write.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
fs/fat/fat_write.c +3 -1
@@ -528,7 +528,8 @@ static int set_fatent_value(fsdata *mydata, __u32 entry, __u32 entry_value) }/* -* Determine the entry value at index 'entry' in a FAT (16/32) table +* Determine the next free cluster after 'entry' in a FAT (16/32) table +* and link it to 'entry'. EOC marker is not set on returned entry. */ static __u32 determine_fatent (fsdata *mydata,__u32 entry) {
@@ -537,6 +538,7 @@ static __u32 determine_fatent(fsdata *mydata, __u32 entry)while (1 ) { next_fat =get_fatent_value (mydata, next_entry);if (next_fat ==0 ) { +/* found free entry, link to entry */ set_fatent_value (mydata, entry, next_entry);break ; }
Signature · 1 line
2.10.0
PATCH 3/4 fs/fat: Correct description of determine_fatent function
Hi Stefan,
Quoted 23 lines
Current description does not match the function behaviour.
Signed-off-by Stefan Br?ns <[email protected]>--- fs/fat/fat_write.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)fs/fat/fat_write.c +1
-1@@ -528,7 +528,8 @@ static int set_fatent_value(fsdata *mydata, __u32 entry, __u32 entry_value) }/* -* Determine the entry value at index 'entry' in a FAT (16/32) table +* Determine the next free cluster after 'entry' in a FAT (16/32) table
+ * and link it to 'entry'. EOC marker is not set on returned entry. */
static__u32determine_fatent(fsdata *mydata, __u32 entry){
fs/fat/fat_write.c static __u32 determine_fatent(fsdata *mydata, · line 544
Quoted 7 lines
fs/fat/fat_write.c +1
-0@@ -537,6 +538,7 @@ static __u32 determine_fatent(fsdata *mydata, __u32 entry) while (1) { next_fat =get_fatent_value (mydata, next_entry);if (next_fat ==0 ) { +/* found free entry, link to entry */ set_fatent_value (mydata, entry, next_entry);break ; }
Signature · 5 lines
Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group
PATCH 3/4 fs/fat: Correct description of determine_fatent function
In reply to Stefan BrünsQuoted 4 lines · Stefan Br?ns
Current description does not match the function behaviour.
Signed-off-by Stefan Br?ns <[email protected]>Acked-by Lukasz Majewski <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160923/157dde13/attachment.sig>
PATCH 4/4 cmd/fat: Do not crash on write when <bytes> is not specified
In reply to a message not in the archiveargc is checked, but is off by one. In case <bytes> is not specified, create an empty file, which is identical to the ext4write behaviour.
--- cmd/fat.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
cmd/fat.c +2 -2
@@ -126,7 +126,7 @@ static int do_fat_fswrite(cmd_tbl_t *cmdtp, int flag,return 1 ; } addr =simple_strtoul (argv[3 ],NULL ,16 ); - count =simple_strtoul (argv[5 ],NULL ,16 ); + count = (argc <=5 ) ?0 :simple_strtoul (argv[5 ],NULL ,16 ); buf =map_sysmem (addr, count); ret =file_fat_write (argv[4 ], buf,0 , count, &size);
@@ -145,7 +145,7 @@ static int do_fat_fswrite(cmd_tbl_t *cmdtp, int flag,U_BOOT_CMD ( fatwrite,6 ,0 , do_fat_fswrite,"write file into a dos filesystem" , -"<interface> <dev[:part]> <addr> <filename> <bytes>\n" +"<interface> <dev[:part]> <addr> <filename> [<bytes>]\n" " - write file 'filename' from the address 'addr' in RAM\n" " to 'dev' on 'interface'" );
Signature · 1 line
2.10.0
PATCH 4/4 cmd/fat: Do not crash on write when <bytes> is not specified
Quoted 7 lines · Stefan Br?ns
argc is checked, but is off by one. In case <bytes> is not specified, create an empty file, which is identical to the ext4write behaviour.
Signed-off-by Stefan Br?ns <[email protected]>--- cmd/fat.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
PATCH 4/4 cmd/fat: Do not crash on write when <bytes> is not specified
In reply to Stefan BrünsQuoted 5 lines · Stefan Br?ns
argc is checked, but is off by one. In case <bytes> is not specified, create an empty file, which is identical to the ext4write behaviour.
Signed-off-by Stefan Br?ns <[email protected]>Reviewed-by Simon Glass <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160923/1ac4ca59/attachment.sig>