Changeset ffa2c8ef in mainline for uspace/lib/fs/libfs.c


Ignore:
Timestamp:
2011-01-29T11:36:08Z (14 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
46b881c
Parents:
64d2b10
Message:

do not intermix low-level IPC methods with async framework methods

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/fs/libfs.c

    r64d2b10 rffa2c8ef  
    4040#include <errno.h>
    4141#include <async.h>
    42 #include <ipc/ipc.h>
    4342#include <as.h>
    4443#include <assert.h>
     
    5857#define answer_and_return(rid, rc) \
    5958        do { \
    60                 ipc_answer_0((rid), (rc)); \
     59                async_answer_0((rid), (rc)); \
    6160                return; \
    6261        } while (0)
     
    102101         * Ask VFS for callback connection.
    103102         */
    104         sysarg_t taskhash;
    105         ipc_connect_to_me(vfs_phone, 0, 0, 0, &taskhash, &reg->vfs_phonehash);
     103        async_connect_to_me(vfs_phone, 0, 0, 0, conn);
    106104       
    107105        /*
     
    128126        async_wait_for(req, NULL);
    129127        reg->fs_handle = (int) IPC_GET_ARG1(answer);
    130        
    131         /*
    132          * Create a connection fibril to handle the callback connection.
    133          */
    134         async_new_connection(taskhash, reg->vfs_phonehash, 0, NULL, conn);
    135128       
    136129        /*
     
    166159        if ((IPC_GET_IMETHOD(call) != IPC_M_CONNECTION_CLONE) ||
    167160            (mountee_phone < 0)) {
    168                 ipc_answer_0(callid, EINVAL);
    169                 ipc_answer_0(rid, EINVAL);
     161                async_answer_0(callid, EINVAL);
     162                async_answer_0(rid, EINVAL);
    170163                return;
    171164        }
    172165       
    173166        /* Acknowledge the mountee_phone */
    174         ipc_answer_0(callid, EOK);
     167        async_answer_0(callid, EOK);
    175168       
    176169        fs_node_t *fn;
    177170        res = ops->node_get(&fn, mp_devmap_handle, mp_fs_index);
    178171        if ((res != EOK) || (!fn)) {
    179                 ipc_hangup(mountee_phone);
     172                async_hangup(mountee_phone);
    180173                async_data_write_void(combine_rc(res, ENOENT));
    181                 ipc_answer_0(rid, combine_rc(res, ENOENT));
     174                async_answer_0(rid, combine_rc(res, ENOENT));
    182175                return;
    183176        }
    184177       
    185178        if (fn->mp_data.mp_active) {
    186                 ipc_hangup(mountee_phone);
     179                async_hangup(mountee_phone);
    187180                (void) ops->node_put(fn);
    188181                async_data_write_void(EBUSY);
    189                 ipc_answer_0(rid, EBUSY);
     182                async_answer_0(rid, EBUSY);
    190183                return;
    191184        }
     
    193186        rc = async_req_0_0(mountee_phone, IPC_M_CONNECT_ME);
    194187        if (rc != EOK) {
    195                 ipc_hangup(mountee_phone);
     188                async_hangup(mountee_phone);
    196189                (void) ops->node_put(fn);
    197190                async_data_write_void(rc);
    198                 ipc_answer_0(rid, rc);
     191                async_answer_0(rid, rc);
    199192                return;
    200193        }
     
    214207         * Do not release the FS node so that it stays in memory.
    215208         */
    216         ipc_answer_3(rid, rc, IPC_GET_ARG1(answer), IPC_GET_ARG2(answer),
     209        async_answer_3(rid, rc, IPC_GET_ARG1(answer), IPC_GET_ARG2(answer),
    217210            IPC_GET_ARG3(answer));
    218211}
     
    227220        res = ops->node_get(&fn, mp_devmap_handle, mp_fs_index);
    228221        if ((res != EOK) || (!fn)) {
    229                 ipc_answer_0(rid, combine_rc(res, ENOENT));
     222                async_answer_0(rid, combine_rc(res, ENOENT));
    230223                return;
    231224        }
     
    236229        if (!fn->mp_data.mp_active) {
    237230                (void) ops->node_put(fn);
    238                 ipc_answer_0(rid, EINVAL);
     231                async_answer_0(rid, EINVAL);
    239232                return;
    240233        }
     
    250243         */
    251244        if (res == EOK) {
    252                 ipc_hangup(fn->mp_data.phone);
     245                async_hangup(fn->mp_data.phone);
    253246                fn->mp_data.mp_active = false;
    254247                fn->mp_data.fs_handle = 0;
     
    260253
    261254        (void) ops->node_put(fn);
    262         ipc_answer_0(rid, res);
     255        async_answer_0(rid, res);
    263256}
    264257
     
    300293       
    301294        if (cur->mp_data.mp_active) {
    302                 ipc_forward_slow(rid, cur->mp_data.phone, VFS_OUT_LOOKUP,
     295                async_forward_slow(rid, cur->mp_data.phone, VFS_OUT_LOOKUP,
    303296                    next, last, cur->mp_data.devmap_handle, lflag, index,
    304297                    IPC_FF_ROUTE_FROM_ME);
     
    324317                        if (len + 1 == NAME_MAX) {
    325318                                /* Component length overflow */
    326                                 ipc_answer_0(rid, ENAMETOOLONG);
     319                                async_answer_0(rid, ENAMETOOLONG);
    327320                                goto out;
    328321                        }
     
    358351                                next--;
    359352                       
    360                         ipc_forward_slow(rid, tmp->mp_data.phone,
     353                        async_forward_slow(rid, tmp->mp_data.phone,
    361354                            VFS_OUT_LOOKUP, next, last, tmp->mp_data.devmap_handle,
    362355                            lflag, index, IPC_FF_ROUTE_FROM_ME);
     
    372365                        if (next <= last) {
    373366                                /* There are unprocessed components */
    374                                 ipc_answer_0(rid, ENOENT);
     367                                async_answer_0(rid, ENOENT);
    375368                                goto out;
    376369                        }
     
    380373                                /* Request to create a new link */
    381374                                if (!ops->is_directory(cur)) {
    382                                         ipc_answer_0(rid, ENOTDIR);
     375                                        async_answer_0(rid, ENOTDIR);
    383376                                        goto out;
    384377                                }
     
    398391                                                if (lflag & L_CREATE)
    399392                                                        (void) ops->destroy(fn);
    400                                                 ipc_answer_0(rid, rc);
     393                                                async_answer_0(rid, rc);
    401394                                        } else {
    402395                                                aoff64_t size = ops->size_get(fn);
    403                                                 ipc_answer_5(rid, fs_handle,
     396                                                async_answer_5(rid, fs_handle,
    404397                                                    devmap_handle,
    405398                                                    ops->index_get(fn),
     
    410403                                        }
    411404                                } else
    412                                         ipc_answer_0(rid, ENOSPC);
     405                                        async_answer_0(rid, ENOSPC);
    413406                               
    414407                                goto out;
    415408                        }
    416409                       
    417                         ipc_answer_0(rid, ENOENT);
     410                        async_answer_0(rid, ENOENT);
    418411                        goto out;
    419412                }
     
    441434                if (lflag & (L_CREATE | L_LINK)) {
    442435                        if (!ops->is_directory(cur)) {
    443                                 ipc_answer_0(rid, ENOTDIR);
     436                                async_answer_0(rid, ENOTDIR);
    444437                                goto out;
    445438                        }
     
    450443                                if (ops->plb_get_char(next) == '/') {
    451444                                        /* More than one component */
    452                                         ipc_answer_0(rid, ENOENT);
     445                                        async_answer_0(rid, ENOENT);
    453446                                        goto out;
    454447                                }
     
    456449                                if (len + 1 == NAME_MAX) {
    457450                                        /* Component length overflow */
    458                                         ipc_answer_0(rid, ENAMETOOLONG);
     451                                        async_answer_0(rid, ENAMETOOLONG);
    459452                                        goto out;
    460453                                }
     
    480473                                        if (lflag & L_CREATE)
    481474                                                (void) ops->destroy(fn);
    482                                         ipc_answer_0(rid, rc);
     475                                        async_answer_0(rid, rc);
    483476                                } else {
    484477                                        aoff64_t size = ops->size_get(fn);
    485                                         ipc_answer_5(rid, fs_handle,
     478                                        async_answer_5(rid, fs_handle,
    486479                                            devmap_handle,
    487480                                            ops->index_get(fn),
     
    492485                                }
    493486                        } else
    494                                 ipc_answer_0(rid, ENOSPC);
     487                                async_answer_0(rid, ENOSPC);
    495488                       
    496489                        goto out;
    497490                }
    498491               
    499                 ipc_answer_0(rid, ENOENT);
     492                async_answer_0(rid, ENOENT);
    500493                goto out;
    501494        }
     
    510503                if (rc == EOK) {
    511504                        aoff64_t size = ops->size_get(cur);
    512                         ipc_answer_5(rid, fs_handle, devmap_handle,
     505                        async_answer_5(rid, fs_handle, devmap_handle,
    513506                            ops->index_get(cur), LOWER32(size), UPPER32(size),
    514507                            old_lnkcnt);
    515508                } else
    516                         ipc_answer_0(rid, rc);
     509                        async_answer_0(rid, rc);
    517510               
    518511                goto out;
     
    521514        if (((lflag & (L_CREATE | L_EXCLUSIVE)) == (L_CREATE | L_EXCLUSIVE)) ||
    522515            (lflag & L_LINK)) {
    523                 ipc_answer_0(rid, EEXIST);
     516                async_answer_0(rid, EEXIST);
    524517                goto out;
    525518        }
    526519       
    527520        if ((lflag & L_FILE) && (ops->is_directory(cur))) {
    528                 ipc_answer_0(rid, EISDIR);
     521                async_answer_0(rid, EISDIR);
    529522                goto out;
    530523        }
    531524       
    532525        if ((lflag & L_DIRECTORY) && (ops->is_file(cur))) {
    533                 ipc_answer_0(rid, ENOTDIR);
     526                async_answer_0(rid, ENOTDIR);
    534527                goto out;
    535528        }
    536529
    537530        if ((lflag & L_ROOT) && par) {
    538                 ipc_answer_0(rid, EINVAL);
     531                async_answer_0(rid, EINVAL);
    539532                goto out;
    540533        }
     
    548541                if (rc == EOK) {
    549542                        aoff64_t size = ops->size_get(cur);
    550                         ipc_answer_5(rid, fs_handle, devmap_handle,
     543                        async_answer_5(rid, fs_handle, devmap_handle,
    551544                            ops->index_get(cur), LOWER32(size), UPPER32(size),
    552545                            ops->lnkcnt_get(cur));
    553546                } else
    554                         ipc_answer_0(rid, rc);
     547                        async_answer_0(rid, rc);
    555548               
    556549        } else
    557                 ipc_answer_0(rid, rc);
     550                async_answer_0(rid, rc);
    558551       
    559552out:
     
    584577            (size != sizeof(struct stat))) {
    585578                ops->node_put(fn);
    586                 ipc_answer_0(callid, EINVAL);
    587                 ipc_answer_0(rid, EINVAL);
     579                async_answer_0(callid, EINVAL);
     580                async_answer_0(rid, EINVAL);
    588581                return;
    589582        }
     
    604597       
    605598        async_data_read_finalize(callid, &stat, sizeof(struct stat));
    606         ipc_answer_0(rid, EOK);
     599        async_answer_0(rid, EOK);
    607600}
    608601
     
    626619       
    627620        if (fn == NULL) {
    628                 ipc_answer_0(rid, ENOENT);
     621                async_answer_0(rid, ENOENT);
    629622                return;
    630623        }
     
    632625        rc = ops->node_open(fn);
    633626        aoff64_t size = ops->size_get(fn);
    634         ipc_answer_4(rid, rc, LOWER32(size), UPPER32(size), ops->lnkcnt_get(fn),
     627        async_answer_4(rid, rc, LOWER32(size), UPPER32(size), ops->lnkcnt_get(fn),
    635628            (ops->is_file(fn) ? L_FILE : 0) | (ops->is_directory(fn) ? L_DIRECTORY : 0));
    636629       
Note: See TracChangeset for help on using the changeset viewer.