Skip to content

Commit

Permalink
Merge pull request #565 from ddiss/rework_do_rw
Browse files Browse the repository at this point in the history
lkl: posix: rework do_rw() types
  • Loading branch information
tavip authored Feb 18, 2025
2 parents 4eb8d9e + d188b39 commit 3e92231
Showing 1 changed file with 18 additions and 20 deletions.
38 changes: 18 additions & 20 deletions tools/lkl/lib/posix-host.c
Original file line number Diff line number Diff line change
Expand Up @@ -637,36 +637,34 @@ static int fd_get_capacity(struct lkl_disk disk, unsigned long long *res)
return 0;
}

static int do_rw(ssize_t (*fn)(), struct lkl_disk disk, struct lkl_blk_req *req)
static int do_rw(ssize_t (*fn)(int, void *, size_t, off_t),
int fd, struct lkl_blk_req *req)
{
off_t off = req->sector * 512;
void *addr;
int len;
int i;
int ret = 0;

for (i = 0; i < req->count; i++) {

addr = req->buf[i].iov_base;
len = req->buf[i].iov_len;
void *addr = req->buf[i].iov_base;
size_t len = req->buf[i].iov_len;

do {
ret = fn(disk.fd, addr, len, off);
ssize_t got = fn(fd, addr, len, off);

if (ret <= 0) {
ret = -1;
goto out;
}

addr += ret;
len -= ret;
off += ret;
if (got <= 0)
return -1;

addr += got;
len -= got;
off += got;
} while (len);
}

out:
return ret;
return 0;
}

static inline ssize_t pwrite_fn(int fd, void *buf, size_t len, off_t off)
{
return pwrite(fd, (const void *)buf, len, off);
}

static int blk_request(struct lkl_disk disk, struct lkl_blk_req *req)
Expand All @@ -675,10 +673,10 @@ static int blk_request(struct lkl_disk disk, struct lkl_blk_req *req)

switch (req->type) {
case LKL_DEV_BLK_TYPE_READ:
err = do_rw(pread, disk, req);
err = do_rw(pread, disk.fd, req);
break;
case LKL_DEV_BLK_TYPE_WRITE:
err = do_rw(pwrite, disk, req);
err = do_rw(pwrite_fn, disk.fd, req);
break;
case LKL_DEV_BLK_TYPE_FLUSH:
case LKL_DEV_BLK_TYPE_FLUSH_OUT:
Expand Down

0 comments on commit 3e92231

Please sign in to comment.