Changes in / [547c37a:7b712b60] in mainline
- Files:
-
- 36 deleted
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/Makefile.common
r547c37a r7b712b60 97 97 $(USPACE_PATH)/srv/fs/tmpfs/tmpfs \ 98 98 $(USPACE_PATH)/srv/fs/fat/fat \ 99 $(USPACE_PATH)/srv/fs/ext2fs/ext2fs \100 99 $(USPACE_PATH)/srv/taskmon/taskmon \ 101 100 $(USPACE_PATH)/srv/hw/netif/ne2000/ne2000 \ … … 115 114 rootvirt \ 116 115 test1 \ 117 test2 \ 118 test3 116 test2 119 117 120 118 RD_DRV_CFG = … … 136 134 137 135 RD_APPS_NON_ESSENTIAL = \ 138 $(USPACE_PATH)/app/blkdump/blkdump \139 $(USPACE_PATH)/app/bnchmark/bnchmark \140 136 $(USPACE_PATH)/app/dltest/dltest \ 141 137 $(USPACE_PATH)/app/dltest2/dltest2 \ 142 138 $(USPACE_PATH)/app/dload/dload \ 143 139 $(USPACE_PATH)/app/edit/edit \ 144 $(USPACE_PATH)/app/ext2info/ext2info \145 140 $(USPACE_PATH)/app/kill/kill \ 146 141 $(USPACE_PATH)/app/killall/killall \ … … 150 145 $(USPACE_PATH)/app/taskdump/taskdump \ 151 146 $(USPACE_PATH)/app/tester/tester \ 152 $(USPACE_PATH)/app/testread/testread \153 147 $(USPACE_PATH)/app/tetris/tetris \ 154 148 $(USPACE_PATH)/app/trace/trace \ -
kernel/generic/src/interrupt/interrupt.c
r547c37a r7b712b60 177 177 (void *) istate_get_pc(istate)); 178 178 179 istate_decode(istate);180 179 stack_trace_istate(istate); 181 180 -
uspace/Makefile
r547c37a r7b712b60 35 35 DIRS = \ 36 36 app/bdsh \ 37 app/blkdump \38 app/bnchmark \39 37 app/edit \ 40 app/ext2info \41 38 app/getterm \ 42 39 app/init \ … … 50 47 app/taskdump \ 51 48 app/tester \ 52 app/testread \53 49 app/tetris \ 54 50 app/trace \ … … 76 72 srv/fs/tmpfs \ 77 73 srv/fs/devfs \ 78 srv/fs/ext2fs \79 74 srv/hid/adb_mouse \ 80 75 srv/hid/char_mouse \ … … 95 90 drv/rootvirt \ 96 91 drv/test1 \ 97 drv/test2 \ 98 drv/test3 92 drv/test2 99 93 100 94 ## Networking … … 154 148 lib/drv \ 155 149 lib/packet \ 156 lib/net \ 157 lib/ext2 150 lib/net 158 151 159 152 LIBC_BUILD = $(addsuffix .build,$(LIBC)) -
uspace/Makefile.common
r547c37a r7b712b60 108 108 LIBCLUI_PREFIX = $(LIB_PREFIX)/clui 109 109 110 LIBEXT2_PREFIX = $(LIB_PREFIX)/ext2111 112 110 LIBDRV_PREFIX = $(LIB_PREFIX)/drv 113 111 LIBPACKET_PREFIX = $(LIB_PREFIX)/packet -
uspace/app/bdsh/cmds/modules/mount/mount.c
r547c37a r7b712b60 51 51 { 52 52 static char helpfmt[] = 53 "Usage: %s <fstype> <mp> [dev][<moptions>]\n";53 "Usage: %s <fstype> <mp> <dev> [<moptions>]\n"; 54 54 if (level == HELP_SHORT) { 55 55 printf("'%s' mounts a file system.\n", cmdname); … … 66 66 unsigned int argc; 67 67 const char *mopts = ""; 68 const char *dev = "";69 68 int rc, c, opt_ind; 70 69 … … 80 79 } 81 80 82 if ((argc < 3) || (argc > 5)) {81 if ((argc < 4) || (argc > 5)) { 83 82 printf("%s: invalid number of arguments. Try `mount --help'\n", 84 83 cmdname); 85 84 return CMD_FAILURE; 86 85 } 87 if (argc > 3)88 dev = argv[3];89 86 if (argc == 5) 90 87 mopts = argv[4]; 91 88 92 rc = mount(argv[1], argv[2], dev, mopts, 0);89 rc = mount(argv[1], argv[2], argv[3], mopts, 0); 93 90 if (rc != EOK) { 94 91 printf("Unable to mount %s filesystem to %s on %s (rc=%d)\n", -
uspace/app/redir/redir.c
r547c37a r7b712b60 49 49 static void usage(void) 50 50 { 51 fprintf(stderr,"Usage: %s [-i <stdin>] [-o <stdout>] [-e <stderr>] -- <cmd> [args ...]\n",51 printf("Usage: %s [-i <stdin>] [-o <stdout>] [-e <stderr>] -- <cmd> [args ...]\n", 52 52 NAME); 53 53 } … … 83 83 args = (const char **) calloc(argc + 1, sizeof(char *)); 84 84 if (!args) { 85 fprintf(stderr,"No memory available\n");85 printf("No memory available\n"); 86 86 return 0; 87 87 } … … 98 98 99 99 if (rc != EOK) { 100 fprintf(stderr,"%s: Error spawning %s (%s)\n", NAME, argv[0],100 printf("%s: Error spawning %s (%s)\n", NAME, argv[0], 101 101 str_error(rc)); 102 return 0;103 102 } 104 103 -
uspace/app/tester/Makefile
r547c37a r7b712b60 29 29 30 30 USPACE_PREFIX = ../.. 31 LIBS = $(LIBBLOCK_PREFIX)/libblock.a $(LIBEXT2_PREFIX)/libext2.a32 EXTRA_CFLAGS = -I$(LIBBLOCK_PREFIX) -I$(LIBEXT2_PREFIX)33 31 BINARY = tester 34 32 35 33 SOURCES = \ 36 34 tester.c \ 37 util.c \38 35 thread/thread1.c \ 39 36 print/print1.c \ … … 56 53 mm/malloc3.c \ 57 54 devs/devman1.c \ 58 devs/devman2.c \59 55 hw/misc/virtchar1.c \ 60 hw/serial/serial1.c \ 61 libext2/libext2_1.c 56 hw/serial/serial1.c 62 57 63 58 include $(USPACE_PREFIX)/Makefile.common -
uspace/app/tester/tester.c
r547c37a r7b712b60 66 66 #include "hw/serial/serial1.def" 67 67 #include "hw/misc/virtchar1.def" 68 #include "libext2/libext2_1.def"69 68 #include "devs/devman1.def" 70 #include "devs/devman2.def"71 69 {NULL, NULL, NULL, false} 72 70 }; -
uspace/app/tester/tester.h
r547c37a r7b712b60 99 99 extern const char *test_serial1(void); 100 100 extern const char *test_virtchar1(void); 101 extern const char *test_libext2_1(void);102 101 extern const char *test_devman1(void); 103 extern const char *test_devman2(void);104 102 105 103 extern test_t tests[]; -
uspace/drv/rootvirt/devices.def
r547c37a r7b712b60 21 21 .match_id = "virtual&test1" 22 22 }, 23 {24 .name = "test3",25 .match_id = "virtual&test3"26 },27 23 #endif -
uspace/lib/block/libblock.c
r547c37a r7b712b60 2 2 * Copyright (c) 2008 Jakub Jermar 3 3 * Copyright (c) 2008 Martin Decky 4 * Copyright (c) 2011 Martin Sucha5 4 * All rights reserved. 6 5 * … … 828 827 } 829 828 830 /** Read bytes directly from the device (bypass cache)831 *832 * @param devmap_handle Device handle of the block device.833 * @param abs_offset Absolute offset in bytes where to start reading834 * @param bytes Number of bytes to read835 * @param data Buffer that receives the data836 *837 * @return EOK on success or negative error code on failure.838 */839 int block_read_bytes_direct(devmap_handle_t devmap_handle, aoff64_t abs_offset,840 size_t bytes, void *data)841 {842 int rc;843 size_t phys_block_size;844 size_t buf_size;845 void *buffer;846 aoff64_t first_block;847 aoff64_t last_block;848 size_t blocks;849 size_t offset;850 851 rc = block_get_bsize(devmap_handle, &phys_block_size);852 if (rc != EOK) {853 return rc;854 }855 856 /* calculate data position and required space */857 first_block = abs_offset / phys_block_size;858 offset = abs_offset % phys_block_size;859 last_block = (abs_offset + bytes - 1) / phys_block_size;860 blocks = last_block - first_block + 1;861 buf_size = blocks * phys_block_size;862 863 /* read the data into memory */864 buffer = malloc(buf_size);865 if (buffer == NULL) {866 return ENOMEM;867 }868 869 rc = block_read_direct(devmap_handle, first_block, blocks, buffer);870 if (rc != EOK) {871 free(buffer);872 return rc;873 }874 875 /* copy the data from the buffer */876 memcpy(data, buffer + offset, bytes);877 free(buffer);878 879 return EOK;880 }881 882 829 /** Read blocks from block device. 883 830 * -
uspace/lib/block/libblock.h
r547c37a r7b712b60 2 2 * Copyright (c) 2008 Jakub Jermar 3 3 * Copyright (c) 2008 Martin Decky 4 * Copyright (c) 2011 Martin Sucha5 4 * All rights reserved. 6 5 * … … 114 113 extern int block_get_nblocks(devmap_handle_t, aoff64_t *); 115 114 extern int block_read_direct(devmap_handle_t, aoff64_t, size_t, void *); 116 extern int block_read_bytes_direct(devmap_handle_t, aoff64_t, size_t, void *);117 115 extern int block_write_direct(devmap_handle_t, aoff64_t, size_t, const void *); 118 116 -
uspace/srv/vfs/vfs.h
r547c37a r7b712b60 176 176 vfs_pair_t *, ...); 177 177 extern int vfs_open_node_internal(vfs_lookup_res_t *); 178 extern int vfs_close_internal(vfs_file_t *); 178 179 179 180 extern bool vfs_nodes_init(void); -
uspace/srv/vfs/vfs_file.c
r547c37a r7b712b60 79 79 for (i = 0; i < MAX_OPEN_FILES; i++) { 80 80 if (FILES[i]) { 81 (void) vfs_close_internal(FILES[i]); 81 82 (void) vfs_fd_free(i); 82 83 } … … 107 108 } 108 109 109 /** Close the file in the endpoint FS server. */110 static int vfs_file_close_remote(vfs_file_t *file)111 {112 ipc_call_t answer;113 aid_t msg;114 sysarg_t rc;115 int phone;116 117 assert(!file->refcnt);118 119 phone = vfs_grab_phone(file->node->fs_handle);120 msg = async_send_2(phone, VFS_OUT_CLOSE, file->node->devmap_handle,121 file->node->index, &answer);122 async_wait_for(msg, &rc);123 vfs_release_phone(file->node->fs_handle, phone);124 125 return IPC_GET_ARG1(answer);126 }127 128 129 110 /** Increment reference count of VFS file structure. 130 111 * … … 144 125 * decremented. 145 126 */ 146 static int vfs_file_delref(vfs_file_t *file) 147 { 148 int rc = EOK; 149 127 static void vfs_file_delref(vfs_file_t *file) 128 { 150 129 assert(fibril_mutex_is_locked(&VFS_DATA->lock)); 151 130 152 131 if (file->refcnt-- == 1) { 153 132 /* 154 * Lost the last reference to a file, need to close it in the155 * endpoint FS and drop our referenceto the underlying VFS node.133 * Lost the last reference to a file, need to drop our reference 134 * to the underlying VFS node. 156 135 */ 157 rc = vfs_file_close_remote(file);158 136 vfs_node_delref(file->node); 159 137 free(file); 160 138 } 161 162 return rc;163 139 } 164 140 … … 225 201 int vfs_fd_free(int fd) 226 202 { 227 int rc;228 229 203 if (!vfs_files_init()) 230 204 return ENOMEM; … … 236 210 } 237 211 238 rc =vfs_file_delref(FILES[fd]);212 vfs_file_delref(FILES[fd]); 239 213 FILES[fd] = NULL; 240 214 fibril_mutex_unlock(&VFS_DATA->lock); 241 215 242 return rc;216 return EOK; 243 217 } 244 218 -
uspace/srv/vfs/vfs_ops.c
r547c37a r7b712b60 717 717 } 718 718 719 int vfs_close_internal(vfs_file_t *file) 720 { 721 /* 722 * Lock the open file structure so that no other thread can manipulate 723 * the same open file at a time. 724 */ 725 fibril_mutex_lock(&file->lock); 726 727 if (file->refcnt <= 1) { 728 /* Only close the file on the destination FS server 729 if there are no more file descriptors (except the 730 present one) pointing to this file. */ 731 732 int fs_phone = vfs_grab_phone(file->node->fs_handle); 733 734 /* Make a VFS_OUT_CLOSE request at the destination FS server. */ 735 aid_t msg; 736 ipc_call_t answer; 737 msg = async_send_2(fs_phone, VFS_OUT_CLOSE, 738 file->node->devmap_handle, file->node->index, &answer); 739 740 /* Wait for reply from the FS server. */ 741 sysarg_t rc; 742 async_wait_for(msg, &rc); 743 744 vfs_release_phone(file->node->fs_handle, fs_phone); 745 fibril_mutex_unlock(&file->lock); 746 747 return IPC_GET_ARG1(answer); 748 } 749 750 fibril_mutex_unlock(&file->lock); 751 return EOK; 752 } 753 719 754 void vfs_close(ipc_callid_t rid, ipc_call_t *request) 720 755 { 721 756 int fd = IPC_GET_ARG1(*request); 722 int ret; 723 757 758 /* Lookup the file structure corresponding to the file descriptor. */ 759 vfs_file_t *file = vfs_file_get(fd); 760 if (!file) { 761 async_answer_0(rid, ENOENT); 762 return; 763 } 764 765 int ret = vfs_close_internal(file); 766 if (ret != EOK) 767 async_answer_0(rid, ret); 768 769 vfs_file_put(file); 724 770 ret = vfs_fd_free(fd); 725 771 async_answer_0(rid, ret); … … 1323 1369 fibril_mutex_lock(&oldfile->lock); 1324 1370 1325 /* Make sure newfd is closed. */ 1326 (void) vfs_fd_free(newfd); 1371 /* Lookup an open file structure possibly corresponding to newfd. */ 1372 vfs_file_t *newfile = vfs_file_get(newfd); 1373 if (newfile) { 1374 /* Close the originally opened file. */ 1375 int ret = vfs_close_internal(newfile); 1376 if (ret != EOK) { 1377 fibril_mutex_unlock(&oldfile->lock); 1378 vfs_file_put(oldfile); 1379 vfs_file_put(newfile); 1380 async_answer_0(rid, ret); 1381 return; 1382 } 1383 1384 ret = vfs_fd_free(newfd); 1385 if (ret != EOK) { 1386 fibril_mutex_unlock(&oldfile->lock); 1387 vfs_file_put(oldfile); 1388 vfs_file_put(newfile); 1389 async_answer_0(rid, ret); 1390 return; 1391 } 1392 vfs_file_put(newfile); 1393 } 1327 1394 1328 1395 /* Assign the old file to newfd. */
Note:
See TracChangeset
for help on using the changeset viewer.