mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
direct-io: move aio_complete into ->end_io
Filesystems with unwritten extent support must not complete an AIO request until the transaction to convert the extent has been commited. That means the aio_complete calls needs to be moved into the ->end_io callback so that the filesystem can control when to call it exactly. This makes a bit of a mess out of dio_complete and the ->end_io callback prototype even more complicated. Signed-off-by: Christoph Hellwig <[email protected]> Reviewed-by: Jan Kara <[email protected]> Signed-off-by: Alex Elder <[email protected]>
This commit is contained in:
parent
696123fca8
commit
40e2e97316
6 changed files with 37 additions and 18 deletions
|
|
@ -1406,7 +1406,9 @@ xfs_end_io_direct(
|
|||
struct kiocb *iocb,
|
||||
loff_t offset,
|
||||
ssize_t size,
|
||||
void *private)
|
||||
void *private,
|
||||
int ret,
|
||||
bool is_async)
|
||||
{
|
||||
xfs_ioend_t *ioend = iocb->private;
|
||||
|
||||
|
|
@ -1452,6 +1454,9 @@ xfs_end_io_direct(
|
|||
* against double-freeing.
|
||||
*/
|
||||
iocb->private = NULL;
|
||||
|
||||
if (is_async)
|
||||
aio_complete(iocb, ret, 0);
|
||||
}
|
||||
|
||||
STATIC ssize_t
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@ typedef struct xfs_ioend {
|
|||
size_t io_size; /* size of the extent */
|
||||
xfs_off_t io_offset; /* offset in the file */
|
||||
struct work_struct io_work; /* xfsdatad work queue */
|
||||
struct kiocb *io_iocb;
|
||||
int io_result;
|
||||
} xfs_ioend_t;
|
||||
|
||||
extern const struct address_space_operations xfs_address_space_operations;
|
||||
|
|
|
|||
Loading…
Reference in a new issue