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