lkml.org 
[lkml]   [2006]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: 2.6.19-rc2-mm1
On Wed, 18 Oct 2006, Gabriel C wrote:

> Me again :) Just found this in my syslog:
> [ 20.540964] VFS: Mounted root (ext3 filesystem) readonly.
> [ 20.541245] Freeing unused kernel memory: 196k freed
> [ 22.114421] EXT3 FS on hda1, internal journal
> [ 22.320373] BUG: warning at fs/inode.c:1389/i_size_write()
> [ 22.320380] [<c0174f14>] i_size_write+0x36/0x57
> [ 22.320391] [<c017c287>] simple_commit_write+0x5b/0x6a
> [ 22.320395] [<c016b0d8>] __page_symlink+0xb4/0x152
> [ 22.320400] [<c016b18c>] page_symlink+0x16/0x19
> [ 22.320404] [<c01cd7f3>] ramfs_symlink+0x41/0xae
> [ 22.320410] [<c016b81d>] permission+0xc7/0xda
> [ 22.320413] [<c016ba6d>] vfs_symlink+0xb4/0x115
> [ 22.320416] [<c016dcc1>] sys_symlinkat+0x74/0xab
> [ 22.320420] [<c016dd07>] sys_symlink+0xf/0x13
> [ 22.320423] [<c0102c62>] sysenter_past_esp+0x5f/0x85
> [ 22.320428] [<c0300033>] xfrm_lookup+0x2a2/0x4b9
> [ 22.320434] =======================

I guess this fixes the warning. Should it be applied? I am not quite sure
...

[PATCH] VFS: fix i_mutex locking in page_symlink()

The inode->i_mutex should be held every time when calling i_size_write(),
and the function contains WARN_ON() for that condition.
page_symlink(), however, does not lock i_mutex. It is perfectly OK, as the
i_mutex for the directory is held at the time page_symlink() is running,
so noone is able to change i_size during race condition. However,
i_size_write() spits out the warning without this patch.

Signed-off-by: Jiri Kosina <jikos@jikos.cz>

---
fs/namei.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/fs/namei.c b/fs/namei.c
index 61f99c1..1025973 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -2701,17 +2701,22 @@ retry:
page = find_or_create_page(mapping, 0, gfp_mask);
if (!page)
goto fail;
+ mutex_lock(&inode->i_mutex);
err = mapping->a_ops->prepare_write(NULL, page, 0, len-1);
if (err == AOP_TRUNCATED_PAGE) {
page_cache_release(page);
+ mutex_unlock(&inode->i_mutex);
goto retry;
}
- if (err)
+ if (err) {
+ mutex_unlock(&inode->i_mutex);
goto fail_map;
+ }
kaddr = kmap_atomic(page, KM_USER0);
memcpy(kaddr, symname, len-1);
kunmap_atomic(kaddr, KM_USER0);
err = mapping->a_ops->commit_write(NULL, page, 0, len-1);
+ mutex_unlock(&inode->i_mutex);
if (err == AOP_TRUNCATED_PAGE) {
page_cache_release(page);
goto retry;
--
Jiri Kosina
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2006-10-18 23:47    [W:0.323 / U:0.148 seconds]
©2003-2014 Jasper Spaans. Advertise on this site