From: Dan Carpenter <dan.carpenter@oracle.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] ocfs2: do not change i_size in write_end for direct io
Date: Mon, 21 Sep 2015 19:24:30 +0300 [thread overview]
Message-ID: <20150921162343.GC5648@mwanda> (raw)
Hello Ryan Ding,
This is a semi-automatic email about new static checker warnings.
The patch 3d598f72dc44: "ocfs2: do not change i_size in write_end for
direct io" from Sep 17, 2015, leads to the following Smatch complaint:
fs/ocfs2/aops.c:2063 ocfs2_write_end_nolock()
error: we previously assumed 'handle' could be null (see line 1994)
fs/ocfs2/aops.c
1993
1994 if (handle) {
Patch adds check.
1995 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode),
1996 wc->w_di_bh, OCFS2_JOURNAL_ACCESS_WRITE);
1997 if (ret) {
1998 copied = ret;
1999 mlog_errno(ret);
2000 goto out;
2001 }
2002 }
2003
2004 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
2005 ocfs2_write_end_inline(inode, pos, len, &copied, di, wc);
2006 goto out_write_size;
2007 }
2008
2009 if (unlikely(copied < len) && wc->w_target_page) {
2010 if (!PageUptodate(wc->w_target_page))
2011 copied = 0;
2012
2013 ocfs2_zero_new_buffers(wc->w_target_page, start+copied,
2014 start+len);
2015 }
2016 if (wc->w_target_page)
2017 flush_dcache_page(wc->w_target_page);
2018
2019 for(i = 0; i < wc->w_num_pages; i++) {
2020 tmppage = wc->w_pages[i];
2021
2022 /* This is the direct io target page. */
2023 if (tmppage == NULL)
2024 continue;
2025
2026 if (tmppage == wc->w_target_page) {
2027 from = wc->w_target_from;
2028 to = wc->w_target_to;
2029
2030 BUG_ON(from > PAGE_CACHE_SIZE ||
2031 to > PAGE_CACHE_SIZE ||
2032 to < from);
2033 } else {
2034 /*
2035 * Pages adjacent to the target (if any) imply
2036 * a hole-filling write in which case we want
2037 * to flush their entire range.
2038 */
2039 from = 0;
2040 to = PAGE_CACHE_SIZE;
2041 }
2042
2043 if (page_has_buffers(tmppage)) {
2044 if (handle && ocfs2_should_order_data(inode))
2045 ocfs2_jbd2_file_inode(handle, inode);
2046 block_commit_write(tmppage, from, to);
2047 }
2048 }
2049
2050 out_write_size:
2051 /* Direct io do not update i_size here. */
2052 if (wc->w_type != OCFS2_WRITE_DIRECT) {
2053 pos += copied;
2054 if (pos > i_size_read(inode)) {
2055 i_size_write(inode, pos);
2056 mark_inode_dirty(inode);
2057 }
2058 inode->i_blocks = ocfs2_inode_sector_count(inode);
2059 di->i_size = cpu_to_le64((u64)i_size_read(inode));
2060 inode->i_mtime = inode->i_ctime = CURRENT_TIME;
2061 di->i_mtime = di->i_ctime = cpu_to_le64(inode->i_mtime.tv_sec);
2062 di->i_mtime_nsec = di->i_ctime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
2063 ocfs2_update_inode_fsync_trans(handle, inode, 1);
^^^^^^
Unchecked dereference inside function call.
2064 }
2065 if (handle)
regards,
dan carpenter
next reply other threads:[~2015-09-21 16:24 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-21 16:24 Dan Carpenter [this message]
2015-09-23 2:14 ` [Ocfs2-devel] ocfs2: do not change i_size in write_end for direct io Ryan Ding
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150921162343.GC5648@mwanda \
--to=dan.carpenter@oracle.com \
--cc=ocfs2-devel@oss.oracle.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.