Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 2618 → Rev 2619

/trunk/uspace/srv/vfs/vfs.c
59,7 → 59,7
* The connection was opened via the IPC_CONNECT_ME_TO call.
* This call needs to be answered.
*/
ipc_answer_fast_0(iid, EOK);
ipc_answer_0(iid, EOK);
 
/*
* Here we enter the main connection fibril loop.
103,7 → 103,7
case VFS_UNLINK:
case VFS_RENAME:
default:
ipc_answer_fast_0(callid, ENOTSUP);
ipc_answer_0(callid, ENOTSUP);
break;
}
}
/trunk/uspace/srv/vfs/vfs_open.c
46,7 → 46,7
void vfs_open(ipc_callid_t rid, ipc_call_t *request)
{
if (!vfs_files_init()) {
ipc_answer_fast_0(rid, ENOMEM);
ipc_answer_0(rid, ENOMEM);
return;
}
 
60,11 → 60,10
size_t size;
 
ipc_callid_t callid;
ipc_call_t call;
 
if (!ipc_data_receive(&callid, &call, NULL, &size)) {
ipc_answer_fast_0(callid, EINVAL);
ipc_answer_fast_0(rid, EINVAL);
if (!ipc_data_receive(&callid, NULL, &size)) {
ipc_answer_0(callid, EINVAL);
ipc_answer_0(rid, EINVAL);
return;
}
 
77,14 → 76,14
char *path = malloc(size);
if (!path) {
ipc_answer_fast_0(callid, ENOMEM);
ipc_answer_fast_0(rid, ENOMEM);
ipc_answer_0(callid, ENOMEM);
ipc_answer_0(rid, ENOMEM);
return;
}
 
int rc;
if ((rc = ipc_data_deliver(callid, &call, path, size))) {
ipc_answer_fast_0(rid, rc);
if ((rc = ipc_data_deliver(callid, path, size))) {
ipc_answer_0(rid, rc);
free(path);
return;
}
103,7 → 102,7
rc = vfs_lookup_internal(path, size, &triplet, NULL);
if (rc) {
futex_up(&unlink_futex);
ipc_answer_fast_0(rid, rc);
ipc_answer_0(rid, rc);
free(path);
return;
}
123,7 → 122,7
int fd = vfs_fd_alloc();
if (fd < 0) {
vfs_node_put(node);
ipc_answer_fast_0(rid, fd);
ipc_answer_0(rid, fd);
return;
}
vfs_file_t *file = vfs_file_get(fd);
142,7 → 141,7
/*
* Success! Return the new file descriptor to the client.
*/
ipc_answer_fast_1(rid, EOK, fd);
ipc_answer_1(rid, EOK, fd);
}
 
/**
/trunk/uspace/srv/vfs/vfs_mount.c
84,11 → 84,10
* system and the path of the mountpoint.
*/
ipc_callid_t callid;
ipc_call_t call;
size_t size;
if (!ipc_data_receive(&callid, &call, NULL, &size)) {
ipc_answer_fast_0(callid, EINVAL);
ipc_answer_fast_0(rid, EINVAL);
if (!ipc_data_receive(&callid, NULL, &size)) {
ipc_answer_0(callid, EINVAL);
ipc_answer_0(rid, EINVAL);
return;
}
 
99,8 → 98,8
*/
if ((size < FS_NAME_MAXLEN + 1) ||
(size > FS_NAME_MAXLEN + MAX_PATH_LEN)) {
ipc_answer_fast_0(callid, EINVAL);
ipc_answer_fast_0(rid, EINVAL);
ipc_answer_0(callid, EINVAL);
ipc_answer_0(rid, EINVAL);
return;
}
 
110,8 → 109,8
uint8_t *buf;
buf = malloc(size);
if (!buf) {
ipc_answer_fast_0(callid, ENOMEM);
ipc_answer_fast_0(rid, ENOMEM);
ipc_answer_0(callid, ENOMEM);
ipc_answer_0(rid, ENOMEM);
return;
}
 
118,7 → 117,7
/*
* Deliver the data.
*/
(void) ipc_data_deliver(callid, &call, buf, size);
(void) ipc_data_deliver(callid, buf, size);
 
char fs_name[FS_NAME_MAXLEN + 1];
memcpy(fs_name, buf, FS_NAME_MAXLEN);
131,7 → 130,7
int fs_handle = fs_name_to_handle(fs_name, true);
if (!fs_handle) {
free(buf);
ipc_answer_fast_0(rid, ENOENT);
ipc_answer_0(rid, ENOENT);
return;
}
 
146,13 → 145,13
rc = lookup_root(fs_handle, dev_handle, &mounted_root);
if (rc != EOK) {
free(buf);
ipc_answer_fast_0(rid, rc);
ipc_answer_0(rid, rc);
return;
}
vfs_node_t *mr_node = vfs_node_get(&mounted_root);
if (!mr_node) {
free(buf);
ipc_answer_fast_0(rid, ENOMEM);
ipc_answer_0(rid, ENOMEM);
return;
}
 
176,7 → 175,7
futex_up(&rootfs_futex);
vfs_node_put(mr_node); /* failed -> drop reference */
free(buf);
ipc_answer_fast_0(rid, rc);
ipc_answer_0(rid, rc);
return;
}
mp_node = vfs_node_get(&mp);
185,7 → 184,7
futex_up(&rootfs_futex);
vfs_node_put(mr_node); /* failed -> drop reference */
free(buf);
ipc_answer_fast_0(rid, ENOMEM);
ipc_answer_0(rid, ENOMEM);
return;
}
/*
206,7 → 205,7
rootfs = mounted_root;
futex_up(&rootfs_futex);
free(buf);
ipc_answer_fast_0(rid, EOK);
ipc_answer_0(rid, EOK);
return;
} else {
/*
216,7 → 215,7
futex_up(&rootfs_futex);
free(buf);
vfs_node_put(mr_node); /* failed -> drop reference */
ipc_answer_fast_0(rid, ENOENT);
ipc_answer_0(rid, ENOENT);
return;
}
}
254,11 → 253,11
}
if (rc2 == EOK)
ipc_answer_fast_0(rid, rc1);
ipc_answer_0(rid, rc1);
else if (rc1 == EOK)
ipc_answer_fast_0(rid, rc2);
ipc_answer_0(rid, rc2);
else
ipc_answer_fast_0(rid, rc1);
ipc_answer_0(rid, rc1);
}
 
