]> Pileus Git - ~andy/linux/blobdiff - fs/bfs/file.c
get rid of block_write_begin_newtrunc
[~andy/linux] / fs / bfs / file.c
index 88b9a3ff44e4bc71bcc15029283dd706f2eaa73a..8fc2e9c9739ddc6ff587a5b5cd9394d6c2527ddb 100644 (file)
@@ -168,9 +168,17 @@ static int bfs_write_begin(struct file *file, struct address_space *mapping,
                        loff_t pos, unsigned len, unsigned flags,
                        struct page **pagep, void **fsdata)
 {
-       *pagep = NULL;
-       return block_write_begin(file, mapping, pos, len, flags,
-                                       pagep, fsdata, bfs_get_block);
+       int ret;
+
+       ret = block_write_begin(mapping, pos, len, flags, pagep,
+                               bfs_get_block);
+       if (unlikely(ret)) {
+               loff_t isize = mapping->host->i_size;
+               if (pos + len > isize)
+                       vmtruncate(mapping->host, isize);
+       }
+
+       return ret;
 }
 
 static sector_t bfs_bmap(struct address_space *mapping, sector_t block)