Changeset fe1776c2 in mainline for uspace/srv/vfs/vfs_ops.c


Ignore:
Timestamp:
2011-02-11T12:41:11Z (13 years ago)
Author:
Matus Dekanek <smekideki@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d81ef61c
Parents:
78d1525 (diff), 5d4193c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge from usb/development

File:
1 edited

Legend:

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

    r78d1525 rfe1776c2  
    3737
    3838#include "vfs.h"
    39 #include <ipc/ipc.h>
    4039#include <macros.h>
    4140#include <stdint.h>
     
    9190                        /* Trying to mount root FS over root FS */
    9291                        fibril_rwlock_write_unlock(&namespace_rwlock);
    93                         ipc_answer_0(rid, EBUSY);
     92                        async_answer_0(rid, EBUSY);
    9493                        return;
    9594                }
     
    9998                        /* The lookup failed for some reason. */
    10099                        fibril_rwlock_write_unlock(&namespace_rwlock);
    101                         ipc_answer_0(rid, rc);
     100                        async_answer_0(rid, rc);
    102101                        return;
    103102                }
     
    106105                if (!mp_node) {
    107106                        fibril_rwlock_write_unlock(&namespace_rwlock);
    108                         ipc_answer_0(rid, ENOMEM);
     107                        async_answer_0(rid, ENOMEM);
    109108                        return;
    110109                }
     
    134133                                vfs_release_phone(fs_handle, phone);
    135134                                fibril_rwlock_write_unlock(&namespace_rwlock);
    136                                 ipc_answer_0(rid, rc);
     135                                async_answer_0(rid, rc);
    137136                                return;
    138137                        }
     
    142141                        if (rc != EOK) {
    143142                                fibril_rwlock_write_unlock(&namespace_rwlock);
    144                                 ipc_answer_0(rid, rc);
     143                                async_answer_0(rid, rc);
    145144                                return;
    146145                        }
     
    165164                       
    166165                        fibril_rwlock_write_unlock(&namespace_rwlock);
    167                         ipc_answer_0(rid, rc);
     166                        async_answer_0(rid, rc);
    168167                        return;
    169168                } else {
     
    173172                         */
    174173                        fibril_rwlock_write_unlock(&namespace_rwlock);
    175                         ipc_answer_0(rid, ENOENT);
     174                        async_answer_0(rid, ENOENT);
    176175                        return;
    177176                }
     
    202201                if (mp_node)
    203202                        vfs_node_put(mp_node);
    204                 ipc_answer_0(rid, rc);
     203                async_answer_0(rid, rc);
    205204                fibril_rwlock_write_unlock(&namespace_rwlock);
    206205                return;
     
    218217                        vfs_node_put(mp_node);
    219218                fibril_rwlock_write_unlock(&namespace_rwlock);
    220                 ipc_answer_0(rid, rc);
     219                async_answer_0(rid, rc);
    221220                return;
    222221        }
     
    245244        }
    246245
    247         ipc_answer_0(rid, rc);
     246        async_answer_0(rid, rc);
    248247        fibril_rwlock_write_unlock(&namespace_rwlock);
    249248}
     
    275274            0, NULL);
    276275        if (rc != EOK) {
    277                 ipc_answer_0(rid, rc);
     276                async_answer_0(rid, rc);
    278277                return;
    279278        }
     
    285284        if (rc != EOK) {
    286285                free(mp);
    287                 ipc_answer_0(rid, rc);
     286                async_answer_0(rid, rc);
    288287                return;
    289288        }
     
    299298                free(mp);
    300299                free(opts);
    301                 ipc_answer_0(rid, rc);
     300                async_answer_0(rid, rc);
    302301                return;
    303302        }
     
    310309        ipc_callid_t callid = async_get_call(&data);
    311310        if (IPC_GET_IMETHOD(data) != IPC_M_PING) {
    312                 ipc_answer_0(callid, ENOTSUP);
    313                 ipc_answer_0(rid, ENOTSUP);
     311                async_answer_0(callid, ENOTSUP);
     312                async_answer_0(rid, ENOTSUP);
    314313                free(mp);
    315314                free(opts);
     
    333332               
    334333                fibril_mutex_unlock(&fs_head_lock);
    335                 ipc_answer_0(callid, ENOENT);
    336                 ipc_answer_0(rid, ENOENT);
     334                async_answer_0(callid, ENOENT);
     335                async_answer_0(rid, ENOENT);
    337336                free(mp);
    338337                free(fs_name);
     
    343342       
    344343        /* Acknowledge that we know fs_name. */
    345         ipc_answer_0(callid, EOK);
     344        async_answer_0(callid, EOK);
    346345       
    347346        /* Do the mount */
     
    367366            0, NULL);
    368367        if (rc != EOK)
    369                 ipc_answer_0(rid, rc);
     368                async_answer_0(rid, rc);
    370369
    371370        /*
     
    386385                fibril_rwlock_write_unlock(&namespace_rwlock);
    387386                free(mp);
    388                 ipc_answer_0(rid, rc);
     387                async_answer_0(rid, rc);
    389388                return;
    390389        }
     
    393392                fibril_rwlock_write_unlock(&namespace_rwlock);
    394393                free(mp);
    395                 ipc_answer_0(rid, ENOMEM);
     394                async_answer_0(rid, ENOMEM);
    396395                return;
    397396        }
     
    409408                vfs_node_put(mr_node);
    410409                free(mp);
    411                 ipc_answer_0(rid, EBUSY);
     410                async_answer_0(rid, EBUSY);
    412411                return;
    413412        }
     
    430429                        fibril_rwlock_write_unlock(&namespace_rwlock);
    431430                        vfs_node_put(mr_node);
    432                         ipc_answer_0(rid, rc);
     431                        async_answer_0(rid, rc);
    433432                        return;
    434433                }
     
    449448                        fibril_rwlock_write_unlock(&namespace_rwlock);
    450449                        vfs_node_put(mr_node);
    451                         ipc_answer_0(rid, rc);
     450                        async_answer_0(rid, rc);
    452451                        return;
    453452                }
     
    456455                        fibril_rwlock_write_unlock(&namespace_rwlock);
    457456                        vfs_node_put(mr_node);
    458                         ipc_answer_0(rid, ENOMEM);
     457                        async_answer_0(rid, ENOMEM);
    459458                        return;
    460459                }
     
    468467                        vfs_node_put(mp_node);
    469468                        vfs_node_put(mr_node);
    470                         ipc_answer_0(rid, rc);
     469                        async_answer_0(rid, rc);
    471470                        return;
    472471                }
     
    486485
    487486        fibril_rwlock_write_unlock(&namespace_rwlock);
    488         ipc_answer_0(rid, EOK);
     487        async_answer_0(rid, EOK);
    489488}
    490489
     
    514513            ((lflag & (L_FILE | L_DIRECTORY)) == (L_FILE | L_DIRECTORY)) ||
    515514            (lflag & (L_OPEN | L_ROOT | L_MP))) {
    516                 ipc_answer_0(rid, EINVAL);
     515                async_answer_0(rid, EINVAL);
    517516                return;
    518517        }
     
    526525        int rc = async_data_write_accept((void **) &path, true, 0, 0, 0, NULL);
    527526        if (rc != EOK) {
    528                 ipc_answer_0(rid, rc);
     527                async_answer_0(rid, rc);
    529528                return;
    530529        }
     
    548547                else
    549548                        fibril_rwlock_read_unlock(&namespace_rwlock);
    550                 ipc_answer_0(rid, rc);
     549                async_answer_0(rid, rc);
    551550                free(path);
    552551                return;
     
    571570                                fibril_rwlock_write_unlock(&node->contents_rwlock);
    572571                                vfs_node_put(node);
    573                                 ipc_answer_0(rid, rc);
     572                                async_answer_0(rid, rc);
    574573                                return;
    575574                        }
     
    586585        if (fd < 0) {
    587586                vfs_node_put(node);
    588                 ipc_answer_0(rid, fd);
     587                async_answer_0(rid, fd);
    589588                return;
    590589        }
     
    607606       
    608607        /* Success! Return the new file descriptor to the client. */
    609         ipc_answer_1(rid, EOK, fd);
     608        async_answer_1(rid, EOK, fd);
    610609}
    611610
     
    629628        if (rc != EOK) {
    630629                fibril_rwlock_read_unlock(&namespace_rwlock);
    631                 ipc_answer_0(rid, rc);
     630                async_answer_0(rid, rc);
    632631                return;
    633632        }
     
    645644                                fibril_rwlock_write_unlock(&node->contents_rwlock);
    646645                                vfs_node_put(node);
    647                                 ipc_answer_0(rid, rc);
     646                                async_answer_0(rid, rc);
    648647                                return;
    649648                        }
     
    660659        if (fd < 0) {
    661660                vfs_node_put(node);
    662                 ipc_answer_0(rid, fd);
     661                async_answer_0(rid, fd);
    663662                return;
    664663        }
     
    680679       
    681680        /* Success! Return the new file descriptor to the client. */
    682         ipc_answer_1(rid, EOK, fd);
     681        async_answer_1(rid, EOK, fd);
    683682}
    684683
     
    690689        vfs_file_t *file = vfs_file_get(fd);
    691690        if (!file) {
    692                 ipc_answer_0(rid, ENOENT);
     691                async_answer_0(rid, ENOENT);
    693692                return;
    694693        }
     
    715714
    716715        vfs_file_put(file);
    717         ipc_answer_0(rid, rc);
     716        async_answer_0(rid, rc);
    718717}
    719718
     
    760759        vfs_file_t *file = vfs_file_get(fd);
    761760        if (!file) {
    762                 ipc_answer_0(rid, ENOENT);
     761                async_answer_0(rid, ENOENT);
    763762                return;
    764763        }
     
    766765        int ret = vfs_close_internal(file);
    767766        if (ret != EOK)
    768                 ipc_answer_0(rid, ret);
     767                async_answer_0(rid, ret);
    769768       
    770769        vfs_file_put(file);
    771770        ret = vfs_fd_free(fd);
    772         ipc_answer_0(rid, ret);
     771        async_answer_0(rid, ret);
    773772}
    774773
     
    792791        vfs_file_t *file = vfs_file_get(fd);
    793792        if (!file) {
    794                 ipc_answer_0(rid, ENOENT);
     793                async_answer_0(rid, ENOENT);
    795794                return;
    796795        }
     
    875874         * return to the client.
    876875         */
    877         ipc_answer_1(rid, rc, bytes);
     876        async_answer_1(rid, rc, bytes);
    878877}
    879878
     
    898897        vfs_file_t *file = vfs_file_get(fd);
    899898        if (!file) {
    900                 ipc_answer_0(rid, ENOENT);
     899                async_answer_0(rid, ENOENT);
    901900                return;
    902901        }
     
    911910                        fibril_mutex_unlock(&file->lock);
    912911                        vfs_file_put(file);
    913                         ipc_answer_1(rid, EOK, off);
     912                        async_answer_1(rid, EOK, off);
    914913                        return;
    915914                }
     
    919918                        fibril_mutex_unlock(&file->lock);
    920919                        vfs_file_put(file);
    921                         ipc_answer_0(rid, EOVERFLOW);
     920                        async_answer_0(rid, EOVERFLOW);
    922921                        return;
    923922                }
     
    926925                        fibril_mutex_unlock(&file->lock);
    927926                        vfs_file_put(file);
    928                         ipc_answer_0(rid, EOVERFLOW);
     927                        async_answer_0(rid, EOVERFLOW);
    929928                        return;
    930929                }
     
    935934                fibril_mutex_unlock(&file->lock);
    936935                vfs_file_put(file);
    937                 ipc_answer_2(rid, EOK, LOWER32(newoff),
     936                async_answer_2(rid, EOK, LOWER32(newoff),
    938937                    UPPER32(newoff));
    939938                return;
     
    946945                        fibril_mutex_unlock(&file->lock);
    947946                        vfs_file_put(file);
    948                         ipc_answer_0(rid, EOVERFLOW);
     947                        async_answer_0(rid, EOVERFLOW);
    949948                        return;
    950949                }
     
    954953                        fibril_mutex_unlock(&file->lock);
    955954                        vfs_file_put(file);
    956                         ipc_answer_0(rid, EOVERFLOW);
     955                        async_answer_0(rid, EOVERFLOW);
    957956                        return;
    958957                }
     
    964963                fibril_mutex_unlock(&file->lock);
    965964                vfs_file_put(file);
    966                 ipc_answer_2(rid, EOK, LOWER32(newoff), UPPER32(newoff));
     965                async_answer_2(rid, EOK, LOWER32(newoff), UPPER32(newoff));
    967966                return;
    968967        }
     
    970969        fibril_mutex_unlock(&file->lock);
    971970        vfs_file_put(file);
    972         ipc_answer_0(rid, EINVAL);
     971        async_answer_0(rid, EINVAL);
    973972}
    974973
     
    995994        vfs_file_t *file = vfs_file_get(fd);
    996995        if (!file) {
    997                 ipc_answer_0(rid, ENOENT);
     996                async_answer_0(rid, ENOENT);
    998997                return;
    999998        }
     
    10091008        fibril_mutex_unlock(&file->lock);
    10101009        vfs_file_put(file);
    1011         ipc_answer_0(rid, (sysarg_t)rc);
     1010        async_answer_0(rid, (sysarg_t)rc);
    10121011}
    10131012
     
    10191018        vfs_file_t *file = vfs_file_get(fd);
    10201019        if (!file) {
    1021                 ipc_answer_0(rid, ENOENT);
     1020                async_answer_0(rid, ENOENT);
    10221021                return;
    10231022        }
     
    10261025        if (!async_data_read_receive(&callid, NULL)) {
    10271026                vfs_file_put(file);
    1028                 ipc_answer_0(callid, EINVAL);
    1029                 ipc_answer_0(rid, EINVAL);
     1027                async_answer_0(callid, EINVAL);
     1028                async_answer_0(rid, EINVAL);
    10301029                return;
    10311030        }
     
    10381037        msg = async_send_3(fs_phone, VFS_OUT_STAT, file->node->devmap_handle,
    10391038            file->node->index, true, NULL);
    1040         ipc_forward_fast(callid, fs_phone, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
     1039        async_forward_fast(callid, fs_phone, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
    10411040        async_wait_for(msg, &rc);
    10421041        vfs_release_phone(file->node->fs_handle, fs_phone);
     
    10441043        fibril_mutex_unlock(&file->lock);
    10451044        vfs_file_put(file);
    1046         ipc_answer_0(rid, rc);
     1045        async_answer_0(rid, rc);
    10471046}
    10481047
     
    10521051        int rc = async_data_write_accept((void **) &path, true, 0, 0, 0, NULL);
    10531052        if (rc != EOK) {
    1054                 ipc_answer_0(rid, rc);
     1053                async_answer_0(rid, rc);
    10551054                return;
    10561055        }
     
    10591058        if (!async_data_read_receive(&callid, NULL)) {
    10601059                free(path);
    1061                 ipc_answer_0(callid, EINVAL);
    1062                 ipc_answer_0(rid, EINVAL);
     1060                async_answer_0(callid, EINVAL);
     1061                async_answer_0(rid, EINVAL);
    10631062                return;
    10641063        }
     
    10701069        if (rc != EOK) {
    10711070                fibril_rwlock_read_unlock(&namespace_rwlock);
    1072                 ipc_answer_0(callid, rc);
    1073                 ipc_answer_0(rid, rc);
     1071                async_answer_0(callid, rc);
     1072                async_answer_0(rid, rc);
    10741073                return;
    10751074        }
     
    10771076        if (!node) {
    10781077                fibril_rwlock_read_unlock(&namespace_rwlock);
    1079                 ipc_answer_0(callid, ENOMEM);
    1080                 ipc_answer_0(rid, ENOMEM);
     1078                async_answer_0(callid, ENOMEM);
     1079                async_answer_0(rid, ENOMEM);
    10811080                return;
    10821081        }
     
    10881087        msg = async_send_3(fs_phone, VFS_OUT_STAT, node->devmap_handle,
    10891088            node->index, false, NULL);
    1090         ipc_forward_fast(callid, fs_phone, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
     1089        async_forward_fast(callid, fs_phone, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
    10911090       
    10921091        sysarg_t rv;
     
    10941093        vfs_release_phone(node->fs_handle, fs_phone);
    10951094
    1096         ipc_answer_0(rid, rv);
     1095        async_answer_0(rid, rv);
    10971096
    10981097        vfs_node_put(node);
     
    11061105        int rc = async_data_write_accept((void **) &path, true, 0, 0, 0, NULL);
    11071106        if (rc != EOK) {
    1108                 ipc_answer_0(rid, rc);
     1107                async_answer_0(rid, rc);
    11091108                return;
    11101109        }
     
    11181117        fibril_rwlock_write_unlock(&namespace_rwlock);
    11191118        free(path);
    1120         ipc_answer_0(rid, rc);
     1119        async_answer_0(rid, rc);
    11211120}
    11221121
     
    11281127        int rc = async_data_write_accept((void **) &path, true, 0, 0, 0, NULL);
    11291128        if (rc != EOK) {
    1130                 ipc_answer_0(rid, rc);
     1129                async_answer_0(rid, rc);
    11311130                return;
    11321131        }
     
    11391138        if (rc != EOK) {
    11401139                fibril_rwlock_write_unlock(&namespace_rwlock);
    1141                 ipc_answer_0(rid, rc);
     1140                async_answer_0(rid, rc);
    11421141                return;
    11431142        }
     
    11541153        fibril_rwlock_write_unlock(&namespace_rwlock);
    11551154        vfs_node_put(node);
    1156         ipc_answer_0(rid, EOK);
     1155        async_answer_0(rid, EOK);
    11571156}
    11581157
     
    11631162        int rc = async_data_write_accept((void **) &old, true, 0, 0, 0, NULL);
    11641163        if (rc != EOK) {
    1165                 ipc_answer_0(rid, rc);
     1164                async_answer_0(rid, rc);
    11661165                return;
    11671166        }
     
    11721171        if (rc != EOK) {
    11731172                free(old);
    1174                 ipc_answer_0(rid, rc);
     1173                async_answer_0(rid, rc);
    11751174                return;
    11761175        }
     
    11821181       
    11831182        if ((!oldc) || (!newc)) {
    1184                 ipc_answer_0(rid, EINVAL);
     1183                async_answer_0(rid, EINVAL);
    11851184                free(old);
    11861185                free(new);
     
    12011200                 * - oldc and newc are equal.
    12021201                 */
    1203                 ipc_answer_0(rid, EINVAL);
     1202                async_answer_0(rid, EINVAL);
    12041203                free(old);
    12051204                free(new);
     
    12161215        if (rc != EOK) {
    12171216                fibril_rwlock_write_unlock(&namespace_rwlock);
    1218                 ipc_answer_0(rid, rc);
     1217                async_answer_0(rid, rc);
    12191218                free(old);
    12201219                free(new);
     
    12251224        if (!old_node) {
    12261225                fibril_rwlock_write_unlock(&namespace_rwlock);
    1227                 ipc_answer_0(rid, ENOMEM);
     1226                async_answer_0(rid, ENOMEM);
    12281227                free(old);
    12291228                free(new);
     
    12351234        if (!parentc) {
    12361235                fibril_rwlock_write_unlock(&namespace_rwlock);
    1237                 ipc_answer_0(rid, rc);
     1236                async_answer_0(rid, rc);
    12381237                free(old);
    12391238                free(new);
     
    12521251        if (rc != EOK) {
    12531252                fibril_rwlock_write_unlock(&namespace_rwlock);
    1254                 ipc_answer_0(rid, rc);
     1253                async_answer_0(rid, rc);
    12551254                free(old);
    12561255                free(new);
     
    12621261            (old_node->devmap_handle != new_par_lr.triplet.devmap_handle)) {
    12631262                fibril_rwlock_write_unlock(&namespace_rwlock);
    1264                 ipc_answer_0(rid, EXDEV);       /* different file systems */
     1263                async_answer_0(rid, EXDEV);     /* different file systems */
    12651264                free(old);
    12661265                free(new);
     
    12801279                if (!new_node) {
    12811280                        fibril_rwlock_write_unlock(&namespace_rwlock);
    1282                         ipc_answer_0(rid, ENOMEM);
     1281                        async_answer_0(rid, ENOMEM);
    12831282                        free(old);
    12841283                        free(new);
     
    12911290        default:
    12921291                fibril_rwlock_write_unlock(&namespace_rwlock);
    1293                 ipc_answer_0(rid, ENOTEMPTY);
     1292                async_answer_0(rid, ENOTEMPTY);
    12941293                free(old);
    12951294                free(new);
     
    13031302                if (new_node)
    13041303                        vfs_node_put(new_node);
    1305                 ipc_answer_0(rid, rc);
     1304                async_answer_0(rid, rc);
    13061305                free(old);
    13071306                free(new);
     
    13201319                if (new_node)
    13211320                        vfs_node_put(new_node);
    1322                 ipc_answer_0(rid, rc);
     1321                async_answer_0(rid, rc);
    13231322                free(old);
    13241323                free(new);
     
    13371336        free(old);
    13381337        free(new);
    1339         ipc_answer_0(rid, EOK);
     1338        async_answer_0(rid, EOK);
    13401339}
    13411340
     
    13471346        /* If the file descriptors are the same, do nothing. */
    13481347        if (oldfd == newfd) {
    1349                 ipc_answer_1(rid, EOK, newfd);
     1348                async_answer_1(rid, EOK, newfd);
    13501349                return;
    13511350        }
     
    13541353        vfs_file_t *oldfile = vfs_file_get(oldfd);
    13551354        if (!oldfile) {
    1356                 ipc_answer_0(rid, EBADF);
     1355                async_answer_0(rid, EBADF);
    13571356                return;
    13581357        }
     
    13731372                        vfs_file_put(oldfile);
    13741373                        vfs_file_put(newfile);
    1375                         ipc_answer_0(rid, ret);
     1374                        async_answer_0(rid, ret);
    13761375                        return;
    13771376                }
     
    13821381                        vfs_file_put(oldfile);
    13831382                        vfs_file_put(newfile);
    1384                         ipc_answer_0(rid, ret);
     1383                        async_answer_0(rid, ret);
    13851384                        return;
    13861385                }
     
    13941393       
    13951394        if (ret != EOK)
    1396                 ipc_answer_0(rid, ret);
     1395                async_answer_0(rid, ret);
    13971396        else
    1398                 ipc_answer_1(rid, EOK, newfd);
     1397                async_answer_1(rid, EOK, newfd);
    13991398}
    14001399
Note: See TracChangeset for help on using the changeset viewer.