/**
/trunk/uspace/srv/vfs/vfs_register.c
155,13 → 155,13
* The first call has to be IPC_M_DATA_SEND in which we receive the
* VFS info structure from the client FS.
*/
if (!ipc_data_receive(&callid, &call, NULL, &size)) {
if (!ipc_data_receive(&callid, NULL, &size)) {
/*
* The client doesn't obey the same protocol as we do.
*/
dprintf("Receiving of VFS info failed.\n");
ipc_answer_fast_0(callid, EINVAL);
ipc_answer_fast_0(rid, EINVAL);
ipc_answer_0(callid, EINVAL);
ipc_answer_0(rid, EINVAL);
return;
}
177,8 → 177,8
* the info structure.
*/
dprintf("Received VFS info has bad size.\n");
ipc_answer_fast_0(callid, EINVAL);
ipc_answer_fast_0(rid, EINVAL);
ipc_answer_0(callid, EINVAL);
ipc_answer_0(rid, EINVAL);
return;
}
 
189,19 → 189,19
fs_info = (fs_info_t *) malloc(sizeof(fs_info_t));
if (!fs_info) {
dprintf("Could not allocate memory for FS info.\n");
ipc_answer_fast_0(callid, ENOMEM);
ipc_answer_fast_0(rid, ENOMEM);
ipc_answer_0(callid, ENOMEM);
ipc_answer_0(rid, ENOMEM);
return;
}
link_initialize(&fs_info->fs_link);
rc = ipc_data_deliver(callid, &call, &fs_info->vfs_info, size);
rc = ipc_data_deliver(callid, &fs_info->vfs_info, size);
if (rc != EOK) {
dprintf("Failed to deliver the VFS info into our AS, rc=%d.\n",
rc);
free(fs_info);
ipc_answer_fast_0(callid, rc);
ipc_answer_fast_0(rid, rc);
ipc_answer_0(callid, rc);
ipc_answer_0(rid, rc);
return;
}
 
209,8 → 209,8
if (!vfs_info_sane(&fs_info->vfs_info)) {
free(fs_info);
ipc_answer_fast_0(callid, EINVAL);
ipc_answer_fast_0(rid, EINVAL);
ipc_answer_0(callid, EINVAL);
ipc_answer_0(rid, EINVAL);
return;
}
226,8 → 226,8
dprintf("FS is already registered.\n");
futex_up(&fs_head_futex);
free(fs_info);
ipc_answer_fast_0(callid, EEXISTS);
ipc_answer_fast_0(rid, EEXISTS);
ipc_answer_0(callid, EEXISTS);
ipc_answer_0(rid, EEXISTS);
return;
}
 
248,12 → 248,12
list_remove(&fs_info->fs_link);
futex_up(&fs_head_futex);
free(fs_info);
ipc_answer_fast_0(callid, EINVAL);
ipc_answer_fast_0(rid, EINVAL);
ipc_answer_0(callid, EINVAL);
ipc_answer_0(rid, EINVAL);
return;
}
fs_info->phone = IPC_GET_ARG3(call);
ipc_answer_fast_0(callid, EOK);
ipc_answer_0(callid, EOK);
 
dprintf("Callback connection to FS created.\n");
 
267,8 → 267,8
futex_up(&fs_head_futex);
ipc_hangup(fs_info->phone);
free(fs_info);
ipc_answer_fast_0(callid, EINVAL);
ipc_answer_fast_0(rid, EINVAL);
ipc_answer_0(callid, EINVAL);
ipc_answer_0(rid, EINVAL);
return;
}
282,8 → 282,8
futex_up(&fs_head_futex);
ipc_hangup(fs_info->phone);
free(fs_info);
ipc_answer_fast_0(callid, EINVAL);
ipc_answer_fast_0(rid, EINVAL);
ipc_answer_0(callid, EINVAL);
ipc_answer_0(rid, EINVAL);
return;
}
 
290,7 → 290,7
/*
* Commit to read-only sharing the PLB with the client.
*/
ipc_answer_fast(callid, EOK, (ipcarg_t) plb,
ipc_answer_2(callid, EOK, (ipcarg_t) plb,
(ipcarg_t) (AS_AREA_READ | AS_AREA_CACHEABLE));
 
dprintf("Sharing PLB.\n");
301,7 → 301,7
* system a global file system handle.
*/
fs_info->fs_handle = (int) atomic_postinc(&fs_handle_next);
ipc_answer_fast_1(rid, EOK, (ipcarg_t) fs_info->fs_handle);
ipc_answer_1(rid, EOK, (ipcarg_t) fs_info->fs_handle);
futex_up(&fs_head_futex);