[HLFS]task summarize for 2011 11 14

0 views
Skip to first unread message

harryxiyou

unread,
Nov 14, 2011, 3:49:47 AM11/14/11
to xiyou...@googlegroups.com
昨天:
测试tapdisk外部控制

今天:
1, 继续测试外部控制,遇到点问题.
2, 测试 stat lstat api


问题:
[root@111 ~/workshop1]$cat 1.c
/*
* test1.c
*
* Harry Wei <harry...@gmail.com>
*/

#include <glib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>

#include "api/hlfs.h"

static char *build_ctrl_region(const char *testfs)
{
int fd, offset;
// CTRL_REGION_T ctrl_region;
char ctrl_region_file[128];
char *addr = NULL;

g_message("enter func %s\n", __func__);
sprintf(ctrl_region_file, "%s%s%s", "/var/xen/", testfs, "-ctrl");
g_message("77 dbg ctrl_region_file is %s\n", ctrl_region_file);
g_remove(ctrl_region_file);
fd = open(ctrl_region_file, O_RDWR | O_CREAT, 0666);
g_message("77 1 dbg pass here\n");
if (fd == -1) {
g_message("%s -- open failed\n", __func__);
return NULL;
}
g_message("77 2 dbg pass here\n");
offset = sysconf(_SC_PAGE_SIZE);
g_message("_SC_PAGE_SIZE is %d\n", offset);
if (-1 == write(fd, "", 1)) {
g_message("%s -- write error!\n", __func__);
return NULL;
}
addr = mmap(NULL, sysconf(_SC_PAGE_SIZE), PROT_WRITE, MAP_SHARED, fd, 0);
g_message("77 3 dbg pass here\n");
if (addr == NULL) {
g_message("%s -- mmap failed!\n", __func__);
return NULL;
}
g_message("leave func %s\n", __func__);
return addr;
}

int main(int argc, char **argv) {
char *ctrl_region = NULL;

#if 0 //This is ok!!!
ctrl_region = build_ctrl_region("testfs");

while (1) {
g_message("%s -- is_start_clean is %d, copy_waterlevel is %d\n", __func__,
g_atomic_int_get(&((CTRL_REGION_T *)ctrl_region)->is_start_clean),
g_atomic_int_get(&((CTRL_REGION_T *)ctrl_region)->copy_waterlevel));
sleep(1);
}
#endif

#if 1 //This is not ok!!! segment fault!!!
CTRL_REGION_T *ctrl_region1 = NULL;
ctrl_region = build_ctrl_region("testfs");
g_message("ctrl_region's addr is %p\n", ctrl_region);
g_atomic_pointer_set((CTRL_REGION_T *)ctrl_region, ctrl_region1);
g_message("ctrl_region1's addr is %p\n", ctrl_region1);

while (1) {
g_message("%s -- is_start_clean is %d, copy_waterlevel is %d\n", __func__,
g_atomic_int_get(&ctrl_region1->is_start_clean),
g_atomic_int_get(&ctrl_region1->copy_waterlevel));
sleep(1);
}
#endif
return 0;
}


[root@111 ~/workshop1]$cat Makefile
HLFS_DIR = /hlfs
HLFS_LOG = $(HLFS_DIR)/3part/log
GLIB_DIR1 = /usr/lib/glib-2.0/include
GLIB_DIR2 = /usr/include/glib-2.0
#GLIB = /lib64


IBIN = test

CFLAGS += -Werror -g -O0
CFLAGS += -Wno-unused
CFLAGS += -fno-strict-aliasing
CFLAGS += -I $(HLFS_DIR)/src/include
CFLAGS += -I $(GLIB_DIR1)
CFLAGS += -I $(GLIB_DIR2)
CFLAGS += -I $(HLFS_LOG)/include

ifeq ($(CONFIG_X86_64),y)
CFLAGS += -fPIC
endif

LIBS += -L$(HLFS_DIR)/output/lib64/ -lhlfs
#LIBS += -L$(GLIB) -lglib-2.0
LIBS += -L$(HLFS_LOG)/lib64 -llog4c


test: 1.c
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)


[root@111 ~/workshop1]$make
cc -Werror -g -O0 -Wno-unused -fno-strict-aliasing -I
/hlfs/src/include -I /usr/lib/glib-2.0/include -I
/usr/include/glib-2.0 -I /hlfs/3part/log/include -o test 1.c
-L/hlfs/output/lib64/ -lhlfs -L/hlfs/3part/log/lib64 -llog4c
[root@111 ~/workshop1]$./test
** Message: enter func build_ctrl_region

** Message: 77 dbg ctrl_region_file is /var/xen/testfs-ctrl

** Message: 77 1 dbg pass here

** Message: 77 2 dbg pass here

** Message: _SC_PAGE_SIZE is 4096

** Message: 77 3 dbg pass here

** Message: leave func build_ctrl_region

** Message: ctrl_region's addr is 0x7f5e57e22000

** Message: ctrl_region1's addr is (nil)

段错误


分析:
g_atomic_pointer_set有问题,正在测试问题的所在。

--
Thanks
Harry Wei

Reply all
Reply to author
Forward
0 new messages