mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (52 commits) split invalidate_inodes() fs: skip I_FREEING inodes in writeback_sb_inodes fs: fold invalidate_list into invalidate_inodes fs: do not drop inode_lock in dispose_list fs: inode split IO and LRU lists fs: switch bdev inode bdi's correctly fs: fix buffer invalidation in invalidate_list fsnotify: use dget_parent smbfs: use dget_parent exportfs: use dget_parent fs: use RCU read side protection in d_validate fs: clean up dentry lru modification fs: split __shrink_dcache_sb fs: improve DCACHE_REFERENCED usage fs: use percpu counter for nr_dentry and nr_dentry_unused fs: simplify __d_free fs: take dcache_lock inside __d_path fs: do not assign default i_ino in new_inode fs: introduce a per-cpu last_ino allocator new helper: ihold() ...
This commit is contained in:
commit
426e1f5cec
118 changed files with 851 additions and 689 deletions
|
|
@ -22,8 +22,6 @@
|
|||
|
||||
int reiserfs_commit_write(struct file *f, struct page *page,
|
||||
unsigned from, unsigned to);
|
||||
int reiserfs_prepare_write(struct file *f, struct page *page,
|
||||
unsigned from, unsigned to);
|
||||
|
||||
void reiserfs_evict_inode(struct inode *inode)
|
||||
{
|
||||
|
|
@ -165,7 +163,7 @@ inline void make_le_item_head(struct item_head *ih, const struct cpu_key *key,
|
|||
** but tail is still sitting in a direct item, and we can't write to
|
||||
** it. So, look through this page, and check all the mapped buffers
|
||||
** to make sure they have valid block numbers. Any that don't need
|
||||
** to be unmapped, so that block_prepare_write will correctly call
|
||||
** to be unmapped, so that __block_write_begin will correctly call
|
||||
** reiserfs_get_block to convert the tail into an unformatted node
|
||||
*/
|
||||
static inline void fix_tail_page_for_writing(struct page *page)
|
||||
|
|
@ -439,13 +437,13 @@ static int reiserfs_bmap(struct inode *inode, sector_t block,
|
|||
}
|
||||
|
||||
/* special version of get_block that is only used by grab_tail_page right
|
||||
** now. It is sent to block_prepare_write, and when you try to get a
|
||||
** now. It is sent to __block_write_begin, and when you try to get a
|
||||
** block past the end of the file (or a block from a hole) it returns
|
||||
** -ENOENT instead of a valid buffer. block_prepare_write expects to
|
||||
** -ENOENT instead of a valid buffer. __block_write_begin expects to
|
||||
** be able to do i/o on the buffers returned, unless an error value
|
||||
** is also returned.
|
||||
**
|
||||
** So, this allows block_prepare_write to be used for reading a single block
|
||||
** So, this allows __block_write_begin to be used for reading a single block
|
||||
** in a page. Where it does not produce a valid page for holes, or past the
|
||||
** end of the file. This turns out to be exactly what we need for reading
|
||||
** tails for conversion.
|
||||
|
|
@ -558,11 +556,12 @@ static int convert_tail_for_hole(struct inode *inode,
|
|||
**
|
||||
** We must fix the tail page for writing because it might have buffers
|
||||
** that are mapped, but have a block number of 0. This indicates tail
|
||||
** data that has been read directly into the page, and block_prepare_write
|
||||
** won't trigger a get_block in this case.
|
||||
** data that has been read directly into the page, and
|
||||
** __block_write_begin won't trigger a get_block in this case.
|
||||
*/
|
||||
fix_tail_page_for_writing(tail_page);
|
||||
retval = reiserfs_prepare_write(NULL, tail_page, tail_start, tail_end);
|
||||
retval = __reiserfs_write_begin(tail_page, tail_start,
|
||||
tail_end - tail_start);
|
||||
if (retval)
|
||||
goto unlock;
|
||||
|
||||
|
|
@ -2033,7 +2032,7 @@ static int grab_tail_page(struct inode *inode,
|
|||
/* start within the page of the last block in the file */
|
||||
start = (offset / blocksize) * blocksize;
|
||||
|
||||
error = block_prepare_write(page, start, offset,
|
||||
error = __block_write_begin(page, start, offset - start,
|
||||
reiserfs_get_block_create_0);
|
||||
if (error)
|
||||
goto unlock;
|
||||
|
|
@ -2628,8 +2627,7 @@ static int reiserfs_write_begin(struct file *file,
|
|||
return ret;
|
||||
}
|
||||
|
||||
int reiserfs_prepare_write(struct file *f, struct page *page,
|
||||
unsigned from, unsigned to)
|
||||
int __reiserfs_write_begin(struct page *page, unsigned from, unsigned len)
|
||||
{
|
||||
struct inode *inode = page->mapping->host;
|
||||
int ret;
|
||||
|
|
@ -2650,7 +2648,7 @@ int reiserfs_prepare_write(struct file *f, struct page *page,
|
|||
th->t_refcount++;
|
||||
}
|
||||
|
||||
ret = block_prepare_write(page, from, to, reiserfs_get_block);
|
||||
ret = __block_write_begin(page, from, len, reiserfs_get_block);
|
||||
if (ret && reiserfs_transaction_running(inode->i_sb)) {
|
||||
struct reiserfs_transaction_handle *th = current->journal_info;
|
||||
/* this gets a little ugly. If reiserfs_get_block returned an
|
||||
|
|
|
|||
|
|
@ -160,8 +160,6 @@ long reiserfs_compat_ioctl(struct file *file, unsigned int cmd,
|
|||
|
||||
int reiserfs_commit_write(struct file *f, struct page *page,
|
||||
unsigned from, unsigned to);
|
||||
int reiserfs_prepare_write(struct file *f, struct page *page,
|
||||
unsigned from, unsigned to);
|
||||
/*
|
||||
** reiserfs_unpack
|
||||
** Function try to convert tail from direct item into indirect.
|
||||
|
|
@ -200,7 +198,7 @@ int reiserfs_unpack(struct inode *inode, struct file *filp)
|
|||
}
|
||||
|
||||
/* we unpack by finding the page with the tail, and calling
|
||||
** reiserfs_prepare_write on that page. This will force a
|
||||
** __reiserfs_write_begin on that page. This will force a
|
||||
** reiserfs_get_block to unpack the tail for us.
|
||||
*/
|
||||
index = inode->i_size >> PAGE_CACHE_SHIFT;
|
||||
|
|
@ -210,7 +208,7 @@ int reiserfs_unpack(struct inode *inode, struct file *filp)
|
|||
if (!page) {
|
||||
goto out;
|
||||
}
|
||||
retval = reiserfs_prepare_write(NULL, page, write_from, write_from);
|
||||
retval = __reiserfs_write_begin(page, write_from, 0);
|
||||
if (retval)
|
||||
goto out_unlock;
|
||||
|
||||
|
|
|
|||
|
|
@ -1156,7 +1156,7 @@ static int reiserfs_link(struct dentry *old_dentry, struct inode *dir,
|
|||
inode->i_ctime = CURRENT_TIME_SEC;
|
||||
reiserfs_update_sd(&th, inode);
|
||||
|
||||
atomic_inc(&inode->i_count);
|
||||
ihold(inode);
|
||||
d_instantiate(dentry, inode);
|
||||
retval = journal_end(&th, dir->i_sb, jbegin_count);
|
||||
reiserfs_write_unlock(dir->i_sb);
|
||||
|
|
|
|||
|
|
@ -418,13 +418,11 @@ static inline __u32 xattr_hash(const char *msg, int len)
|
|||
|
||||
int reiserfs_commit_write(struct file *f, struct page *page,
|
||||
unsigned from, unsigned to);
|
||||
int reiserfs_prepare_write(struct file *f, struct page *page,
|
||||
unsigned from, unsigned to);
|
||||
|
||||
static void update_ctime(struct inode *inode)
|
||||
{
|
||||
struct timespec now = current_fs_time(inode->i_sb);
|
||||
if (hlist_unhashed(&inode->i_hash) || !inode->i_nlink ||
|
||||
if (inode_unhashed(inode) || !inode->i_nlink ||
|
||||
timespec_equal(&inode->i_ctime, &now))
|
||||
return;
|
||||
|
||||
|
|
@ -532,8 +530,7 @@ reiserfs_xattr_set_handle(struct reiserfs_transaction_handle *th,
|
|||
rxh->h_hash = cpu_to_le32(xahash);
|
||||
}
|
||||
|
||||
err = reiserfs_prepare_write(NULL, page, page_offset,
|
||||
page_offset + chunk + skip);
|
||||
err = __reiserfs_write_begin(page, page_offset, chunk + skip);
|
||||
if (!err) {
|
||||
if (buffer)
|
||||
memcpy(data + skip, buffer + buffer_pos, chunk);
|
||||
|
|
|
|||
Loading…
Reference in a new issue