udf: don't bother with full-page write optimisations in adinicb case
authorAl Viro <viro@ZenIV.linux.org.uk>
Thu, 15 Sep 2016 23:17:21 +0000 (00:17 +0100)
committerJan Kara <jack@suse.cz>
Mon, 19 Sep 2016 08:47:01 +0000 (10:47 +0200)
... it would get converted to regular if such had been attempted

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/udf/file.c

index 254bc02d7e2c307822e840135aa1f607ebe049c1..e855bf8d74b4b7bcf4a695f746f6876b71e4f2d0 100644 (file)
@@ -105,11 +105,25 @@ static ssize_t udf_adinicb_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
        return 0;
 }
 
+static int udf_adinicb_write_end(struct file *file, struct address_space *mapping,
+                                loff_t pos, unsigned len, unsigned copied,
+                                struct page *page, void *fsdata)
+{
+       struct inode *inode = page->mapping->host;
+       loff_t last_pos = pos + copied;
+       if (last_pos > inode->i_size)
+               i_size_write(inode, last_pos);
+       set_page_dirty(page);
+       unlock_page(page);
+       put_page(page);
+       return copied;
+}
+
 const struct address_space_operations udf_adinicb_aops = {
        .readpage       = udf_adinicb_readpage,
        .writepage      = udf_adinicb_writepage,
        .write_begin    = udf_adinicb_write_begin,
-       .write_end      = simple_write_end,
+       .write_end      = udf_adinicb_write_end,
        .direct_IO      = udf_adinicb_direct_IO,
 };