Ignore:
File:
1 edited

Legend:

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

    r4fe94c66 r228e490  
    491491void vfs_open(ipc_callid_t rid, ipc_call_t *request)
    492492{
     493        if (!vfs_files_init()) {
     494                ipc_answer_0(rid, ENOMEM);
     495                return;
     496        }
     497       
    493498        /*
    494499         * The POSIX interface is open(path, oflag, mode).
     
    604609        vfs_node_addref(node);
    605610        vfs_node_put(node);
    606         vfs_file_put(file);
    607611       
    608612        /* Success! Return the new file descriptor to the client. */
     
    613617{
    614618        // FIXME: check for sanity of the supplied fs, dev and index
     619       
     620        if (!vfs_files_init()) {
     621                ipc_answer_0(rid, ENOMEM);
     622                return;
     623        }
    615624       
    616625        /*
     
    677686        vfs_node_addref(node);
    678687        vfs_node_put(node);
    679         vfs_file_put(file);
    680688       
    681689        /* Success! Return the new file descriptor to the client. */
     
    713721        vfs_release_phone(file->node->fs_handle, fs_phone);
    714722        fibril_mutex_unlock(&file->lock);
    715 
    716         vfs_file_put(file);
     723       
    717724        ipc_answer_0(rid, rc);
    718725}
     
    768775                ipc_answer_0(rid, ret);
    769776       
    770         vfs_file_put(file);
    771777        ret = vfs_fd_free(fd);
    772778        ipc_answer_0(rid, ret);
     
    869875                file->pos += bytes;
    870876        fibril_mutex_unlock(&file->lock);
    871         vfs_file_put(file);     
    872 
     877       
    873878        /*
    874879         * FS server's reply is the final result of the whole operation we
     
    910915                        file->pos = (aoff64_t) off;
    911916                        fibril_mutex_unlock(&file->lock);
    912                         vfs_file_put(file);
    913917                        ipc_answer_1(rid, EOK, off);
    914918                        return;
     
    918922                if ((off >= 0) && (file->pos + off < file->pos)) {
    919923                        fibril_mutex_unlock(&file->lock);
    920                         vfs_file_put(file);
    921924                        ipc_answer_0(rid, EOVERFLOW);
    922925                        return;
     
    925928                if ((off < 0) && (file->pos < (aoff64_t) -off)) {
    926929                        fibril_mutex_unlock(&file->lock);
    927                         vfs_file_put(file);
    928930                        ipc_answer_0(rid, EOVERFLOW);
    929931                        return;
     
    934936               
    935937                fibril_mutex_unlock(&file->lock);
    936                 vfs_file_put(file);
    937938                ipc_answer_2(rid, EOK, LOWER32(newoff),
    938939                    UPPER32(newoff));
     
    945946                        fibril_rwlock_read_unlock(&file->node->contents_rwlock);
    946947                        fibril_mutex_unlock(&file->lock);
    947                         vfs_file_put(file);
    948948                        ipc_answer_0(rid, EOVERFLOW);
    949949                        return;
     
    953953                        fibril_rwlock_read_unlock(&file->node->contents_rwlock);
    954954                        fibril_mutex_unlock(&file->lock);
    955                         vfs_file_put(file);
    956955                        ipc_answer_0(rid, EOVERFLOW);
    957956                        return;
     
    963962                fibril_rwlock_read_unlock(&file->node->contents_rwlock);
    964963                fibril_mutex_unlock(&file->lock);
    965                 vfs_file_put(file);
    966964                ipc_answer_2(rid, EOK, LOWER32(newoff), UPPER32(newoff));
    967965                return;
     
    969967       
    970968        fibril_mutex_unlock(&file->lock);
    971         vfs_file_put(file);
    972969        ipc_answer_0(rid, EINVAL);
    973970}
     
    10081005
    10091006        fibril_mutex_unlock(&file->lock);
    1010         vfs_file_put(file);
    10111007        ipc_answer_0(rid, (sysarg_t)rc);
    10121008}
     
    10251021        ipc_callid_t callid;
    10261022        if (!async_data_read_receive(&callid, NULL)) {
    1027                 vfs_file_put(file);
    10281023                ipc_answer_0(callid, EINVAL);
    10291024                ipc_answer_0(rid, EINVAL);
     
    10431038
    10441039        fibril_mutex_unlock(&file->lock);
    1045         vfs_file_put(file);
    10461040        ipc_answer_0(rid, rc);
    10471041}
     
    13451339        int newfd = IPC_GET_ARG2(*request);
    13461340       
    1347         /* If the file descriptors are the same, do nothing. */
    1348         if (oldfd == newfd) {
    1349                 ipc_answer_1(rid, EOK, newfd);
    1350                 return;
    1351         }
    1352        
    13531341        /* Lookup the file structure corresponding to oldfd. */
    13541342        vfs_file_t *oldfile = vfs_file_get(oldfd);
    13551343        if (!oldfile) {
    13561344                ipc_answer_0(rid, EBADF);
     1345                return;
     1346        }
     1347       
     1348        /* If the file descriptors are the same, do nothing. */
     1349        if (oldfd == newfd) {
     1350                ipc_answer_1(rid, EOK, newfd);
    13571351                return;
    13581352        }
     
    13711365                if (ret != EOK) {
    13721366                        fibril_mutex_unlock(&oldfile->lock);
    1373                         vfs_file_put(oldfile);
    1374                         vfs_file_put(newfile);
    13751367                        ipc_answer_0(rid, ret);
    13761368                        return;
     
    13801372                if (ret != EOK) {
    13811373                        fibril_mutex_unlock(&oldfile->lock);
    1382                         vfs_file_put(oldfile);
    1383                         vfs_file_put(newfile);
    13841374                        ipc_answer_0(rid, ret);
    13851375                        return;
    13861376                }
    1387                 vfs_file_put(newfile);
    13881377        }
    13891378       
     
    13911380        int ret = vfs_fd_assign(oldfile, newfd);
    13921381        fibril_mutex_unlock(&oldfile->lock);
    1393         vfs_file_put(oldfile);
    13941382       
    13951383        if (ret != EOK)
Note: See TracChangeset for help on using the changeset viewer.