1d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/*
2d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *   Copyright (c) International Business Machines  Corp., 2004
3d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *
4d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *   This program is free software;  you can redistribute it and/or modify
5d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *   it under the terms of the GNU General Public License as published by
6d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *   the Free Software Foundation; either version 2 of the License, or
7d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *   (at your option) any later version.
8d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *
9d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *   This program is distributed in the hope that it will be useful,
10d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
11d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
12d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *   the GNU General Public License for more details.
13d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *
14d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *   You should have received a copy of the GNU General Public License
15d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *   along with this program;  if not, write to the Free Software
164548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */
18d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
19d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/*
20d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST CASE	: mmap.c
21d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *
22d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * VARIATIONS	: 18
23d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *
24d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * EVENTS TESTED: DM_EVENT_READ
25d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 		  DM_EVENT_WRITE
26d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */
27d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <string.h>
28d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <stdio.h>
29d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <stdlib.h>
30d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <errno.h>
31d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <pthread.h>
32d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <unistd.h>
33d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <sys/mount.h>
34d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <sys/mman.h>
35d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <fcntl.h>
36d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include "dm_test.h"
37d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
38d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#define TMP_FILELEN 50000
39d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#define MMAPFILE_EXE "mmapfile"
40d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
41d13d74bbf207c2d01598c6fef092a75b93b07c71vapierpthread_t tid;
42d13d74bbf207c2d01598c6fef092a75b93b07c71vapierdm_sessid_t sid;
43d13d74bbf207c2d01598c6fef092a75b93b07c71vapierchar dmMsgBuf[4096];
44d13d74bbf207c2d01598c6fef092a75b93b07c71vapierchar command[4096];
45d13d74bbf207c2d01598c6fef092a75b93b07c71vapierchar *mountPt;
46d13d74bbf207c2d01598c6fef092a75b93b07c71vapierchar *deviceNm;
47d13d74bbf207c2d01598c6fef092a75b93b07c71vapierchar DummyFile[FILENAME_MAX];
48d13d74bbf207c2d01598c6fef092a75b93b07c71vapierchar DummyTmp[FILENAME_MAX];
49d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
504bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak/* Variables for thread communications */
51d13d74bbf207c2d01598c6fef092a75b93b07c71vapierdm_eventtype_t eventExpected;
52d13d74bbf207c2d01598c6fef092a75b93b07c71vapierdm_eventtype_t eventReceived;
53d13d74bbf207c2d01598c6fef092a75b93b07c71vapierdm_response_t eventResponse;
54d13d74bbf207c2d01598c6fef092a75b93b07c71vapiervoid *hanp1;
55d13d74bbf207c2d01598c6fef092a75b93b07c71vapiersize_t hlen1;
56d13d74bbf207c2d01598c6fef092a75b93b07c71vapierdm_off_t offset;
57d13d74bbf207c2d01598c6fef092a75b93b07c71vapierdm_size_t length;
58d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
59d13d74bbf207c2d01598c6fef092a75b93b07c71vapiervoid *Thread(void *);
60d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
61d13d74bbf207c2d01598c6fef092a75b93b07c71vapierint main(int argc, char **argv)
62d13d74bbf207c2d01598c6fef092a75b93b07c71vapier{
63d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
64d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	char *varstr;
65354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int rc;
66354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int i;
67d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	char *szSessionInfo = "dm_test session info";
68d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	dm_eventset_t events;
69d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
70d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	DMOPT_PARSE(argc, argv);
71d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	DMLOG_START();
72d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
73d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	DMEV_ZERO(events);
74d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	DMEV_SET(DM_EVENT_MOUNT, events);
75bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
76d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/* CANNOT DO ANYTHING WITHOUT SUCCESSFUL INITIALIZATION!!! */
77d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if ((rc = dm_init_service(&varstr)) != 0) {
78354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		DMLOG_PRINT(DMLVL_ERR,
79354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    "dm_init_service failed! (rc = %d, errno = %d)\n",
80354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    rc, errno);
81d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		DM_EXIT();
82354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else if ((rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &sid))
83354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		   == -1) {
84354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		DMLOG_PRINT(DMLVL_ERR,
85354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    "dm_create_session failed! (rc = %d, errno = %d)\n",
86354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    rc, errno);
87d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		DM_EXIT();
88354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else
89354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    if ((rc =
90354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		 dm_set_disp(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN, DM_NO_TOKEN,
91354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     &events, DM_EVENT_MAX)) == -1) {
92354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		DMLOG_PRINT(DMLVL_ERR,
93354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    "dm_set_disp failed! (rc = %d, errno = %d)\n", rc,
94354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    errno);
95d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_destroy_session(sid);
96d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		DM_EXIT();
97d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	} else if ((rc = pthread_create(&tid, NULL, Thread, NULL)) != 0) {
98354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		DMLOG_PRINT(DMLVL_ERR,
99354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    "pthread_create failed! (rc = %d, errno = %d)\n",
100354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    rc, errno);
101d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_destroy_session(sid);
102d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		DM_EXIT();
103d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	} else if ((rc = dmimpl_mount(&mountPt, &deviceNm)) == -1) {
104354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		DMLOG_PRINT(DMLVL_ERR,
105354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    "dmimpl_mount failed! (rc = %d, errno = %d)\n", rc,
106354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    errno);
107d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_destroy_session(sid);
108d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		DM_EXIT();
109d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	} else {
110d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
111d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
112d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(DummyFile, "%s/%s", mountPt, DUMMY_FILE);
113d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(DummyTmp, "%s/%s", mountPt, DUMMY_TMP);
114d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
115d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		remove(DummyFile);
116d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
117d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		EVENT_DELIVERY_DELAY;
118e753fd7967c95651b952dd6fe67d2cb56478056esubrata_modak		fd = open(DummyTmp, O_RDWR | O_CREAT, DUMMY_FILE_RW_MODE);
119d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (fd != -1) {
120354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			for (i = 0; i < TMP_FILELEN / DUMMY_STRLEN; i++) {
121354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (write(fd, DUMMY_STRING, DUMMY_STRLEN) !=
122354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    DUMMY_STRLEN) {
123d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					rc = -1;
124d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					break;
1252c28215423293e443469a07ae7011135d058b671Garrett Cooper				}
126d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
127d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
128d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = -1;
129d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
130d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc != -1) {
131d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = fsync(fd);
132d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
133d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc != -1) {
134d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = close(fd);
135d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
136d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
137354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_ERR,
138354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "creating dummy file failed! (rc = %d, errno = %d)\n",
139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    rc, errno);
140d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_destroy_session(sid);
141d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DM_EXIT();
142d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
143d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
144d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
145354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	DMLOG_PRINT(DMLVL_DEBUG,
146354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    "Starting DMAPI memory mapped file synchronous event data tests\n");
147bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
148d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
149d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - no regions
150d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: no event
151d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
152d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_READ_BASE + 1)) {
153d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
154d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
155d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
156d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		off_t inoff = 0;
157d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = DUMMY_STRLEN;
158d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
159d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
160d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_INVALID;
161d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
162d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_INVALID;
163d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
164d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
165d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
166d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
167d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
168d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
169d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
170d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
171d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
172d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = close(fd)) == -1) {
173d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
174d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
175d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
176d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
177354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
178354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
179354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
180d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
181d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
182d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
183354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
184354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDONLY, inoff, (long)inlen, 1);
185d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
186d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
187d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
188354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMVAR_END(DMVAR_CHKPASSEXP
189354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  (0, rc, eventExpected, eventReceived));
190d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
191d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
192d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
193d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
194354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
195354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
196354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
197d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
198d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
199d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
200d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
201bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
202d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
203d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_REGION_WRITE
204d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: no event
205d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
206d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_READ_BASE + 2)) {
207d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
208d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
209d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
210d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		off_t inoff = 0;
211d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = DUMMY_STRLEN;
212d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
213d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
214d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
215d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
216d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
217d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_INVALID;
218d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
219d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_INVALID;
220d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
221d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_offset = 0;
222d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
223d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_WRITE;
224d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
225d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
226d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
227d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
228d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
229d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
230d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
231d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
232d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
233354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
234354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
235354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
236354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
237354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
238d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
239d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
240d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
241d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
242354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
243354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
244354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
245d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
246d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
247d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
248354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
249354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDONLY, inoff, (long)inlen, 1);
250d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
251d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
252d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
253354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMVAR_END(DMVAR_CHKPASSEXP
254354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  (0, rc, eventExpected, eventReceived));
255d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
256d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
257d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
258d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
259354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
260354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
261354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
262d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
263d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
264d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
265d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
266bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
267d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
268d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_REGION_TRUNCATE
269d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: no event
270d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
271d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_READ_BASE + 3)) {
272d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
273d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
274d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
275d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		off_t inoff = 0;
276d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = DUMMY_STRLEN;
277d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
278d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
279d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
280d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
281d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
282d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_INVALID;
283d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
284d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_INVALID;
285d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
286d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_offset = 0;
287d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
288d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_TRUNCATE;
289d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
290d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
291d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
292d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
293d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
294d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
295d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
296d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
297d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
298354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
299354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
300354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
301354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
302354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
303d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
304d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
305d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
306d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
307354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
308354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
309354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
310d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
311d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
312d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
313354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
314354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDONLY, inoff, (long)inlen, 1);
315d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
316d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
317d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
318354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMVAR_END(DMVAR_CHKPASSEXP
319354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  (0, rc, eventExpected, eventReceived));
320d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
321d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
322d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
323d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
324354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
325354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
326354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
327d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
328d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
329d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
330d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
331bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
332d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
333d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_EVENT_READ, DM_RESP_CONTINUE
334d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: DM_EVENT_READ
335d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 *
3364bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak	 * This variation uncovered XFS BUG #33 (entire file returned instead
337d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * of mapped region only)
338d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
339d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_READ_BASE + 4)) {
340d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
341d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
342d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
343d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		off_t inoff = PAGEALIGN(0);
344d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = PAGEALIGN(DUMMY_STRLEN);
345d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
346d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int varStatus;
347d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
348d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
349d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
350d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
351d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_READ;
352d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
353d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_CONTINUE;
354d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
355d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_offset = 0;
356d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
357d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_READ;
358d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
359d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
360d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
361d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
362d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
363d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
364d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
365d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
366d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
367354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
368354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
369354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
370354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
371354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
372d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
373d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
374d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
375d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
376354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
377354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
378354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
379d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
380d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
381d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
382354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
383354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDONLY, inoff, (long)inlen, 1);
384d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
385d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
386d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
387354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if ((varStatus =
388354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     DMVAR_CHKPASSEXP(0, rc, eventExpected,
389354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      eventReceived)) == DMSTAT_PASS) {
390d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				if (inoff != offset) {
391354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
392354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Offset NOT correct! (%d vs %d)\n",
393354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    inoff, offset);
394d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					varStatus = DMSTAT_FAIL;
395d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				} else if (inlen != length) {
396354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
397354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Length NOT correct! (%d vs %d)\n",
398354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    inlen, length);
399d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					varStatus = DMSTAT_FAIL;
400d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				}
401d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
402d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_END(varStatus);
403d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
404d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
405d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
406d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
407354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
408354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
409354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
410d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
411d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
412d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
413d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
414bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
415d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
416d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_EVENT_READ, DM_RESP_ABORT
417d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: DM_EVENT_READ
418d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
419d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_READ_BASE + 5)) {
420d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
421d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
422d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
423d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		off_t inoff = PAGEALIGN(0);
424d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = PAGEALIGN(DUMMY_STRLEN);
425d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
426d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int varStatus;
427d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
428d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
429d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
430d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
431d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_READ;
432d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
433d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_ABORT;
434d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
435d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_offset = 0;
436d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
437d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_READ;
438d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
439d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
440d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
441d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
442d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
443d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
444d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
445d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
446d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
447354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
448354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
449354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
450354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
451354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
452d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
453d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
454d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
455d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
456354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
457354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
458354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
459d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
460d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
461d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
462354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
463354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDONLY, inoff, (long)inlen, 0);
464d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
465d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
466d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
467354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if ((varStatus =
468354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     DMVAR_CHKPASSEXP(0, rc, eventExpected,
469354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      eventReceived)) == DMSTAT_PASS) {
470d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				if (inoff != offset) {
471354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
472354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Offset NOT correct! (%d vs %d)\n",
473354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    inoff, offset);
474d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					varStatus = DMSTAT_FAIL;
475d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				} else if (inlen != length) {
476354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
477354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Length NOT correct! (%d vs %d)\n",
478354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    inlen, length);
479d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					varStatus = DMSTAT_FAIL;
480d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				}
481d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
482d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_END(varStatus);
483d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
484d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
485d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
486d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
487354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
488354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
489354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
490d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
491d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
492d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
493d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
494bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
495d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
496d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_EVENT_READ
497d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: no event
498d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
499d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_READ_BASE + 6)) {
500d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
501d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
502d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
503d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		off_t inoff = PAGEALIGN(0);
504d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = PAGEALIGN(DUMMY_STRLEN);
505d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
506d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
507d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
508d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
509d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
510d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_INVALID;
511d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
512d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_CONTINUE;
513d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
514354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		Regions[0].rg_offset = TMP_FILELEN / 2;
515d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
516d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_READ;
517d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
518d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
519d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
520d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
521d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
522d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
523d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
524d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
525d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
526354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
527354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
528354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
529354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
530354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
531d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
532d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
533d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
534d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
535354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
536354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
537354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
538d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
539d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
540d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
541354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
542354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDONLY, inoff, (long)inlen, 1);
543d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
544d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
545d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
546354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMVAR_END(DMVAR_CHKPASSEXP
547354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  (0, rc, eventExpected, eventReceived));
548d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
549d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
550d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
551d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
552354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
553354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
554354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
555d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
556d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
557d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
558d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
559bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
560d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
561d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_EVENT_READ
562d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: no event
563d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
564d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_READ_BASE + 7)) {
565d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
566d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
567d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
568354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		off_t inoff = PAGEALIGN(TMP_FILELEN / 4);
569d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = PAGEALIGN(DUMMY_STRLEN);
570d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
571d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
572d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
573d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
574d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
575d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_INVALID;
576d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
577d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_CONTINUE;
578d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
579354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		Regions[0].rg_offset = TMP_FILELEN / 2;
580d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
581d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_READ;
582d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
583d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
584d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
585d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
586d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
587d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
588d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
589d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
590d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
591354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
592354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
593354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
594354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
595354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
596d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
597d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
598d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
599d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
600354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
601354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
602354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
603d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
604d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
605d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
606354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
607354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDONLY, inoff, (long)inlen, 1);
608d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
609d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
610d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
611354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMVAR_END(DMVAR_CHKPASSEXP
612354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  (0, rc, eventExpected, eventReceived));
613d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
614d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
615d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
616d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
617354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
618354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
619354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
620d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
621d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
622d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
623d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
624bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
625d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
626d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_EVENT_READ
627d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: DM_EVENT_READ
628d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
629d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_READ_BASE + 8)) {
630d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
631d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
632d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
633354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		off_t inoff = PAGEALIGN(TMP_FILELEN / 4);
634d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = PAGEALIGN(DUMMY_STRLEN);
635d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
636d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int varStatus;
637d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
638d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
639d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
640d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
641d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_READ;
642d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
643d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_CONTINUE;
644d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
645354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		Regions[0].rg_offset = TMP_FILELEN / 4;
646d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
647d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_READ;
648d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
649d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
650d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
651d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
652d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
653d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
654d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
655d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
656d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
657354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
658354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
659354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
660354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
661354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
662d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
663d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
664d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
665d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
666354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
667354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
668354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
669d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
670d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
671d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
672354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
673354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDONLY, inoff, (long)inlen, 1);
674d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
675d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
676d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
677354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if ((varStatus =
678354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     DMVAR_CHKPASSEXP(0, rc, eventExpected,
679354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      eventReceived)) == DMSTAT_PASS) {
680d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				if (inoff != offset) {
681354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
682354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Offset NOT correct! (%d vs %d)\n",
683354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    inoff, offset);
684d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					varStatus = DMSTAT_FAIL;
685d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				} else if (inlen != length) {
686354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
687354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Length NOT correct! (%d vs %d)\n",
688354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    inlen, length);
689d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					varStatus = DMSTAT_FAIL;
690d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				}
691d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
692d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_END(varStatus);
693d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
694d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
695d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
696d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
697354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
698354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
699354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
700d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
701d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
702d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
703d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
704bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
705d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
706d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_EVENT_READ
707d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: no event
708d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
709d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_READ_BASE + 9)) {
710d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
711d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
712d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
713354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		off_t inoff = PAGEALIGN(TMP_FILELEN / 4);
714d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = PAGEALIGN(DUMMY_STRLEN);
715d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
716d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
717d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
718d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
719d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
720d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_INVALID;
721d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
722d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_CONTINUE;
723d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
724d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_offset = 0;
725d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = DUMMY_STRLEN;
726d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_READ;
727d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
728d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
729d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
730d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
731d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
732d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
733d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
734d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
735d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
736354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
737354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
738354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
739354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
740354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
741d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
742d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
743d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
744d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
745354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
746354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
747354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
748d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
749d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
750d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
751354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
752354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDONLY, inoff, (long)inlen, 1);
753d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
754d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
755d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
756354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMVAR_END(DMVAR_CHKPASSEXP
757354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  (0, rc, eventExpected, eventReceived));
758d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
759d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
760d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
761d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
762354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
763354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
764354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
765d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
766d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
767d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
768d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
769bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
770d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
771d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - no regions
772d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: no event
773d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
774d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_WRITE_BASE + 1)) {
775d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
776d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
777d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
778d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		off_t inoff = 0;
779d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = DUMMY_STRLEN;
780d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
781d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
782d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_INVALID;
783d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
784d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_INVALID;
785d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
786d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
787d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
788d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
789d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
790d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
791d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
792d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
793d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
794d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = close(fd)) == -1) {
795d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
796d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
797d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
798d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
799354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
800354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
801354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
802d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
803d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
804d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
805354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
806354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDWR, inoff, (long)inlen, 1);
807d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
808d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
809d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
810354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMVAR_END(DMVAR_CHKPASSEXP
811354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  (0, rc, eventExpected, eventReceived));
812d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
813d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
814d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
815d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
816354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
817354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
818354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
819d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
820d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
821d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
822d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
823bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
824d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
825d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_REGION_READ
826d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: no event
827d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
828d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_WRITE_BASE + 2)) {
829d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
830d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
831d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
832d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		off_t inoff = 0;
833d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = DUMMY_STRLEN;
834d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
835d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
836d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
837d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
838d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
839d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_INVALID;
840d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
841d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_INVALID;
842d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
843d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_offset = 0;
844d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
845d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_READ;
846d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
847d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
848d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
849d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
850d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
851d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
852d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
853d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
854d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
855354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
856354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
857354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
858354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
859354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
860d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
861d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
862d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
863d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
864354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
865354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
866354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
867d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
868d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
869d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
870354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
871354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDWR, inoff, (long)inlen, 1);
872d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
873d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
874d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
875354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMVAR_END(DMVAR_CHKPASSEXP
876354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  (0, rc, eventExpected, eventReceived));
877d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
878d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
879d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
880d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
881354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
882354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
883354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
884d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
885d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
886d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
887d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
888bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
889d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
890d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_REGION_TRUNCATE
891d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: no event
892d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
893d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_WRITE_BASE + 3)) {
894d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
895d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
896d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
897d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		off_t inoff = 0;
898d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = DUMMY_STRLEN;
899d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
900d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
901d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
902d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
903d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
904d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_INVALID;
905d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
906d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_INVALID;
907d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
908d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_offset = 0;
909d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
910d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_TRUNCATE;
911d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
912d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
913d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
914d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
915d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
916d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
917d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
918d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
919d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
920354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
921354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
922354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
923354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
924354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
925d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
926d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
927d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
928d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
929354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
930354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
931354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
932d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
933d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
934d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
935354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
936354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDWR, inoff, (long)inlen, 1);
937d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
938d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
939d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
940354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMVAR_END(DMVAR_CHKPASSEXP
941354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  (0, rc, eventExpected, eventReceived));
942d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
943d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
944d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
945d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
946354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
947354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
948354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
949d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
950d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
951d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
952d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
953bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
954d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
955d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_EVENT_WRITE, DM_RESP_CONTINUE
956d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: DM_EVENT_WRITE
957d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
958d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_WRITE_BASE + 4)) {
959d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
960d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
961d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
962d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		off_t inoff = PAGEALIGN(0);
963d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = PAGEALIGN(DUMMY_STRLEN);
964d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
965d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int varStatus;
966d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
967d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
968d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
969d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
970d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_WRITE;
971d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
972d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_CONTINUE;
973d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
974d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_offset = 0;
975d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
976d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_WRITE;
977d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
978d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
979d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
980d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
981d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
982d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
983d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
984d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
985d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
986354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
987354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
988354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
989354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
990354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
991d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
992d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
993d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
994d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
995354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
996354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
997354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
998d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
999d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
1000d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
1001354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
1002354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDWR, inoff, (long)inlen, 1);
1003d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
1004d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
1005d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
1006354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if ((varStatus =
1007354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     DMVAR_CHKPASSEXP(0, rc, eventExpected,
1008354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      eventReceived)) == DMSTAT_PASS) {
1009d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				if (inoff != offset) {
1010354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
1011354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Offset NOT correct! (%d vs %d)\n",
1012354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    inoff, offset);
1013d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					varStatus = DMSTAT_FAIL;
1014d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				} else if (inlen != length) {
1015354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
1016354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Length NOT correct! (%d vs %d)\n",
1017354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    inlen, length);
1018d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					varStatus = DMSTAT_FAIL;
1019d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				}
1020d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1021d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_END(varStatus);
1022d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1023d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
1024d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
1025d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
1026354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
1027354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
1028354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
1029d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1030d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
1031d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1032d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
1033bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
1034d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
1035d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_EVENT_WRITE, DM_RESP_ABORT
1036d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: DM_EVENT_WRITE
1037d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
1038d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_WRITE_BASE + 5)) {
1039d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
1040d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
1041d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
1042d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		off_t inoff = PAGEALIGN(0);
1043d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = PAGEALIGN(DUMMY_STRLEN);
1044d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
1045d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int varStatus;
1046d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
1047d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
1048d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1049d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
1050d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_WRITE;
1051d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
1052d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_ABORT;
1053d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
1054d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_offset = 0;
1055d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
1056d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_WRITE;
1057d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1058d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
1059d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
1060d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
1061d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
1062d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1063d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1064d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
1065d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1066354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
1067354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
1068354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
1069354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
1070354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
1071d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
1072d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1073d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1074d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
1075354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
1076354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
1077354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
1078d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
1079d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
1080d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
1081354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
1082354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDWR, inoff, (long)inlen, 0);
1083d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
1084d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
1085d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
1086354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if ((varStatus =
1087354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     DMVAR_CHKPASSEXP(0, rc, eventExpected,
1088354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      eventReceived)) == DMSTAT_PASS) {
1089d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				if (inoff != offset) {
1090354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
1091354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Offset NOT correct! (%d vs %d)\n",
1092354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    inoff, offset);
1093d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					varStatus = DMSTAT_FAIL;
1094d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				} else if (inlen != length) {
1095354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
1096354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Length NOT correct! (%d vs %d)\n",
1097354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    inlen, length);
1098d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					varStatus = DMSTAT_FAIL;
1099d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				}
1100d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1101d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_END(varStatus);
1102d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1103d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
1104d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
1105d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
1106354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
1107354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
1108354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
1109d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1110d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
1111d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1112d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
1113bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
1114d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
1115d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_EVENT_WRITE
1116d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: no event
1117d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
1118d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_WRITE_BASE + 6)) {
1119d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
1120d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
1121d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
1122d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		off_t inoff = PAGEALIGN(0);
1123d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = PAGEALIGN(DUMMY_STRLEN);
1124d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
1125d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
1126d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
1127d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1128d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
1129d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_INVALID;
1130d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
1131d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_CONTINUE;
1132d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
1133354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		Regions[0].rg_offset = TMP_FILELEN / 2;
1134d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
1135d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_WRITE;
1136d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1137d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
1138d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
1139d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
1140d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
1141d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1142d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1143d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
1144d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1145354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
1146354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
1147354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
1148354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
1149354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
1150d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
1151d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1152d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1153d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
1154354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
1155354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
1156354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
1157d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
1158d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
1159d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
1160354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
1161354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDWR, inoff, (long)inlen, 1);
1162d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
1163d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
1164d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
1165354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMVAR_END(DMVAR_CHKPASSEXP
1166354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  (0, rc, eventExpected, eventReceived));
1167d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1168d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
1169d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
1170d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
1171354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
1172354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
1173354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
1174d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1175d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
1176d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1177d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
1178bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
1179d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
1180d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_EVENT_WRITE
1181d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: no event
1182d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
1183d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_WRITE_BASE + 7)) {
1184d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
1185d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
1186d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
1187354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		off_t inoff = PAGEALIGN(TMP_FILELEN / 4);
1188d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = PAGEALIGN(DUMMY_STRLEN);
1189d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
1190d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
1191d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
1192d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1193d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
1194d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_INVALID;
1195d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
1196d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_CONTINUE;
1197d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
1198354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		Regions[0].rg_offset = TMP_FILELEN / 2;
1199d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
1200d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_WRITE;
1201d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1202d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
1203d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
1204d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
1205d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
1206d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1207d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1208d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
1209d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1210354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
1211354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
1212354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
1213354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
1214354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
1215d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
1216d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1217d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1218d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
1219354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
1220354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
1221354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
1222d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
1223d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
1224d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
1225354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
1226354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDWR, inoff, (long)inlen, 1);
1227d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
1228d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
1229d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
1230354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMVAR_END(DMVAR_CHKPASSEXP
1231354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  (0, rc, eventExpected, eventReceived));
1232d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1233d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
1234d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
1235d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
1236354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
1237354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
1238354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
1239d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1240d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
1241d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1242d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
1243bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
1244d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
1245d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_EVENT_WRITE
1246d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: DM_EVENT_WRITE
1247d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
1248d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_WRITE_BASE + 8)) {
1249d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
1250d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
1251d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
1252354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		off_t inoff = PAGEALIGN(TMP_FILELEN / 4);
1253d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = PAGEALIGN(DUMMY_STRLEN);
1254d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
1255d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int varStatus;
1256d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
1257d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
1258d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1259d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
1260d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_WRITE;
1261d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
1262d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_CONTINUE;
1263d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
1264354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		Regions[0].rg_offset = TMP_FILELEN / 4;
1265d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = 0;
1266d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_WRITE;
1267d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1268d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
1269d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
1270d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
1271d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
1272d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1273d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1274d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
1275d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1276354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
1277354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
1278354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
1279354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
1280354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
1281d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
1282d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1283d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1284d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
1285354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
1286354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
1287354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
1288d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
1289d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
1290d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
1291354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
1292354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDWR, inoff, (long)inlen, 1);
1293d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
1294d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
1295d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
1296354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if ((varStatus =
1297354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     DMVAR_CHKPASSEXP(0, rc, eventExpected,
1298354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      eventReceived)) == DMSTAT_PASS) {
1299d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				if (inoff != offset) {
1300354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
1301354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Offset NOT correct! (%d vs %d)\n",
1302354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    inoff, offset);
1303d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					varStatus = DMSTAT_FAIL;
1304d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				} else if (inlen != length) {
1305354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
1306354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Length NOT correct! (%d vs %d)\n",
1307354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    inlen, length);
1308d13d74bbf207c2d01598c6fef092a75b93b07c71vapier					varStatus = DMSTAT_FAIL;
1309d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				}
1310d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1311d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_END(varStatus);
1312d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1313d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
1314d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
1315d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
1316354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
1317354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
1318354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
1319d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1320d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
1321d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1322d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
1323bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
1324d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	/*
1325d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * TEST    : mmap - one region, DM_EVENT_WRITE
1326d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 * EXPECTED: no event
1327d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	 */
1328d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (DMVAR_EXEC(MMAP_WRITE_BASE + 9)) {
1329d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int fd;
1330d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		void *hanp;
1331d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t hlen;
1332354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		off_t inoff = PAGEALIGN(TMP_FILELEN / 4);
1333d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		size_t inlen = PAGEALIGN(DUMMY_STRLEN);
1334d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_boolean_t exactflag;
1335d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		int numRegions;
1336d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		dm_region_t Regions[1];
1337d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1338d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Variation set up */
1339d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventExpected = DM_EVENT_INVALID;
1340d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventReceived = DM_EVENT_INVALID;
1341d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		eventResponse = DM_RESP_CONTINUE;
1342d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		numRegions = 1;
1343d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_offset = 0;
1344d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_size = DUMMY_STRLEN;
1345d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		Regions[0].rg_flags = DM_REGION_WRITE;
1346d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1347d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		sprintf(command, "cp %s %s", DummyTmp, DummyFile);
1348d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if ((rc = system(command)) == -1) {
1349d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* No clean up */
1350d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((fd = open(DummyFile, O_RDONLY)) == -1) {
1351d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1352d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1353d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			close(fd);
1354d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1355354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else
1356354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    if (((rc =
1357354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			  dm_set_region(sid, hanp, hlen, DM_NO_TOKEN,
1358354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					numRegions, Regions, &exactflag)) == -1)
1359354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			|| ((rc = close(fd)) == -1)) {
1360d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
1361d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			remove(DummyFile);
1362d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1363d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc == -1) {
1364354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
1365354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Unable to set up variation! (errno = %d)\n",
1366354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    errno);
1367d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMVAR_SKIP();
1368d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
1369d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation */
1370354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(command, "./%s %s %d %ld %ld %d", MMAPFILE_EXE,
1371354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DummyFile, O_RDWR, inoff, (long)inlen, 1);
1372d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "invoking %s\n", command);
1373d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = system(command);
1374d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			EVENT_DELIVERY_DELAY;
1375354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMVAR_END(DMVAR_CHKPASSEXP
1376354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  (0, rc, eventExpected, eventReceived));
1377d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1378d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* Variation clean up */
1379d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			rc = remove(DummyFile);
1380d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
1381354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_DEBUG,
1382354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "Unable to clean up variation! (errno = %d)\n",
1383354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    errno);
1384d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1385d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_handle_free(hanp, hlen);
1386d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1387d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
1388bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
1389d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	remove(DummyFile);
1390d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	remove(DummyTmp);
13912c28215423293e443469a07ae7011135d058b671Garrett Cooper
1392d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	rc = umount(mountPt);
1393d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (rc == -1) {
1394354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		DMLOG_PRINT(DMLVL_ERR, "umount failed! (rc = %d, errno = %d)\n",
1395354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    rc, errno);
1396d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
1397d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1398d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	pthread_join(tid, NULL);
1399d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1400d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	rc = dm_destroy_session(sid);
1401d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	if (rc == -1) {
1402354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		DMLOG_PRINT(DMLVL_ERR,
1403354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    "dm_destroy_session failed! (rc = %d, errno = %d)\n",
1404354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    rc, errno);
1405d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	}
1406d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1407d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	DMLOG_STOP();
14082c28215423293e443469a07ae7011135d058b671Garrett Cooper
14092c28215423293e443469a07ae7011135d058b671Garrett Cooper	tst_exit();
1410d13d74bbf207c2d01598c6fef092a75b93b07c71vapier}
1411d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1412d13d74bbf207c2d01598c6fef092a75b93b07c71vapiervoid *Thread(void *parm)
1413d13d74bbf207c2d01598c6fef092a75b93b07c71vapier{
1414d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	int rc;
1415d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	size_t dmMsgBufLen;
1416d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	dm_eventmsg_t *dmMsg;
1417d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	int bMounted = DM_FALSE;
1418d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	dm_eventtype_t type;
1419d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	dm_token_t token;
1420d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	dm_eventset_t events;
1421d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	dm_response_t response;
1422d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1423d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	do {
1424d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		/* Loop until message received (wait could be interrupted) */
1425d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		do {
1426d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "Waiting for event...\n");
1427d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dmMsgBufLen = 0;
1428d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1429354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = dm_get_events(sid, 1, DM_EV_WAIT, sizeof(dmMsgBuf),
1430354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					   dmMsgBuf, &dmMsgBufLen);
1431354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
1432354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "... dm_get_events returned %d (errno %d)\n",
1433354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    rc, errno);
1434d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} while ((rc == -1) && (errno == EINTR) && (dmMsgBufLen == 0));
1435d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1436d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (rc) {
1437354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_ERR,
1438354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "dm_get_events failed with rc = %d, errno = %d\n",
1439354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    rc, errno);
1440d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			dm_destroy_session(sid);
1441d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DM_EXIT();
1442d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
1443354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			dmMsg = (dm_eventmsg_t *) dmMsgBuf;
1444d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			token = dmMsg->ev_token;
1445d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			type = dmMsg->ev_type;
1446d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1447d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "Received message %d\n", type);
1448d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1449d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1450d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (type == DM_EVENT_MOUNT) {
1451d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			/* SPECIAL CASE: need to set disposition, events and response */
1452354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			dm_mount_event_t *me =
1453354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    DM_GET_VALUE(dmMsg, ev_data, dm_mount_event_t *);
1454d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			void *lhanp = DM_GET_VALUE(me, me_handle1, void *);
1455d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			size_t lhlen = DM_GET_LEN(me, me_handle1);
1456d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1457d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "Message is DM_EVENT_MOUNT\n");
1458d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMLOG_PRINT(DMLVL_DEBUG, "  Mode: %x\n", me->me_mode);
1459354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG, "  File system handle: %p\n",
1460354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    lhanp);
1461354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
1462354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "  File system handle length: %d\n", lhlen);
1463354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG, "  Mountpoint handle: %p\n",
1464354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    DM_GET_VALUE(me, me_handle2, void *));
1465354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
1466354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "  Mountpoint handle length: %d\n",
1467354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    DM_GET_LEN(me, me_handle2));
1468354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG, "  Mountpoint path: %s\n",
1469354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    DM_GET_VALUE(me, me_name1, char *));
1470354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG, "  Media designator: %s\n",
1471354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    DM_GET_VALUE(me, me_name2, char *));
1472354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG, "  Root handle: %p\n",
1473354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    DM_GET_VALUE(me, me_roothandle, void *));
1474354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG, "  Root handle length: %d\n",
1475354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    DM_GET_LEN(me, me_roothandle));
1476354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
1477354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			bMounted = dm_handle_is_valid(lhanp, lhlen);
1478354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
1479354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = dm_request_right(sid, lhanp, lhlen, token,
1480354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      DM_RR_WAIT, DM_RIGHT_EXCL);
1481d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
1482354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_ERR,
1483354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "dm_request_right failed! (rc = %d, errno = %d)\n",
1484354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    rc, errno);
1485d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				dm_destroy_session(sid);
1486d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				DM_EXIT();
1487d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1488d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1489d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMEV_ZERO(events);
1490d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMEV_SET(DM_EVENT_PREUNMOUNT, events);
1491d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMEV_SET(DM_EVENT_UNMOUNT, events);
1492d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMEV_SET(DM_EVENT_READ, events);
1493d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMEV_SET(DM_EVENT_WRITE, events);
1494354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = dm_set_disp(sid, lhanp, lhlen, token, &events,
1495354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 DM_EVENT_MAX);
1496d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
1497354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_ERR,
1498354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "dm_set_disp failed! (rc = %d, errno = %d)\n",
1499354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    rc, errno);
1500d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				dm_destroy_session(sid);
1501d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				DM_EXIT();
1502d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1503d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1504d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMEV_ZERO(events);
1505d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMEV_SET(DM_EVENT_PREUNMOUNT, events);
1506d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			DMEV_SET(DM_EVENT_UNMOUNT, events);
1507354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = dm_set_eventlist(sid, lhanp, lhlen, token, &events,
1508354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      DM_EVENT_MAX);
1509d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
1510354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_ERR,
1511354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "dm_set_eventlist failed! (rc = %d, errno = %d)\n",
1512354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    rc, errno);
1513d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				dm_destroy_session(sid);
1514d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				DM_EXIT();
1515d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1516d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1517354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = dm_release_right(sid, lhanp, lhlen, token);
1518d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (rc == -1) {
1519354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				DMLOG_PRINT(DMLVL_ERR,
1520354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    "dm_request_right failed! (rc = %d, errno = %d)\n",
1521354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    rc, errno);
1522d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				dm_destroy_session(sid);
1523d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				DM_EXIT();
1524d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1525d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1526d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			response = DM_RESP_CONTINUE;
1527d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else if (type == DM_EVENT_UNMOUNT) {
1528354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			dm_namesp_event_t *nse =
1529354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    DM_GET_VALUE(dmMsg, ev_data, dm_namesp_event_t *);
1530d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			if (nse->ne_retcode == 0) {
1531d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				bMounted = DM_FALSE;
1532d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1533d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1534d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			response = DM_RESP_CONTINUE;
1535d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		} else {
1536d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			eventReceived = type;
1537d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1538d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			switch (type) {
1539d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			case DM_EVENT_PREUNMOUNT:
1540d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				response = DM_RESP_CONTINUE;
1541d13d74bbf207c2d01598c6fef092a75b93b07c71vapier				break;
15422c28215423293e443469a07ae7011135d058b671Garrett Cooper
1543d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			case DM_EVENT_READ:
1544354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				{
1545354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					dm_data_event_t *de =
1546354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    DM_GET_VALUE(dmMsg, ev_data,
1547354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							 dm_data_event_t *);
1548354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					hanp1 =
1549354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    DM_GET_VALUE(de, de_handle, void *);
1550354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					hlen1 = DM_GET_LEN(de, de_handle);
1551354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					offset = de->de_offset;
1552354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					length = de->de_length;
1553354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
1554354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_DEBUG,
1555354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Message is DM_EVENT_READ\n");
1556354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_DEBUG,
1557354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "  Handle: %p\n", hanp1);
1558354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_DEBUG,
1559354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "  Handle length: %d\n",
1560354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    hlen1);
1561354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_DEBUG,
1562354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "  Offset: %d\n", offset);
1563354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_DEBUG,
1564354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "  Length: %d\n", length);
1565354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
1566354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					response = eventResponse;
1567354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					break;
1568354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
1569d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1570d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			case DM_EVENT_WRITE:
1571354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				{
1572354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					dm_data_event_t *de =
1573354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    DM_GET_VALUE(dmMsg, ev_data,
1574354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							 dm_data_event_t *);
1575354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					hanp1 =
1576354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    DM_GET_VALUE(de, de_handle, void *);
1577354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					hlen1 = DM_GET_LEN(de, de_handle);
1578354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					offset = de->de_offset;
1579354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					length = de->de_length;
1580354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
1581354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_DEBUG,
1582354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Message is DM_EVENT_WRITE\n");
1583354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_DEBUG,
1584354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "  Handle: %p\n", hanp1);
1585354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_DEBUG,
1586354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "  Handle length: %d\n",
1587354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    hlen1);
1588354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_DEBUG,
1589354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "  Offset: %d\n", offset);
1590354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_DEBUG,
1591354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "  Length: %d\n", length);
1592354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
1593354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					response = eventResponse;
1594354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					break;
1595354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
1596d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1597d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			default:
1598354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				{
1599354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					DMLOG_PRINT(DMLVL_ERR,
1600354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    "Message is unexpected!\n");
1601354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					response = DM_RESP_ABORT;
1602354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					break;
1603354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
1604d13d74bbf207c2d01598c6fef092a75b93b07c71vapier			}
1605d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1606d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1607d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		if (response != DM_RESP_INVALID) {
1608354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			DMLOG_PRINT(DMLVL_DEBUG,
1609354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    "Responding to message %d with %d\n", type,
1610354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    response);
1611354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = dm_respond_event(sid, token, response,
1612354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      response ==
1613354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      DM_RESP_ABORT ? ABORT_ERRNO : 0,
1614354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      0, NULL);
1615d13d74bbf207c2d01598c6fef092a75b93b07c71vapier		}
1616d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	} while (bMounted);
1617d13d74bbf207c2d01598c6fef092a75b93b07c71vapier
1618d13d74bbf207c2d01598c6fef092a75b93b07c71vapier	pthread_exit(0);
1619ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
1620