mirror of
https://git.proxmox.com/git/qemu
synced 2025-08-07 07:30:33 +00:00
virtio-9p: Add sg helper functions
Add scatter-gather helper functions. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
bb9e3216bf
commit
1f5a89bf68
@ -762,6 +762,56 @@ static int stat_to_v9stat(V9fsState *s, V9fsString *name,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct iovec *adjust_sg(struct iovec *sg, int len, int *iovcnt)
|
||||||
|
{
|
||||||
|
while (len && *iovcnt) {
|
||||||
|
if (len < sg->iov_len) {
|
||||||
|
sg->iov_len -= len;
|
||||||
|
sg->iov_base += len;
|
||||||
|
len = 0;
|
||||||
|
} else {
|
||||||
|
len -= sg->iov_len;
|
||||||
|
sg++;
|
||||||
|
*iovcnt -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sg;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct iovec *cap_sg(struct iovec *sg, int cap, int *cnt)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int total = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < *cnt; i++) {
|
||||||
|
if ((total + sg[i].iov_len) > cap) {
|
||||||
|
sg[i].iov_len -= ((total + sg[i].iov_len) - cap);
|
||||||
|
i++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
total += sg[i].iov_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
*cnt = i;
|
||||||
|
|
||||||
|
return sg;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void print_sg(struct iovec *sg, int cnt)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
printf("sg[%d]: {", cnt);
|
||||||
|
for (i = 0; i < cnt; i++) {
|
||||||
|
if (i) {
|
||||||
|
printf(", ");
|
||||||
|
}
|
||||||
|
printf("(%p, %zd)", sg[i].iov_base, sg[i].iov_len);
|
||||||
|
}
|
||||||
|
printf("}\n");
|
||||||
|
}
|
||||||
|
|
||||||
static void v9fs_dummy(V9fsState *s, V9fsPDU *pdu)
|
static void v9fs_dummy(V9fsState *s, V9fsPDU *pdu)
|
||||||
{
|
{
|
||||||
/* Note: The following have been added to prevent GCC from complaining
|
/* Note: The following have been added to prevent GCC from complaining
|
||||||
@ -786,6 +836,9 @@ static void v9fs_dummy(V9fsState *s, V9fsPDU *pdu)
|
|||||||
(void) donttouch_stat;
|
(void) donttouch_stat;
|
||||||
(void) v9fs_stat_free;
|
(void) v9fs_stat_free;
|
||||||
(void) stat_to_v9stat;
|
(void) stat_to_v9stat;
|
||||||
|
(void) adjust_sg;
|
||||||
|
(void) cap_sg;
|
||||||
|
(void) print_sg;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void v9fs_version(V9fsState *s, V9fsPDU *pdu)
|
static void v9fs_version(V9fsState *s, V9fsPDU *pdu)
|
||||||
|
Loading…
Reference in New Issue
Block a user