diff --git a/tasks/mm0/include/file.h b/tasks/mm0/include/file.h index 9330d69..f6d694a 100644 --- a/tasks/mm0/include/file.h +++ b/tasks/mm0/include/file.h @@ -17,5 +17,6 @@ int sys_read(l4id_t sender, int fd, void *buf, int count); int sys_write(l4id_t sender, int fd, void *buf, int count); int sys_lseek(l4id_t sender, int fd, off_t offset, int whence); +#define vm_file_to_vnum(f) (*(unsigned long *)((f)->priv_data)) extern struct list_head vm_file_list; #endif /* __MM0_FILE_H__ */ diff --git a/tasks/mm0/include/vm_area.h b/tasks/mm0/include/vm_area.h index 3bff25e..54ef3ad 100644 --- a/tasks/mm0/include/vm_area.h +++ b/tasks/mm0/include/vm_area.h @@ -130,7 +130,6 @@ struct vm_object { /* In memory representation of either a vfs file, a device. */ struct vm_file { - unsigned long vnum; unsigned long length; unsigned int type; struct list_head list; diff --git a/tasks/mm0/src/file.c b/tasks/mm0/src/file.c index 670c4c4..e2a486f 100644 --- a/tasks/mm0/src/file.c +++ b/tasks/mm0/src/file.c @@ -13,6 +13,7 @@ #include #include #include +#include /* List of all generic files */ LIST_HEAD(vm_file_list); @@ -92,7 +93,7 @@ int vfs_receive_sys_open(l4id_t sender, l4id_t opener, int fd, /* Check if that vm_file is already in the list */ list_for_each_entry(vmfile, &vm_file_list, list) { - if (vmfile->vnum == vnum) { + if (vm_file_to_vnum(vmfile) == vnum) { /* Add a reference to it from the task */ t->fd[fd].vmfile = vmfile; vmfile->vm_obj.refcnt++; @@ -105,7 +106,7 @@ int vfs_receive_sys_open(l4id_t sender, l4id_t opener, int fd, return (int)vmfile; /* Initialise and add it to global list */ - vmfile->vnum = vnum; + vm_file_to_vnum(vmfile) = vnum; vmfile->length = length; vmfile->vm_obj.pager = &file_pager; list_add(&vmfile->vm_obj.list, &vm_file_list); @@ -172,7 +173,7 @@ int read_file_pages(struct vm_file *vmfile, unsigned long pfn_start, if (IS_ERR(page)) { printf("%s: %s:Could not read page %d " "from file with vnum: 0x%x\n", __TASKNAME__, - __FUNCTION__, f_offset, vmfile->vnum); + __FUNCTION__, f_offset, vm_file_to_vnum(vmfile)); return (int)page; } } diff --git a/tasks/mm0/src/pagers.c b/tasks/mm0/src/pagers.c index 1e01e3b..e2fbe9d 100644 --- a/tasks/mm0/src/pagers.c +++ b/tasks/mm0/src/pagers.c @@ -88,7 +88,8 @@ struct page *file_page_in(struct vm_object *vm_obj, unsigned long page_offset) l4_map(paddr, vaddr, 1, MAP_USR_RW_FLAGS, VFS_TID); /* Syscall to vfs to read into the page. */ - if ((err = vfs_read(f->vnum, page_offset, 1, vaddr)) < 0) + if ((err = vfs_read(vm_file_to_vnum(f), page_offset, + 1, vaddr)) < 0) goto out_err; /* Unmap it from vfs */