Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/vfs/vfs_ops.c

    r2b88074b rec8bab59  
    125125                            (ipcarg_t) dev_handle, &answer);
    126126                        /* send the mount options */
    127                         rc = async_data_write_start(phone, (void *)opts,
     127                        rc = ipc_data_write_start(phone, (void *)opts,
    128128                            str_size(opts));
    129129                        if (rc != EOK) {
     
    207207       
    208208        /* send the mount options */
    209         rc = async_data_write_start(phone, (void *)opts, str_size(opts));
     209        rc = ipc_data_write_start(phone, (void *)opts, str_size(opts));
    210210        if (rc != EOK) {
    211211                async_wait_for(msg, NULL);
     
    268268        ipc_callid_t callid;
    269269        size_t size;
    270         if (!async_data_write_receive(&callid, &size)) {
     270        if (!ipc_data_write_receive(&callid, &size)) {
    271271                ipc_answer_0(callid, EINVAL);
    272272                ipc_answer_0(rid, EINVAL);
     
    290290       
    291291        /* Deliver the mount point. */
    292         ipcarg_t retval = async_data_write_finalize(callid, mp, size);
     292        ipcarg_t retval = ipc_data_write_finalize(callid, mp, size);
    293293        if (retval != EOK) {
    294294                ipc_answer_0(rid, retval);
     
    299299       
    300300        /* Now we expect to receive the mount options. */
    301         if (!async_data_write_receive(&callid, &size)) {
     301        if (!ipc_data_write_receive(&callid, &size)) {
    302302                ipc_answer_0(callid, EINVAL);
    303303                ipc_answer_0(rid, EINVAL);
     
    324324
    325325        /* Deliver the mount options. */
    326         retval = async_data_write_finalize(callid, opts, size);
     326        retval = ipc_data_write_finalize(callid, opts, size);
    327327        if (retval != EOK) {
    328328                ipc_answer_0(rid, retval);
     
    337337         * system.
    338338         */
    339         if (!async_data_write_receive(&callid, &size)) {
     339        if (!ipc_data_write_receive(&callid, &size)) {
    340340                ipc_answer_0(callid, EINVAL);
    341341                ipc_answer_0(rid, EINVAL);
     
    370370       
    371371        /* Deliver the file system name. */
    372         retval = async_data_write_finalize(callid, fs_name, size);
     372        retval = ipc_data_write_finalize(callid, fs_name, size);
    373373        if (retval != EOK) {
    374374                ipc_answer_0(rid, retval);
     
    469469       
    470470        ipc_callid_t callid;
    471         if (!async_data_write_receive(&callid, &len)) {
     471        if (!ipc_data_write_receive(&callid, &len)) {
    472472                ipc_answer_0(callid, EINVAL);
    473473                ipc_answer_0(rid, EINVAL);
     
    483483       
    484484        int rc;
    485         if ((rc = async_data_write_finalize(callid, path, len))) {
     485        if ((rc = ipc_data_write_finalize(callid, path, len))) {
    486486                ipc_answer_0(rid, rc);
    487487                free(path);
     
    543543         * structure.
    544544         */
    545         int fd = vfs_fd_alloc((oflag & O_DESC) != 0);
     545        int fd = vfs_fd_alloc();
    546546        if (fd < 0) {
    547547                vfs_node_put(node);
     
    620620         * structure.
    621621         */
    622         int fd = vfs_fd_alloc((oflag & O_DESC) != 0);
     622        int fd = vfs_fd_alloc();
    623623        if (fd < 0) {
    624624                vfs_node_put(node);
     
    679679}
    680680
    681 static int vfs_close_internal(vfs_file_t *file)
    682 {
    683         /*
    684          * Lock the open file structure so that no other thread can manipulate
    685          * the same open file at a time.
    686          */
    687         fibril_mutex_lock(&file->lock);
    688        
    689         if (file->refcnt <= 1) {
    690                 /* Only close the file on the destination FS server
    691                    if there are no more file descriptors (except the
    692                    present one) pointing to this file. */
    693                
    694                 int fs_phone = vfs_grab_phone(file->node->fs_handle);
    695                
    696                 /* Make a VFS_OUT_CLOSE request at the destination FS server. */
    697                 aid_t msg;
    698                 ipc_call_t answer;
    699                 msg = async_send_2(fs_phone, VFS_OUT_CLOSE, file->node->dev_handle,
    700                     file->node->index, &answer);
    701                
    702                 /* Wait for reply from the FS server. */
    703                 ipcarg_t rc;
    704                 async_wait_for(msg, &rc);
    705                
    706                 vfs_release_phone(fs_phone);
    707                 fibril_mutex_unlock(&file->lock);
    708                
    709                 return IPC_GET_ARG1(answer);
    710         }
    711        
    712         fibril_mutex_unlock(&file->lock);
    713         return EOK;
    714 }
    715 
    716681void vfs_close(ipc_callid_t rid, ipc_call_t *request)
    717682{
     
    725690        }
    726691       
    727         int ret = vfs_close_internal(file);
    728         if (ret != EOK)
    729                 ipc_answer_0(rid, ret);
    730        
    731         ret = vfs_fd_free(fd);
    732         ipc_answer_0(rid, ret);
     692        /*
     693         * Lock the open file structure so that no other thread can manipulate
     694         * the same open file at a time.
     695         */
     696        fibril_mutex_lock(&file->lock);
     697        int fs_phone = vfs_grab_phone(file->node->fs_handle);
     698       
     699        /* Make a VFS_OUT_CLOSE request at the destination FS server. */
     700        aid_t msg;
     701        ipc_call_t answer;
     702        msg = async_send_2(fs_phone, VFS_OUT_CLOSE, file->node->dev_handle,
     703            file->node->index, &answer);
     704
     705        /* Wait for reply from the FS server. */
     706        ipcarg_t rc;
     707        async_wait_for(msg, &rc);
     708
     709        vfs_release_phone(fs_phone);
     710        fibril_mutex_unlock(&file->lock);
     711       
     712        int retval = IPC_GET_ARG1(answer);
     713        if (retval != EOK)
     714                ipc_answer_0(rid, retval);
     715       
     716        retval = vfs_fd_free(fd);
     717        ipc_answer_0(rid, retval);
    733718}
    734719
     
    762747        int res;
    763748        if (read)
    764                 res = async_data_read_receive(&callid, NULL);
     749                res = ipc_data_read_receive(&callid, NULL);
    765750        else
    766                 res = async_data_write_receive(&callid, NULL);
     751                res = ipc_data_write_receive(&callid, NULL);
    767752        if (!res) {
    768753                ipc_answer_0(callid, EINVAL);
     
    958943
    959944        ipc_callid_t callid;
    960         if (!async_data_read_receive(&callid, NULL)) {
     945        if (!ipc_data_read_receive(&callid, NULL)) {
    961946                ipc_answer_0(callid, EINVAL);
    962947                ipc_answer_0(rid, EINVAL);
     
    984969        ipc_callid_t callid;
    985970
    986         if (!async_data_write_receive(&callid, &len)) {
     971        if (!ipc_data_write_receive(&callid, &len)) {
    987972                ipc_answer_0(callid, EINVAL);
    988973                ipc_answer_0(rid, EINVAL);
     
    996981        }
    997982        int rc;
    998         if ((rc = async_data_write_finalize(callid, path, len))) {
     983        if ((rc = ipc_data_write_finalize(callid, path, len))) {
    999984                ipc_answer_0(rid, rc);
    1000985                free(path);
     
    1003988        path[len] = '\0';
    1004989
    1005         if (!async_data_read_receive(&callid, NULL)) {
     990        if (!ipc_data_read_receive(&callid, NULL)) {
    1006991                free(path);
    1007992                ipc_answer_0(callid, EINVAL);
     
    10521037        ipc_callid_t callid;
    10531038
    1054         if (!async_data_write_receive(&callid, &len)) {
     1039        if (!ipc_data_write_receive(&callid, &len)) {
    10551040                ipc_answer_0(callid, EINVAL);
    10561041                ipc_answer_0(rid, EINVAL);
     
    10641049        }
    10651050        int rc;
    1066         if ((rc = async_data_write_finalize(callid, path, len))) {
     1051        if ((rc = ipc_data_write_finalize(callid, path, len))) {
    10671052                ipc_answer_0(rid, rc);
    10681053                free(path);
     
    10891074        ipc_callid_t callid;
    10901075
    1091         if (!async_data_write_receive(&callid, &len)) {
     1076        if (!ipc_data_write_receive(&callid, &len)) {
    10921077                ipc_answer_0(callid, EINVAL);
    10931078                ipc_answer_0(rid, EINVAL);
     
    11011086        }
    11021087        int rc;
    1103         if ((rc = async_data_write_finalize(callid, path, len))) {
     1088        if ((rc = ipc_data_write_finalize(callid, path, len))) {
    11041089                ipc_answer_0(rid, rc);
    11051090                free(path);
     
    11401125
    11411126        /* Retrieve the old path. */
    1142         if (!async_data_write_receive(&callid, &olen)) {
     1127        if (!ipc_data_write_receive(&callid, &olen)) {
    11431128                ipc_answer_0(callid, EINVAL);
    11441129                ipc_answer_0(rid, EINVAL);
     
    11511136                return;
    11521137        }
    1153         if ((rc = async_data_write_finalize(callid, old, olen))) {
     1138        if ((rc = ipc_data_write_finalize(callid, old, olen))) {
    11541139                ipc_answer_0(rid, rc);
    11551140                free(old);
     
    11591144       
    11601145        /* Retrieve the new path. */
    1161         if (!async_data_write_receive(&callid, &nlen)) {
     1146        if (!ipc_data_write_receive(&callid, &nlen)) {
    11621147                ipc_answer_0(callid, EINVAL);
    11631148                ipc_answer_0(rid, EINVAL);
     
    11721157                return;
    11731158        }
    1174         if ((rc = async_data_write_finalize(callid, new, nlen))) {
     1159        if ((rc = ipc_data_write_finalize(callid, new, nlen))) {
    11751160                ipc_answer_0(rid, rc);
    11761161                free(old);
     
    13251310}
    13261311
    1327 void vfs_dup(ipc_callid_t rid, ipc_call_t *request)
    1328 {
    1329         int oldfd = IPC_GET_ARG1(*request);
    1330         int newfd = IPC_GET_ARG2(*request);
    1331        
    1332         /* Lookup the file structure corresponding to oldfd. */
    1333         vfs_file_t *oldfile = vfs_file_get(oldfd);
    1334         if (!oldfile) {
    1335                 ipc_answer_0(rid, EBADF);
    1336                 return;
    1337         }
    1338        
    1339         /* If the file descriptors are the same, do nothing. */
    1340         if (oldfd == newfd) {
    1341                 ipc_answer_1(rid, EOK, newfd);
    1342                 return;
    1343         }
    1344        
    1345         /*
    1346          * Lock the open file structure so that no other thread can manipulate
    1347          * the same open file at a time.
    1348          */
    1349         fibril_mutex_lock(&oldfile->lock);
    1350        
    1351         /* Lookup an open file structure possibly corresponding to newfd. */
    1352         vfs_file_t *newfile = vfs_file_get(newfd);
    1353         if (newfile) {
    1354                 /* Close the originally opened file. */
    1355                 int ret = vfs_close_internal(newfile);
    1356                 if (ret != EOK) {
    1357                         ipc_answer_0(rid, ret);
    1358                         return;
    1359                 }
    1360                
    1361                 ret = vfs_fd_free(newfd);
    1362                 if (ret != EOK) {
    1363                         ipc_answer_0(rid, ret);
    1364                         return;
    1365                 }
    1366         }
    1367        
    1368         /* Assign the old file to newfd. */
    1369         int ret = vfs_fd_assign(oldfile, newfd);
    1370         fibril_mutex_unlock(&oldfile->lock);
    1371        
    1372         if (ret != EOK)
    1373                 ipc_answer_0(rid, ret);
    1374         else
    1375                 ipc_answer_1(rid, EOK, newfd);
    1376 }
    1377 
    13781312/**
    13791313 * @}
Note: See TracChangeset for help on using the changeset viewer.