unsigned long nr_segs, loff_t loff)
 {
        struct ffs_io_data *io_data;
+       ssize_t res;
 
        ENTER();
 
 
        kiocb_set_cancel_fn(kiocb, ffs_aio_cancel);
 
-       return ffs_epfile_io(kiocb->ki_filp, io_data);
+       res = ffs_epfile_io(kiocb->ki_filp, io_data);
+       if (res != -EIOCBQUEUED)
+               kfree(io_data);
+       return res;
 }
 
 static ssize_t ffs_epfile_aio_read(struct kiocb *kiocb,
 {
        struct ffs_io_data *io_data;
        struct iovec *iovec_copy;
+       ssize_t res;
 
        ENTER();
 
 
        kiocb_set_cancel_fn(kiocb, ffs_aio_cancel);
 
-       return ffs_epfile_io(kiocb->ki_filp, io_data);
+       res = ffs_epfile_io(kiocb->ki_filp, io_data);
+       if (res != -EIOCBQUEUED) {
+               kfree(io_data);
+               kfree(iovec_copy);
+       }
+       return res;
 }
 
 static int