|
@@ -105,11 +105,25 @@ static ssize_t udf_adinicb_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
|
|
return 0;
|
|
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 = {
|
|
const struct address_space_operations udf_adinicb_aops = {
|
|
.readpage = udf_adinicb_readpage,
|
|
.readpage = udf_adinicb_readpage,
|
|
.writepage = udf_adinicb_writepage,
|
|
.writepage = udf_adinicb_writepage,
|
|
.write_begin = udf_adinicb_write_begin,
|
|
.write_begin = udf_adinicb_write_begin,
|
|
- .write_end = simple_write_end,
|
|
|
|
|
|
+ .write_end = udf_adinicb_write_end,
|
|
.direct_IO = udf_adinicb_direct_IO,
|
|
.direct_IO = udf_adinicb_direct_IO,
|
|
};
|
|
};
|
|
|
|
|