projects
/
linux-2.6-microblaze.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso...
[linux-2.6-microblaze.git]
/
fs
/
ext4
/
extents.c
diff --git
a/fs/ext4/extents.c
b/fs/ext4/extents.c
index
92ad64b
..
c0de30f
100644
(file)
--- a/
fs/ext4/extents.c
+++ b/
fs/ext4/extents.c
@@
-139,7
+139,8
@@
static int ext4_ext_get_access(handle_t *handle, struct inode *inode,
if (path->p_bh) {
/* path points to block */
BUFFER_TRACE(path->p_bh, "get_write_access");
if (path->p_bh) {
/* path points to block */
BUFFER_TRACE(path->p_bh, "get_write_access");
- return ext4_journal_get_write_access(handle, path->p_bh);
+ return ext4_journal_get_write_access(handle, inode->i_sb,
+ path->p_bh, EXT4_JTR_NONE);
}
/* path points to leaf/index in inode body */
/* we use in-core data, no need to protect them */
}
/* path points to leaf/index in inode body */
/* we use in-core data, no need to protect them */
@@
-1082,7
+1083,8
@@
static int ext4_ext_split(handle_t *handle, struct inode *inode,
}
lock_buffer(bh);
}
lock_buffer(bh);
- err = ext4_journal_get_create_access(handle, bh);
+ err = ext4_journal_get_create_access(handle, inode->i_sb, bh,
+ EXT4_JTR_NONE);
if (err)
goto cleanup;
if (err)
goto cleanup;
@@
-1160,7
+1162,8
@@
static int ext4_ext_split(handle_t *handle, struct inode *inode,
}
lock_buffer(bh);
}
lock_buffer(bh);
- err = ext4_journal_get_create_access(handle, bh);
+ err = ext4_journal_get_create_access(handle, inode->i_sb, bh,
+ EXT4_JTR_NONE);
if (err)
goto cleanup;
if (err)
goto cleanup;
@@
-1286,7
+1289,8
@@
static int ext4_ext_grow_indepth(handle_t *handle, struct inode *inode,
return -ENOMEM;
lock_buffer(bh);
return -ENOMEM;
lock_buffer(bh);
- err = ext4_journal_get_create_access(handle, bh);
+ err = ext4_journal_get_create_access(handle, inode->i_sb, bh,
+ EXT4_JTR_NONE);
if (err) {
unlock_buffer(bh);
goto out;
if (err) {
unlock_buffer(bh);
goto out;
@@
-3569,7
+3573,7
@@
static int ext4_ext_convert_to_initialized(handle_t *handle,
split_map.m_len - ee_block);
err = ext4_ext_zeroout(inode, &zero_ex1);
if (err)
split_map.m_len - ee_block);
err = ext4_ext_zeroout(inode, &zero_ex1);
if (err)
- goto
out
;
+ goto
fallback
;
split_map.m_len = allocated;
}
if (split_map.m_lblk - ee_block + split_map.m_len <
split_map.m_len = allocated;
}
if (split_map.m_lblk - ee_block + split_map.m_len <
@@
-3583,7
+3587,7
@@
static int ext4_ext_convert_to_initialized(handle_t *handle,
ext4_ext_pblock(ex));
err = ext4_ext_zeroout(inode, &zero_ex2);
if (err)
ext4_ext_pblock(ex));
err = ext4_ext_zeroout(inode, &zero_ex2);
if (err)
- goto
out
;
+ goto
fallback
;
}
split_map.m_len += split_map.m_lblk - ee_block;
}
split_map.m_len += split_map.m_lblk - ee_block;
@@
-3592,6
+3596,7
@@
static int ext4_ext_convert_to_initialized(handle_t *handle,
}
}
}
}
+fallback:
err = ext4_split_extent(handle, inode, ppath, &split_map, split_flag,
flags);
if (err > 0)
err = ext4_split_extent(handle, inode, ppath, &split_map, split_flag,
flags);
if (err > 0)
@@
-4474,6
+4479,7
@@
static long ext4_zero_range(struct file *file, loff_t offset,
loff_t len, int mode)
{
struct inode *inode = file_inode(file);
loff_t len, int mode)
{
struct inode *inode = file_inode(file);
+ struct address_space *mapping = file->f_mapping;
handle_t *handle = NULL;
unsigned int max_blocks;
loff_t new_size = 0;
handle_t *handle = NULL;
unsigned int max_blocks;
loff_t new_size = 0;
@@
-4560,17
+4566,17
@@
static long ext4_zero_range(struct file *file, loff_t offset,
* Prevent page faults from reinstantiating pages we have
* released from page cache.
*/
* Prevent page faults from reinstantiating pages we have
* released from page cache.
*/
-
down_write(&EXT4_I(inode)->i_mmap_sem
);
+
filemap_invalidate_lock(mapping
);
ret = ext4_break_layouts(inode);
if (ret) {
ret = ext4_break_layouts(inode);
if (ret) {
-
up_write(&EXT4_I(inode)->i_mmap_sem
);
+
filemap_invalidate_unlock(mapping
);
goto out_mutex;
}
ret = ext4_update_disksize_before_punch(inode, offset, len);
if (ret) {
goto out_mutex;
}
ret = ext4_update_disksize_before_punch(inode, offset, len);
if (ret) {
-
up_write(&EXT4_I(inode)->i_mmap_sem
);
+
filemap_invalidate_unlock(mapping
);
goto out_mutex;
}
/* Now release the pages and zero block aligned part of pages */
goto out_mutex;
}
/* Now release the pages and zero block aligned part of pages */
@@
-4579,7
+4585,7
@@
static long ext4_zero_range(struct file *file, loff_t offset,
ret = ext4_alloc_file_blocks(file, lblk, max_blocks, new_size,
flags);
ret = ext4_alloc_file_blocks(file, lblk, max_blocks, new_size,
flags);
-
up_write(&EXT4_I(inode)->i_mmap_sem
);
+
filemap_invalidate_unlock(mapping
);
if (ret)
goto out_mutex;
}
if (ret)
goto out_mutex;
}
@@
-5221,6
+5227,7
@@
out:
static int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
{
struct super_block *sb = inode->i_sb;
static int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
{
struct super_block *sb = inode->i_sb;
+ struct address_space *mapping = inode->i_mapping;
ext4_lblk_t punch_start, punch_stop;
handle_t *handle;
unsigned int credits;
ext4_lblk_t punch_start, punch_stop;
handle_t *handle;
unsigned int credits;
@@
-5274,7
+5281,7
@@
static int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
* Prevent page faults from reinstantiating pages we have released from
* page cache.
*/
* Prevent page faults from reinstantiating pages we have released from
* page cache.
*/
-
down_write(&EXT4_I(inode)->i_mmap_sem
);
+
filemap_invalidate_lock(mapping
);
ret = ext4_break_layouts(inode);
if (ret)
ret = ext4_break_layouts(inode);
if (ret)
@@
-5289,15
+5296,15
@@
static int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
* Write tail of the last page before removed range since it will get
* removed from the page cache below.
*/
* Write tail of the last page before removed range since it will get
* removed from the page cache below.
*/
- ret = filemap_write_and_wait_range(
inode->i_
mapping, ioffset, offset);
+ ret = filemap_write_and_wait_range(mapping, ioffset, offset);
if (ret)
goto out_mmap;
/*
* Write data that will be shifted to preserve them when discarding
* page cache below. We are also protected from pages becoming dirty
if (ret)
goto out_mmap;
/*
* Write data that will be shifted to preserve them when discarding
* page cache below. We are also protected from pages becoming dirty
- * by i_
mmap_sem
.
+ * by i_
rwsem and invalidate_lock
.
*/
*/
- ret = filemap_write_and_wait_range(
inode->i_
mapping, offset + len,
+ ret = filemap_write_and_wait_range(mapping, offset + len,
LLONG_MAX);
if (ret)
goto out_mmap;
LLONG_MAX);
if (ret)
goto out_mmap;
@@
-5350,7
+5357,7
@@
out_stop:
ext4_journal_stop(handle);
ext4_fc_stop_ineligible(sb);
out_mmap:
ext4_journal_stop(handle);
ext4_fc_stop_ineligible(sb);
out_mmap:
-
up_write(&EXT4_I(inode)->i_mmap_sem
);
+
filemap_invalidate_unlock(mapping
);
out_mutex:
inode_unlock(inode);
return ret;
out_mutex:
inode_unlock(inode);
return ret;
@@
-5367,6
+5374,7
@@
out_mutex:
static int ext4_insert_range(struct inode *inode, loff_t offset, loff_t len)
{
struct super_block *sb = inode->i_sb;
static int ext4_insert_range(struct inode *inode, loff_t offset, loff_t len)
{
struct super_block *sb = inode->i_sb;
+ struct address_space *mapping = inode->i_mapping;
handle_t *handle;
struct ext4_ext_path *path;
struct ext4_extent *extent;
handle_t *handle;
struct ext4_ext_path *path;
struct ext4_extent *extent;
@@
-5425,7
+5433,7
@@
static int ext4_insert_range(struct inode *inode, loff_t offset, loff_t len)
* Prevent page faults from reinstantiating pages we have released from
* page cache.
*/
* Prevent page faults from reinstantiating pages we have released from
* page cache.
*/
-
down_write(&EXT4_I(inode)->i_mmap_sem
);
+
filemap_invalidate_lock(mapping
);
ret = ext4_break_layouts(inode);
if (ret)
ret = ext4_break_layouts(inode);
if (ret)
@@
-5526,7
+5534,7
@@
out_stop:
ext4_journal_stop(handle);
ext4_fc_stop_ineligible(sb);
out_mmap:
ext4_journal_stop(handle);
ext4_fc_stop_ineligible(sb);
out_mmap:
-
up_write(&EXT4_I(inode)->i_mmap_sem
);
+
filemap_invalidate_unlock(mapping
);
out_mutex:
inode_unlock(inode);
return ret;
out_mutex:
inode_unlock(inode);
return ret;