Date: Wed, 26 Oct 2005 16:25:01 +0800 From: Xin LI <delphij@frontfree.net> To: freebsd-hackers@FreeBSD.org Cc: zhuyan@staff.sina.com.cn, LI Xin <delphij@delphij.net> Subject: Is it possible to mmap() raw disk device? Message-ID: <1130315101.810.5.camel@spirit>
next in thread | raw e-mail | index | archive | help
--=-d+sFaITjGw0SPWFkVk8H Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Dear folks, When we were trying to make a userland FS application we have encountered "Invalid Argument" when doing mmap() over an open descriptor to a disk device. The program goes here: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> /* mmap() */ #include <fcntl.h> #include <errno.h> #include <assert.h> int main(int argc, char *argv[]) { int fd; char *src, *dst; struct stat statbuf; dst =3D strdup("abcdefghijklmn"); if (dst =3D=3D NULL) { printf("Can not allocate memory\n"); exit(-1); } if ((fd =3D open("/dev/da2s1", O_RDWR | O_DIRECT)) < 0) printf("can't open for read/write"); if ((src =3D mmap(0, 10, PROT_WRITE | PROT_READ, MAP_SHARED, fd, 0)) =3D=3D (caddr_t) -1) { perror("mmap error for input"); return -1; } memcpy(dst, src, 10); /* does the file copy */ exit(0); } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D Do we need some special prerequisite before doing mmap()? According to the vm_mmap.c it seems that we should map a DTYPE_VNODE object, which looks somewhat confusing... Thanks in advance! Cheers, --=20 Xin LI <delphij delphij net> http://www.delphij.net/ --=-d+sFaITjGw0SPWFkVk8H Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (FreeBSD) iD8DBQBDXz1d/cVsHxFZiIoRAuweAJ4lkRXRjkXNUEP3Zk8Fv5EW89ODAwCghEjf s5YomQWnRju+otn6BzuCBFY= =yNeR -----END PGP SIGNATURE----- --=-d+sFaITjGw0SPWFkVk8H--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1130315101.810.5.camel>