aboutsummaryrefslogtreecommitdiffstats
path: root/fs/minix
diff options
context:
space:
mode:
authorMarco Stornelli <marco.stornelli@gmail.com>2012-12-15 05:56:25 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2012-12-20 18:40:53 -0500
commit7fc7cd00f616e38973fe3acd0dc7e473da94c52e (patch)
treedb11ee0952cdeb78a64c1af0a7a638ed98cb1f2b /fs/minix
parent5dfc2821e87893695bf4751fcbbdb56f42fa2985 (diff)
minix: drop vmtruncate
Removed vmtruncate Signed-off-by: Marco Stornelli <marco.stornelli@gmail.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/minix')
-rw-r--r--fs/minix/file.c6
-rw-r--r--fs/minix/inode.c17
2 files changed, 16 insertions, 7 deletions
diff --git a/fs/minix/file.c b/fs/minix/file.c
index 4493ce695ab8..adc6f5494231 100644
--- a/fs/minix/file.c
+++ b/fs/minix/file.c
@@ -34,9 +34,12 @@ static int minix_setattr(struct dentry *dentry, struct iattr *attr)
34 34
35 if ((attr->ia_valid & ATTR_SIZE) && 35 if ((attr->ia_valid & ATTR_SIZE) &&
36 attr->ia_size != i_size_read(inode)) { 36 attr->ia_size != i_size_read(inode)) {
37 error = vmtruncate(inode, attr->ia_size); 37 error = inode_newsize_ok(inode, attr->ia_size);
38 if (error) 38 if (error)
39 return error; 39 return error;
40
41 truncate_setsize(inode, attr->ia_size);
42 minix_truncate(inode);
40 } 43 }
41 44
42 setattr_copy(inode, attr); 45 setattr_copy(inode, attr);
@@ -45,7 +48,6 @@ static int minix_setattr(struct dentry *dentry, struct iattr *attr)
45} 48}
46 49
47const struct inode_operations minix_file_inode_operations = { 50const struct inode_operations minix_file_inode_operations = {
48 .truncate = minix_truncate,
49 .setattr = minix_setattr, 51 .setattr = minix_setattr,
50 .getattr = minix_getattr, 52 .getattr = minix_getattr,
51}; 53};
diff --git a/fs/minix/inode.c b/fs/minix/inode.c
index 4fc5f8ab1c44..99541cceb584 100644
--- a/fs/minix/inode.c
+++ b/fs/minix/inode.c
@@ -395,6 +395,16 @@ int minix_prepare_chunk(struct page *page, loff_t pos, unsigned len)
395 return __block_write_begin(page, pos, len, minix_get_block); 395 return __block_write_begin(page, pos, len, minix_get_block);
396} 396}
397 397
398static void minix_write_failed(struct address_space *mapping, loff_t to)
399{
400 struct inode *inode = mapping->host;
401
402 if (to > inode->i_size) {
403 truncate_pagecache(inode, to, inode->i_size);
404 minix_truncate(inode);
405 }
406}
407
398static int minix_write_begin(struct file *file, struct address_space *mapping, 408static int minix_write_begin(struct file *file, struct address_space *mapping,
399 loff_t pos, unsigned len, unsigned flags, 409 loff_t pos, unsigned len, unsigned flags,
400 struct page **pagep, void **fsdata) 410 struct page **pagep, void **fsdata)
@@ -403,11 +413,8 @@ static int minix_write_begin(struct file *file, struct address_space *mapping,
403 413
404 ret = block_write_begin(mapping, pos, len, flags, pagep, 414 ret = block_write_begin(mapping, pos, len, flags, pagep,
405 minix_get_block); 415 minix_get_block);
406 if (unlikely(ret)) { 416 if (unlikely(ret))
407 loff_t isize = mapping->host->i_size; 417 minix_write_failed(mapping, pos + len);
408 if (pos + len > isize)
409 vmtruncate(mapping->host, isize);
410 }
411 418
412 return ret; 419 return ret;
413} 420}