aboutsummaryrefslogtreecommitdiff
path: root/fs/ext4
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2009-03-03 21:05:42 -0800
committerH. Peter Anvin <hpa@zytor.com>2009-03-03 21:05:42 -0800
commit2e22ea7cea0f7de86fd30df867fbf5b7e8eee0fd (patch)
tree8b8e5583fb2787ff7107a6f59b114ddcd2c2f691 /fs/ext4
parent638bee71c83a2837b48062fdc5b222163cf53d79 (diff)
parent645af4e9e0e32481e3336dda813688732c7e5f0f (diff)
Merge branch 'x86/core' into x86/mce2
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/ialloc.c7
-rw-r--r--fs/ext4/inode.c9
2 files changed, 15 insertions, 1 deletions
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
index 4fb86a0061d..f18a919be70 100644
--- a/fs/ext4/ialloc.c
+++ b/fs/ext4/ialloc.c
@@ -715,6 +715,13 @@ struct inode *ext4_new_inode(handle_t *handle, struct inode *dir, int mode)
if (sbi->s_log_groups_per_flex) {
ret2 = find_group_flex(sb, dir, &group);
+ if (ret2 == -1) {
+ ret2 = find_group_other(sb, dir, &group);
+ if (ret2 == 0 && printk_ratelimit())
+ printk(KERN_NOTICE "ext4: find_group_flex "
+ "failed, fallback succeeded dir %lu\n",
+ dir->i_ino);
+ }
goto got_group;
}
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index cbd2ca99d11..51cdd13e1c3 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -1368,6 +1368,10 @@ retry:
goto out;
}
+ /* We cannot recurse into the filesystem as the transaction is already
+ * started */
+ flags |= AOP_FLAG_NOFS;
+
page = grab_cache_page_write_begin(mapping, index, flags);
if (!page) {
ext4_journal_stop(handle);
@@ -1377,7 +1381,7 @@ retry:
*pagep = page;
ret = block_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
- ext4_get_block);
+ ext4_get_block);
if (!ret && ext4_should_journal_data(inode)) {
ret = walk_page_buffers(handle, page_buffers(page),
@@ -2667,6 +2671,9 @@ retry:
ret = PTR_ERR(handle);
goto out;
}
+ /* We cannot recurse into the filesystem as the transaction is already
+ * started */
+ flags |= AOP_FLAG_NOFS;
page = grab_cache_page_write_begin(mapping, index, flags);
if (!page) {