* [mmotm:master 174/212] fs///fat/inode.c:163:9: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'sector_t {aka long long unsigned int}'
@ 2018-06-08 1:38 kbuild test robot
2018-06-08 3:54 ` OGAWA Hirofumi
0 siblings, 1 reply; 2+ messages in thread
From: kbuild test robot @ 2018-06-08 1:38 UTC (permalink / raw)
To: OGAWA Hirofumi
Cc: kbuild-all, Johannes Weiner, Andrew Morton, Linux Memory Management List
[-- Attachment #1: Type: text/plain, Size: 5702 bytes --]
tree: git://git.cmpxchg.org/linux-mmotm.git master
head: 7393732bae530daa27567988b91d16ecfeef6c62
commit: fe3e5c4f07cde4be67152518d21429bfbb875c0c [174/212] fat: use fat_fs_error() instead of BUG_ON() in __fat_get_block()
config: i386-randconfig-s0-201822-CONFIG_DEBUG_INFO_REDUCED (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
reproduce:
git checkout fe3e5c4f07cde4be67152518d21429bfbb875c0c
# save the attached .config to linux build tree
make ARCH=i386
All warnings (new ones prefixed by >>):
In file included from fs///fat/inode.c:24:0:
fs///fat/inode.c: In function '__fat_get_block':
>> fs///fat/inode.c:163:9: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'sector_t {aka long long unsigned int}' [-Wformat=]
"invalid FAT chain (i_pos %lld, last_block %ld)",
^
fs///fat/fat.h:397:24: note: in definition of macro 'fat_fs_error'
__fat_fs_error(sb, 1, fmt , ## args)
^~~
vim +163 fs///fat/inode.c
> 24 #include "fat.h"
25
26 #ifndef CONFIG_FAT_DEFAULT_IOCHARSET
27 /* if user don't select VFAT, this is undefined. */
28 #define CONFIG_FAT_DEFAULT_IOCHARSET ""
29 #endif
30
31 #define KB_IN_SECTORS 2
32
33 /*
34 * A deserialized copy of the on-disk structure laid out in struct
35 * fat_boot_sector.
36 */
37 struct fat_bios_param_block {
38 u16 fat_sector_size;
39 u8 fat_sec_per_clus;
40 u16 fat_reserved;
41 u8 fat_fats;
42 u16 fat_dir_entries;
43 u16 fat_sectors;
44 u16 fat_fat_length;
45 u32 fat_total_sect;
46
47 u8 fat16_state;
48 u32 fat16_vol_id;
49
50 u32 fat32_length;
51 u32 fat32_root_cluster;
52 u16 fat32_info_sector;
53 u8 fat32_state;
54 u32 fat32_vol_id;
55 };
56
57 static int fat_default_codepage = CONFIG_FAT_DEFAULT_CODEPAGE;
58 static char fat_default_iocharset[] = CONFIG_FAT_DEFAULT_IOCHARSET;
59
60 static struct fat_floppy_defaults {
61 unsigned nr_sectors;
62 unsigned sec_per_clus;
63 unsigned dir_entries;
64 unsigned media;
65 unsigned fat_length;
66 } floppy_defaults[] = {
67 {
68 .nr_sectors = 160 * KB_IN_SECTORS,
69 .sec_per_clus = 1,
70 .dir_entries = 64,
71 .media = 0xFE,
72 .fat_length = 1,
73 },
74 {
75 .nr_sectors = 180 * KB_IN_SECTORS,
76 .sec_per_clus = 1,
77 .dir_entries = 64,
78 .media = 0xFC,
79 .fat_length = 2,
80 },
81 {
82 .nr_sectors = 320 * KB_IN_SECTORS,
83 .sec_per_clus = 2,
84 .dir_entries = 112,
85 .media = 0xFF,
86 .fat_length = 1,
87 },
88 {
89 .nr_sectors = 360 * KB_IN_SECTORS,
90 .sec_per_clus = 2,
91 .dir_entries = 112,
92 .media = 0xFD,
93 .fat_length = 2,
94 },
95 };
96
97 int fat_add_cluster(struct inode *inode)
98 {
99 int err, cluster;
100
101 err = fat_alloc_clusters(inode, &cluster, 1);
102 if (err)
103 return err;
104 /* FIXME: this cluster should be added after data of this
105 * cluster is writed */
106 err = fat_chain_add(inode, cluster, 1);
107 if (err)
108 fat_free_clusters(inode, cluster);
109 return err;
110 }
111
112 static inline int __fat_get_block(struct inode *inode, sector_t iblock,
113 unsigned long *max_blocks,
114 struct buffer_head *bh_result, int create)
115 {
116 struct super_block *sb = inode->i_sb;
117 struct msdos_sb_info *sbi = MSDOS_SB(sb);
118 unsigned long mapped_blocks;
119 sector_t phys, last_block;
120 int err, offset;
121
122 err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create, false);
123 if (err)
124 return err;
125 if (phys) {
126 map_bh(bh_result, sb, phys);
127 *max_blocks = min(mapped_blocks, *max_blocks);
128 return 0;
129 }
130 if (!create)
131 return 0;
132
133 if (iblock != MSDOS_I(inode)->mmu_private >> sb->s_blocksize_bits) {
134 fat_fs_error(sb, "corrupted file size (i_pos %lld, %lld)",
135 MSDOS_I(inode)->i_pos, MSDOS_I(inode)->mmu_private);
136 return -EIO;
137 }
138
139 last_block = inode->i_blocks >> (sb->s_blocksize_bits - 9);
140 offset = (unsigned long)iblock & (sbi->sec_per_clus - 1);
141 /*
142 * allocate a cluster according to the following.
143 * 1) no more available blocks
144 * 2) not part of fallocate region
145 */
146 if (!offset && !(iblock < last_block)) {
147 /* TODO: multiple cluster allocation would be desirable. */
148 err = fat_add_cluster(inode);
149 if (err)
150 return err;
151 }
152 /* available blocks on this cluster */
153 mapped_blocks = sbi->sec_per_clus - offset;
154
155 *max_blocks = min(mapped_blocks, *max_blocks);
156 MSDOS_I(inode)->mmu_private += *max_blocks << sb->s_blocksize_bits;
157
158 err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create, false);
159 if (err)
160 return err;
161 if (!phys) {
162 fat_fs_error(sb,
> 163 "invalid FAT chain (i_pos %lld, last_block %ld)",
164 MSDOS_I(inode)->i_pos, last_block);
165 return -EIO;
166 }
167
168 BUG_ON(*max_blocks != mapped_blocks);
169 set_buffer_new(bh_result);
170 map_bh(bh_result, sb, phys);
171
172 return 0;
173 }
174
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28213 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [mmotm:master 174/212] fs///fat/inode.c:163:9: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'sector_t {aka long long unsigned int}'
2018-06-08 1:38 [mmotm:master 174/212] fs///fat/inode.c:163:9: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'sector_t {aka long long unsigned int}' kbuild test robot
@ 2018-06-08 3:54 ` OGAWA Hirofumi
0 siblings, 0 replies; 2+ messages in thread
From: OGAWA Hirofumi @ 2018-06-08 3:54 UTC (permalink / raw)
To: Andrew Morton
Cc: kbuild test robot, kbuild-all, Johannes Weiner,
Linux Memory Management List
kbuild test robot <lkp@intel.com> writes:
> tree: git://git.cmpxchg.org/linux-mmotm.git master
> head: 7393732bae530daa27567988b91d16ecfeef6c62
> commit: fe3e5c4f07cde4be67152518d21429bfbb875c0c [174/212] fat: use fat_fs_error() instead of BUG_ON() in __fat_get_block()
> config: i386-randconfig-s0-201822-CONFIG_DEBUG_INFO_REDUCED (attached as .config)
> compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
> reproduce:
> git checkout fe3e5c4f07cde4be67152518d21429bfbb875c0c
> # save the attached .config to linux build tree
> make ARCH=i386
>
> All warnings (new ones prefixed by >>):
>
> In file included from fs///fat/inode.c:24:0:
> fs///fat/inode.c: In function '__fat_get_block':
>>> fs///fat/inode.c:163:9: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'sector_t {aka long long unsigned int}' [-Wformat=]
> "invalid FAT chain (i_pos %lld, last_block %ld)",
> ^
> fs///fat/fat.h:397:24: note: in definition of macro 'fat_fs_error'
> __fat_fs_error(sb, 1, fmt , ## args)
This is the updated patch to fix this warning. Please update
fat-use-fat_fs_error-instead-of-bug_on-in-__fat_get_block.patch
Thanks.
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
[PATCH] fat: Use fat_fs_error() instead of BUG_ON() in __fat_get_block()
If file size and FAT cluster chain is not matched (corrupted image),
we can hit BUG_ON(!phys) in __fat_get_block().
So, use fat_fs_error() instead.
Link: http://lkml.kernel.org/r/874lilcu67.fsf@mail.parknet.co.jp
Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Reported-by: Anatoly Trosinenko <anatoly.trosinenko@gmail.com>
Tested-by: Anatoly Trosinenko <anatoly.trosinenko@gmail.com>
---
fs/fat/inode.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff -puN fs/fat/inode.c~vfat-dont-bugon fs/fat/inode.c
--- linux/fs/fat/inode.c~vfat-dont-bugon 2018-06-02 20:15:04.441920069 +0900
+++ linux-hirofumi/fs/fat/inode.c 2018-06-08 12:38:09.891123649 +0900
@@ -158,8 +158,14 @@ static inline int __fat_get_block(struct
err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create, false);
if (err)
return err;
+ if (!phys) {
+ fat_fs_error(sb,
+ "invalid FAT chain (i_pos %lld, last_block %llu)",
+ MSDOS_I(inode)->i_pos,
+ (unsigned long long)last_block);
+ return -EIO;
+ }
- BUG_ON(!phys);
BUG_ON(*max_blocks != mapped_blocks);
set_buffer_new(bh_result);
map_bh(bh_result, sb, phys);
_
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-06-08 3:55 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-08 1:38 [mmotm:master 174/212] fs///fat/inode.c:163:9: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'sector_t {aka long long unsigned int}' kbuild test robot
2018-06-08 3:54 ` OGAWA Hirofumi
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.