diff options
| author | manuel <manuel@mausz.at> | 2012-06-21 22:09:14 +0200 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2012-06-21 22:09:14 +0200 |
| commit | a77555afd3fbf5d3e32099772c664d0e6d5260e0 (patch) | |
| tree | d566558046a58a89c05ca85a9ff4cc603e8d1e98 | |
| parent | 4fd6a30d164874fd660aacc36b44842e14bba208 (diff) | |
| download | progos-a77555afd3fbf5d3e32099772c664d0e6d5260e0.tar.gz progos-a77555afd3fbf5d3e32099772c664d0e6d5260e0.tar.bz2 progos-a77555afd3fbf5d3e32099772c664d0e6d5260e0.zip | |
add locking around file syscalls inside page table
| -rw-r--r-- | vm/page.c | 5 |
1 files changed, 5 insertions, 0 deletions
| @@ -121,7 +121,9 @@ page_load (struct page_table_entry *pte) | |||
| 121 | return true; | 121 | return true; |
| 122 | 122 | ||
| 123 | data = &pte->segment; | 123 | data = &pte->segment; |
| 124 | process_lock_filesys (); | ||
| 124 | file_seek (data->file, data->ofs); | 125 | file_seek (data->file, data->ofs); |
| 126 | process_unlock_filesys (); | ||
| 125 | 127 | ||
| 126 | /* Get a page of memory. */ | 128 | /* Get a page of memory. */ |
| 127 | uint8_t *kpage = palloc_get_page (PAL_USER); | 129 | uint8_t *kpage = palloc_get_page (PAL_USER); |
| @@ -129,12 +131,15 @@ page_load (struct page_table_entry *pte) | |||
| 129 | return false; | 131 | return false; |
| 130 | 132 | ||
| 131 | /* Load this page. */ | 133 | /* Load this page. */ |
| 134 | process_lock_filesys (); | ||
| 132 | if (file_read (data->file, kpage, data->read_bytes) | 135 | if (file_read (data->file, kpage, data->read_bytes) |
| 133 | != (int) data->read_bytes) | 136 | != (int) data->read_bytes) |
| 134 | { | 137 | { |
| 135 | palloc_free_page (kpage); | 138 | palloc_free_page (kpage); |
| 139 | process_unlock_filesys (); | ||
| 136 | return false; | 140 | return false; |
| 137 | } | 141 | } |
| 142 | process_unlock_filesys (); | ||
| 138 | memset (kpage + data->read_bytes, 0, PGSIZE - data->read_bytes); | 143 | memset (kpage + data->read_bytes, 0, PGSIZE - data->read_bytes); |
| 139 | 144 | ||
| 140 | /* Add the page to the process's address space. */ | 145 | /* Add the page to the process's address space. */ |
