hi all,
currently, i am debuging the code derived from block-sync.c, the detail as
follow:
================================================================ struct
socket_message_header *msg_hdr;
struct socketmsg_sync_read * msg_body;
int msglen, size;
char * msgbuf = msg;
int ret = 0;
uint64_t offset;
char * iobuf = NULL;
msg_hdr = (struct socket_message_header *)msgbuf;
msg_body = (struct socketmsg_sync_read *)(msgbuf + sizeof(struct
socket_message_header));
msglen = msg_hdr->len;
size = msg_body->nb_sectors * msg_body-sector_size;
offset = msg_body->sector * (uint64_t)msg_body->sector_size;
MY_DPRINTF("READ: nb_sectors = %d, sector_size = %d, start_sector =
%llu",
msg_body->nb_sectors,
msg_body->sector_size,
msg_body->sector);
//iobuf = calloc(size, sizeof(char));
iobuf = malloc(size);
if (!iobuf)
goto failure;
MY_DPRINTF("IO Buffer memory calloc is ok!");
ret = lseek(image_fd, offset, SEEK_SET);
if (ret != (off_t)-1) {
MY_DPRINTF("after lseek, the position is at %lu",
(unsigned long) ret);
MY_DPRINTF("image_fd = %d, iobuf = %p, size = %d",
image_fd, iobuf, size);
ret = readn(image_fd, (void*)iobuf, (size_t)size);
if (ret < 0) {
MY_DPRINTF("readn(%s) is error!",
strerror(errno));
goto failure;
}
else
{
MY_DPRINTF("readn() is end, and has read
[%d] data!", ret);
}
} else
{
MY_DPRINTF("lseek is error(%s)", strerror(errno));
goto failure;
}
MY_DPRINTF("Seek and Read image is ok!");
==================================================================================the
debuging output, which cut from /var/log/message, are as follow:
Jul 7 16:45:07 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(712)] loop
for select(4)............
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(715)]
select() is end, and ret = 1
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(720)] enter
hook_read_message().
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_read_message(632)] read()
is end, and msglen=32
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_read_message(651)]
receive SOCK_MSG_READ message.
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(502)] READ:
nb_sectors = 2, sector_size = 512, start_sector = 2
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(508)] IO Buffer
memory calloc is ok!
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(513)] after
lseek, the position is at 1024
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(514)] image_fd =
6, iobuf = 0x804f388, size = 1024
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [readn(66)] call readn(fd[6],
ptr[0x804f388], n[1024])
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [readn(70)] call read(fd[6],
ptr[0x804f388], nleft[1024])
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [readn(73)] read is error
(Invalid argument)
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [readn(74)] nread = -1, nleft =
1024, n = 1024
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(518)]
readn(Invalid argument) is error!
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_read_message(653)]
hook_do_read() is end, and ret = -1
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_read_message(670)] do
with message is error!
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(722)] out of
hook_read_message().
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(712)] loop
for select(5)............
Jul 7 16:45:21 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(715)]
select() is end, and ret = 0
among the list above, you can find the error message about the "readn"
function. to resovle this problem, i have try some methods, BUT all is failure.
varify the mode of opening the file, that is O_RDWR | O_DIRECT | O_LARGEFILE
So, who can help me to do with this problem?
read is error (Invalid argument) ?
thanks a lot!
2009-07-07
房海峰
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
when i open the large file by the mode of O_DIRECT, Can the malloc() be used?
2009-07-07
房海峰
发件人: 房海峰
发送时间: 2009-07-07 17:20:01
收件人: xen-devel
抄送: fanghaifeng
主题: [Xen-devel] a problem from blktap?
hi all,
currently, i am debuging the code derived from block-sync.c, the detail as
follow:
================================================================ struct
socket_message_header *msg_hdr;
struct socketmsg_sync_read * msg_body;
int msglen, size;
char * msgbuf = msg;
int ret = 0;
uint64_t offset;
char * iobuf = NULL;
msg_hdr = (struct socket_message_header *)msgbuf;
msg_body = (struct socketmsg_sync_read *)(msgbuf + sizeof(struct
socket_message_header));
msglen = msg_hdr->len;
size = msg_body->nb_sectors * msg_body-sector_size;
offset = msg_body->sector * (uint64_t)msg_body->sector_size;
MY_DPRINTF("READ: nb_sectors = %d, sector_size = %d, start_sector =
%llu",
msg_body->nb_sectors,
msg_body->sector_size,
msg_body->sector);
//iobuf = calloc(size, sizeof(char));
iobuf = malloc(size);
if (!iobuf)
goto failure;
MY_DPRINTF("IO Buffer memory calloc is ok!");
ret = lseek(image_fd, offset, SEEK_SET);
if (ret != (off_t)-1) {
MY_DPRINTF("after lseek, the position is at %lu",
(unsigned long) ret);
MY_DPRINTF("image_fd = %d, iobuf = %p, size = %d",
image_fd, iobuf, size);
ret = readn(image_fd, (void*)iobuf, (size_t)size);
if (ret < 0) {
MY_DPRINTF("readn(%s) is error!",
strerror(errno));
goto failure;
}
else
{
MY_DPRINTF("readn() is end, and has read
[%d] data!", ret);
}
} else
{
MY_DPRINTF("lseek is error(%s)", strerror(errno));
goto failure;
}
MY_DPRINTF("Seek and Read image is ok!");
==================================================================================the
debuging output, which cut from /var/log/message, are as follow:
Jul 7 16:45:07 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(712)] loop
for select(4)............
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(715)]
select() is end, and ret = 1
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(720)] enter
hook_read_message().
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_read_message(632)] read()
is end, and msglen=32
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_read_message(651)]
receive SOCK_MSG_READ message.
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(502)] READ:
nb_sectors = 2, sector_size = 512, start_sector = 2
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(508)] IO Buffer
memory calloc is ok!
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(513)] after
lseek, the position is at 1024
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(514)] image_fd =
6, iobuf = 0x804f388, size = 1024
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [readn(66)] call readn(fd[6],
ptr[0x804f388], n[1024])
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [readn(70)] call read(fd[6],
ptr[0x804f388], nleft[1024])
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [readn(73)] read is error
(Invalid argument)
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [readn(74)] nread = -1, nleft =
1024, n = 1024
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(518)]
readn(Invalid argument) is error!
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_read_message(653)]
hook_do_read() is end, and ret = -1
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_read_message(670)] do
with message is error!
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(722)] out of
hook_read_message().
Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(712)] loop
for select(5)............
Jul 7 16:45:21 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(715)]
select() is end, and ret = 0
among the list above, you can find the error message about the "readn"
function. to resovle this problem, i have try some methods, BUT all is failure.
varify the mode of opening the file, that is O_RDWR | O_DIRECT | O_LARGEFILE
So, who can help me to do with this problem?
read is error (Invalid argument) ?
thanks a lot!
2009-07-07
房海峰
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
hi, when you use O_DIRECT, buffers passed to read/write calls must be sector-aligned. posix_memalign() will give you what you want. jake 2009/7/7 房海峰 <fhf25@126.com>> hi all, > > currently, i am debuging the code derived from block-sync.c, the detail as > follow: > > ================================================================> > struct socket_message_header *msg_hdr; > > struct socketmsg_sync_read * msg_body; > > > > int msglen, size; > > char * msgbuf = msg; > > int ret = 0; > > uint64_t offset; > > > > char * iobuf = NULL; > > > > msg_hdr = (struct socket_message_header *)msgbuf; > > msg_body = (struct socketmsg_sync_read *)(msgbuf + sizeof(struct socket_message_header)); > > msglen = msg_hdr->len; > > > size = msg_body->nb_sectors * msg_body-sector_size; > > offset = msg_body->sector * (uint64_t)msg_body->sector_size; > > > > MY_DPRINTF("READ: nb_sectors = %d, sector_size = %d, start_sector = %llu", > > msg_body->nb_sectors, > > msg_body->sector_size, > > msg_body->sector); > > > > //iobuf = calloc(size, sizeof(char)); > > iobuf = malloc(size); > > if (!iobuf) > > goto failure; > > MY_DPRINTF("IO Buffer memory calloc is ok!"); > > > > ret = lseek(image_fd, offset, SEEK_SET); > > if (ret != (off_t)-1) { > > > > MY_DPRINTF("after lseek, the position is at %lu", (unsigned long) ret); > > MY_DPRINTF("image_fd = %d, iobuf = %p, size = %d", image_fd, iobuf, size); > > > > ret = readn(image_fd, (void*)iobuf, (size_t)size); > > if (ret < 0) { > > MY_DPRINTF("readn(%s) is error!", strerror(errno)); > > goto failure; > > } > > else > > { > > MY_DPRINTF("readn() is end, and has read [%d] data!", ret); > > } > > } else > > { > > MY_DPRINTF("lseek is error(%s)", strerror(errno)); > > goto failure; > > } > > MY_DPRINTF("Seek and Read image is ok!"); > > > ==================================================================================> the debuging output, which cut from /var/log/message, are as follow: > > > Jul 7 16:45:07 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(712)] loop for select(4)............ > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(715)] select() is end, and ret = 1 > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(720)] enter hook_read_message(). > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_read_message(632)] read() is end, and msglen=32 > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_read_message(651)] receive SOCK_MSG_READ message. > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(502)] READ: nb_sectors = 2, sector_size = 512, start_sector = 2 > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(508)] IO Buffer memory calloc is ok! > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(513)] after lseek, the position is at 1024 > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(514)] image_fd = 6, iobuf = 0x804f388, size = 1024 > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [readn(66)] call readn(fd[6], ptr[0x804f388], n[1024]) > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [readn(70)] call read(fd[6], ptr[0x804f388], nleft[1024]) > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [readn(73)] read is error (Invalid argument) > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [readn(74)] nread = -1, nleft = 1024, n = 1024 > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_do_read(518)] readn(Invalid argument) is error! > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_read_message(653)] hook_do_read() is end, and ret = -1 > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_read_message(670)] do with message is error! > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(722)] out of hook_read_message(). > > Jul 7 16:45:11 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(712)] loop for select(5)............ > > Jul 7 16:45:21 domain0 remote-blktapctrl[3963]: [hook_new_tapdisk(715)] select() is end, and ret = 0 > > among the list above, you can find the error message about the "readn" > function. to resovle this problem, i have try some methods, BUT all is > failure. > > varify the mode of opening the file, that is O_RDWR | O_DIRECT | > O_LARGEFILE > > So, who can help me to do with this problem? > > read is error (Invalid argument) ? > > > thanks a lot! > > > 2009-07-07 > ------------------------------ > 房海峰 > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel