summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
18456c3)
vmtruncate() is removed since upstream commit b9f61c3.
Also truncate_setsize is not always available. So we
just open code it and use truncate_pagecache instead.
Signed-off-by: Peng Tao <tao.peng@emc.com>
Signed-off-by: James Simmons <uja.ornl@gmail.com>
Change-Id: I9d4f43a5c181f16482b4caa021ba7a09ee52b600
Reviewed-on: http://review.whamcloud.com/5613
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Yang Sheng <yang.sheng@intel.com>
Reviewed-by: Keith Mannthey <keith.mannthey@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
static int vvp_do_vmtruncate(struct inode *inode, size_t size)
{
int result;
static int vvp_do_vmtruncate(struct inode *inode, size_t size)
{
int result;
/*
* Only ll_inode_size_lock is taken at this level.
*/
ll_inode_size_lock(inode);
/*
* Only ll_inode_size_lock is taken at this level.
*/
ll_inode_size_lock(inode);
- result = vmtruncate(inode, size);
- ll_inode_size_unlock(inode);
+ result = inode_newsize_ok(inode, size);
+ if (result < 0) {
+ ll_inode_size_unlock(inode);
+ return result;
+ }
+ oldsize = inode->i_size;
+ i_size_write(inode, size);
+ truncate_pagecache(inode, oldsize, size);
+ ll_inode_size_unlock(inode);
struct inode *inode = obj->oo_inode;
handle_t *h;
tid_t tid;
struct inode *inode = obj->oo_inode;
handle_t *h;
tid_t tid;
+ loff_t oldsize;
+ int rc = 0, rc2 = 0;
ENTRY;
LASSERT(end == OBD_OBJECT_EOF);
ENTRY;
LASSERT(end == OBD_OBJECT_EOF);
tid = oh->ot_handle->h_transaction->t_tid;
tid = oh->ot_handle->h_transaction->t_tid;
- rc = vmtruncate(inode, start);
+ oldsize=inode->i_size;
+ i_size_write(inode, start);
+ truncate_pagecache(inode, oldsize, start);
+ if (inode->i_op->truncate)
+ inode->i_op->truncate(inode);
/*
* For a partial-page truncate, flush the page to disk immediately to
* avoid data corruption during direct disk write. b=17397
*/
/*
* For a partial-page truncate, flush the page to disk immediately to
* avoid data corruption during direct disk write. b=17397
*/
- if (rc == 0 && (start & ~CFS_PAGE_MASK) != 0)
+ if ((start & ~CFS_PAGE_MASK) != 0)
rc = filemap_fdatawrite_range(inode->i_mapping, start, start+1);
h = journal_current_handle();
rc = filemap_fdatawrite_range(inode->i_mapping, start, start+1);
h = journal_current_handle();