Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1502513

[PATCH 04/28] f2fs: replace a build-time warning with runtime WARN_ON

From Arnd Bergmann <arnd@arndb.de>
Newsgroups linux.kernel
Subject [PATCH 04/28] f2fs: replace a build-time warning with runtime WARN_ON
Date 2016-10-18 00:10 +0200
Message-ID <stogy-1lR-21@gated-at.bofh.it> (permalink)
References <stogy-1lR-13@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


gcc is unsure about the use of last_ofs_in_node, which might happen
without a prior initialization:

fs/f2fs//git/arm-soc/fs/f2fs/data.c: In function ‘f2fs_map_blocks’:
fs/f2fs/data.c:799:54: warning: ‘last_ofs_in_node’ may be used uninitialized in this function [-Wmaybe-uninitialized]
   if (prealloc && dn.ofs_in_node != last_ofs_in_node + 1) {

I'm not sure about it either, so to shut up the warning I initialize
it to a known invalid -1u and later check for this, so we get a
runtime warning if we ever hit the uninitialized case.

It would be much better to reorganize the code in some form that
made it obvious to both the compiler and the reader that this
variable use it ok.

Since I only see the warning with gcc-4.9 but not any later version,
it's possible that the compiler is actually smarter than I am here
and has learned to see the code as correct, in which case this
patch could just be disregarded. It would certainly be helpful
to get an opinion from the maintainers on the matter.

Fixes: 46008c6d4232 ("f2fs: support in batch multi blocks preallocation")
Cc: Chao Yu <yuchao0@huawei.com>
Cc: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 fs/f2fs/data.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 9ae194f..1b17de2 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -696,6 +696,12 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
 		goto out;
 	}
 
+	/*
+	 * FIXME: without this, we get "warning: ‘last_ofs_in_node’ may be
+	 * used uninitialized". It's not clear whether that can actually
+	 * happen, so there is now a WARN_ON() checking for this.
+	 */
+	last_ofs_in_node = -1u;
 next_dnode:
 	if (create)
 		f2fs_lock_op(sbi);
@@ -796,6 +802,7 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
 		allocated = dn.node_changed;
 
 		map->m_len += dn.ofs_in_node - ofs_in_node;
+		WARN_ON(last_ofs_in_node == -1u);
 		if (prealloc && dn.ofs_in_node != last_ofs_in_node + 1) {
 			err = -ENOSPC;
 			goto sync_out;
-- 
2.9.0

Back to linux.kernel | Previous | NextNext in thread | Find similar | Unroll thread


Thread

[PATCH 04/28] f2fs: replace a build-time warning with runtime WARN_ON Arnd Bergmann <arnd@arndb.de> - 2016-10-18 00:10 +0200
  Re: [f2fs-dev] [PATCH 04/28] f2fs: replace a build-time warning with  runtime WARN_ON Chao Yu <chao@kernel.org> - 2016-10-26 16:10 +0200
    Re: [f2fs-dev] [PATCH 04/28] f2fs: replace a build-time warning with runtime WARN_ON Arnd Bergmann <arnd@arndb.de> - 2016-10-26 17:00 +0200

csiph-web