Changeset 16dc887 in mainline for uspace/srv/vfs


Ignore:
Timestamp:
2011-08-16T14:00:32Z (14 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
278ac72, b112055
Parents:
3751a08 (diff), cc574511 (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 Location service.

Location:
uspace/srv/vfs
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/vfs/vfs.h

    r3751a08 r16dc887  
    3838#include <fibril_synch.h>
    3939#include <sys/types.h>
    40 #include <devmap.h>
     40#include <loc.h>
    4141#include <bool.h>
    4242#include <ipc/vfs.h>
     
    6161#define VFS_PAIR \
    6262        fs_handle_t fs_handle; \
    63         devmap_handle_t devmap_handle;
     63        service_id_t service_id;
    6464
    6565/**
     
    6767 * doesn't contain any state. For a stateful structure, see vfs_node_t.
    6868 *
    69  * @note        fs_handle, devmap_handle and index are meant to be returned in one
     69 * @note        fs_handle, service_id and index are meant to be returned in one
    7070 *              IPC reply.
    7171 */
     
    181181extern void vfs_node_put(vfs_node_t *);
    182182extern void vfs_node_forget(vfs_node_t *);
    183 extern unsigned vfs_nodes_refcount_sum_get(fs_handle_t, devmap_handle_t);
     183extern unsigned vfs_nodes_refcount_sum_get(fs_handle_t, service_id_t);
    184184
    185185
  • uspace/srv/vfs/vfs_file.c

    r3751a08 r16dc887  
    115115       
    116116        ipc_call_t answer;
    117         aid_t msg = async_send_2(exch, VFS_OUT_CLOSE, file->node->devmap_handle,
     117        aid_t msg = async_send_2(exch, VFS_OUT_CLOSE, file->node->service_id,
    118118            file->node->index, &answer);
    119119       
  • uspace/srv/vfs/vfs_lookup.c

    r3751a08 r16dc887  
    162162        aid_t req = async_send_5(exch, VFS_OUT_LOOKUP, (sysarg_t) first,
    163163            (sysarg_t) (first + len - 1) % PLB_SIZE,
    164             (sysarg_t) root->devmap_handle, (sysarg_t) lflag, (sysarg_t) index,
     164            (sysarg_t) root->service_id, (sysarg_t) lflag, (sysarg_t) index,
    165165            &answer);
    166166       
     
    185185       
    186186        result->triplet.fs_handle = (fs_handle_t) rc;
    187         result->triplet.devmap_handle = (devmap_handle_t) IPC_GET_ARG1(answer);
     187        result->triplet.service_id = (service_id_t) IPC_GET_ARG1(answer);
    188188        result->triplet.index = (fs_index_t) IPC_GET_ARG2(answer);
    189189        result->size =
     
    212212        ipc_call_t answer;
    213213        aid_t req = async_send_2(exch, VFS_OUT_OPEN_NODE,
    214             (sysarg_t) result->triplet.devmap_handle,
     214            (sysarg_t) result->triplet.service_id,
    215215            (sysarg_t) result->triplet.index, &answer);
    216216       
  • uspace/srv/vfs/vfs_node.c

    r3751a08 r16dc887  
    116116                unsigned long key[] = {
    117117                        [KEY_FS_HANDLE] = node->fs_handle,
    118                         [KEY_DEV_HANDLE] = node->devmap_handle,
     118                        [KEY_DEV_HANDLE] = node->service_id,
    119119                        [KEY_INDEX] = node->index
    120120                };
     
    138138                async_exch_t *exch = vfs_exchange_grab(node->fs_handle);
    139139                sysarg_t rc = async_req_2_0(exch, VFS_OUT_DESTROY,
    140                     (sysarg_t) node->devmap_handle, (sysarg_t)node->index);
     140                    (sysarg_t) node->service_id, (sysarg_t)node->index);
    141141               
    142142                assert(rc == EOK);
     
    160160        unsigned long key[] = {
    161161                [KEY_FS_HANDLE] = node->fs_handle,
    162                 [KEY_DEV_HANDLE] = node->devmap_handle,
     162                [KEY_DEV_HANDLE] = node->service_id,
    163163                [KEY_INDEX] = node->index
    164164        };
     
    184184        unsigned long key[] = {
    185185                [KEY_FS_HANDLE] = result->triplet.fs_handle,
    186                 [KEY_DEV_HANDLE] = result->triplet.devmap_handle,
     186                [KEY_DEV_HANDLE] = result->triplet.service_id,
    187187                [KEY_INDEX] = result->triplet.index
    188188        };
     
    200200                memset(node, 0, sizeof(vfs_node_t));
    201201                node->fs_handle = result->triplet.fs_handle;
    202                 node->devmap_handle = result->triplet.devmap_handle;
     202                node->service_id = result->triplet.service_id;
    203203                node->index = result->triplet.index;
    204204                node->size = result->size;
     
    252252        vfs_node_t *node = hash_table_get_instance(item, vfs_node_t, nh_link);
    253253        return (node->fs_handle == (fs_handle_t) key[KEY_FS_HANDLE]) &&
    254             (node->devmap_handle == key[KEY_DEV_HANDLE]) &&
     254            (node->service_id == key[KEY_DEV_HANDLE]) &&
    255255            (node->index == key[KEY_INDEX]);
    256256}
     
    264264        unsigned refcnt;
    265265        fs_handle_t fs_handle;
    266         devmap_handle_t devmap_handle;
     266        service_id_t service_id;
    267267};
    268268
     
    273273
    274274        if ((node->fs_handle == rd->fs_handle) &&
    275             (node->devmap_handle == rd->devmap_handle))
     275            (node->service_id == rd->service_id))
    276276                rd->refcnt += node->refcnt;
    277277}
    278278
    279279unsigned
    280 vfs_nodes_refcount_sum_get(fs_handle_t fs_handle, devmap_handle_t devmap_handle)
     280vfs_nodes_refcount_sum_get(fs_handle_t fs_handle, service_id_t service_id)
    281281{
    282282        struct refcnt_data rd = {
    283283                .refcnt = 0,
    284284                .fs_handle = fs_handle,
    285                 .devmap_handle = devmap_handle
     285                .service_id = service_id
    286286        };
    287287
  • uspace/srv/vfs/vfs_ops.c

    r3751a08 r16dc887  
    5454
    5555/* Forward declarations of static functions. */
    56 static int vfs_truncate_internal(fs_handle_t, devmap_handle_t, fs_index_t,
     56static int vfs_truncate_internal(fs_handle_t, service_id_t, fs_index_t,
    5757    aoff64_t);
    5858
     
    6565vfs_pair_t rootfs = {
    6666        .fs_handle = 0,
    67         .devmap_handle = 0
     67        .service_id = 0
    6868};
    6969
    70 static void vfs_mount_internal(ipc_callid_t rid, devmap_handle_t devmap_handle,
     70static void vfs_mount_internal(ipc_callid_t rid, service_id_t service_id,
    7171    fs_handle_t fs_handle, char *mp, char *opts)
    7272{
     
    125125                        exch = vfs_exchange_grab(fs_handle);
    126126                        msg = async_send_1(exch, VFS_OUT_MOUNTED,
    127                             (sysarg_t) devmap_handle, &answer);
     127                            (sysarg_t) service_id, &answer);
    128128                        /* Send the mount options */
    129129                        rc = async_data_write_start(exch, (void *)opts,
     
    150150                       
    151151                        mr_res.triplet.fs_handle = fs_handle;
    152                         mr_res.triplet.devmap_handle = devmap_handle;
     152                        mr_res.triplet.service_id = service_id;
    153153                        mr_res.triplet.index = rindex;
    154154                        mr_res.size = rsize;
     
    157157                       
    158158                        rootfs.fs_handle = fs_handle;
    159                         rootfs.devmap_handle = devmap_handle;
     159                        rootfs.service_id = service_id;
    160160                       
    161161                        /* Add reference to the mounted root. */
     
    178178       
    179179        /*
    180          * At this point, we have all necessary pieces: file system and device
    181          * handles, and we know the mount point VFS node.
     180         * At this point, we have all necessary pieces: file system handle
     181         * and service ID, and we know the mount point VFS node.
    182182         */
    183183       
     
    187187        exch = vfs_exchange_grab(mp_res.triplet.fs_handle);
    188188        msg = async_send_4(exch, VFS_OUT_MOUNT,
    189             (sysarg_t) mp_res.triplet.devmap_handle,
     189            (sysarg_t) mp_res.triplet.service_id,
    190190            (sysarg_t) mp_res.triplet.index,
    191191            (sysarg_t) fs_handle,
    192             (sysarg_t) devmap_handle, &answer);
     192            (sysarg_t) service_id, &answer);
    193193       
    194194        /* Send connection */
     
    234234               
    235235                mr_res.triplet.fs_handle = fs_handle;
    236                 mr_res.triplet.devmap_handle = devmap_handle;
     236                mr_res.triplet.service_id = service_id;
    237237                mr_res.triplet.index = rindex;
    238238                mr_res.size = rsize;
     
    255255void vfs_mount(ipc_callid_t rid, ipc_call_t *request)
    256256{
    257         devmap_handle_t devmap_handle;
     257        service_id_t service_id;
    258258
    259259        /*
     
    262262         * in the request.
    263263         */
    264         devmap_handle = (devmap_handle_t) IPC_GET_ARG1(*request);
     264        service_id = (service_id_t) IPC_GET_ARG1(*request);
    265265       
    266266        /*
     
    350350       
    351351        /* Do the mount */
    352         vfs_mount_internal(rid, devmap_handle, fs_handle, mp, opts);
     352        vfs_mount_internal(rid, service_id, fs_handle, mp, opts);
    353353        free(mp);
    354354        free(fs_name);
     
    409409         */
    410410        if (vfs_nodes_refcount_sum_get(mr_node->fs_handle,
    411             mr_node->devmap_handle) != 2) {
     411            mr_node->service_id) != 2) {
    412412                fibril_rwlock_write_unlock(&namespace_rwlock);
    413413                vfs_node_put(mr_node);
     
    430430                exch = vfs_exchange_grab(mr_node->fs_handle);
    431431                rc = async_req_1_0(exch, VFS_OUT_UNMOUNTED,
    432                     mr_node->devmap_handle);
     432                    mr_node->service_id);
    433433                vfs_exchange_release(exch);
    434434               
     
    441441               
    442442                rootfs.fs_handle = 0;
    443                 rootfs.devmap_handle = 0;
     443                rootfs.service_id = 0;
    444444        } else {
    445445               
     
    470470                exch = vfs_exchange_grab(mp_node->fs_handle);
    471471                rc = async_req_2_0(exch, VFS_OUT_UNMOUNT,
    472                     mp_node->devmap_handle, mp_node->index);
     472                    mp_node->service_id, mp_node->index);
    473473                vfs_exchange_release(exch);
    474474               
     
    575575                if (node->size) {
    576576                        rc = vfs_truncate_internal(node->fs_handle,
    577                             node->devmap_handle, node->index, 0);
     577                            node->service_id, node->index, 0);
    578578                        if (rc) {
    579579                                fibril_rwlock_write_unlock(&node->contents_rwlock);
     
    628628       
    629629        lr.triplet.fs_handle = IPC_GET_ARG1(*request);
    630         lr.triplet.devmap_handle = IPC_GET_ARG2(*request);
     630        lr.triplet.service_id = IPC_GET_ARG2(*request);
    631631        lr.triplet.index = IPC_GET_ARG3(*request);
    632632        int oflag = IPC_GET_ARG4(*request);
     
    649649                if (node->size) {
    650650                        rc = vfs_truncate_internal(node->fs_handle,
    651                             node->devmap_handle, node->index, 0);
     651                            node->service_id, node->index, 0);
    652652                        if (rc) {
    653653                                fibril_rwlock_write_unlock(&node->contents_rwlock);
     
    712712        aid_t msg;
    713713        ipc_call_t answer;
    714         msg = async_send_2(fs_exch, VFS_OUT_SYNC, file->node->devmap_handle,
     714        msg = async_send_2(fs_exch, VFS_OUT_SYNC, file->node->service_id,
    715715            file->node->index, &answer);
    716716       
     
    797797        if (read) {
    798798                rc = async_data_read_forward_4_1(fs_exch, VFS_OUT_READ,
    799                     file->node->devmap_handle, file->node->index,
     799                    file->node->service_id, file->node->index,
    800800                    LOWER32(file->pos), UPPER32(file->pos), &answer);
    801801        } else {
     
    804804               
    805805                rc = async_data_write_forward_4_1(fs_exch, VFS_OUT_WRITE,
    806                     file->node->devmap_handle, file->node->index,
     806                    file->node->service_id, file->node->index,
    807807                    LOWER32(file->pos), UPPER32(file->pos), &answer);
    808808        }
     
    935935}
    936936
    937 int vfs_truncate_internal(fs_handle_t fs_handle, devmap_handle_t devmap_handle,
     937int vfs_truncate_internal(fs_handle_t fs_handle, service_id_t service_id,
    938938    fs_index_t index, aoff64_t size)
    939939{
    940940        async_exch_t *exch = vfs_exchange_grab(fs_handle);
    941941        sysarg_t rc = async_req_4_0(exch, VFS_OUT_TRUNCATE,
    942             (sysarg_t) devmap_handle, (sysarg_t) index, LOWER32(size),
     942            (sysarg_t) service_id, (sysarg_t) index, LOWER32(size),
    943943            UPPER32(size));
    944944        vfs_exchange_release(exch);
     
    963963        fibril_rwlock_write_lock(&file->node->contents_rwlock);
    964964        rc = vfs_truncate_internal(file->node->fs_handle,
    965             file->node->devmap_handle, file->node->index, size);
     965            file->node->service_id, file->node->index, size);
    966966        if (rc == EOK)
    967967                file->node->size = size;
     
    997997       
    998998        aid_t msg;
    999         msg = async_send_3(exch, VFS_OUT_STAT, file->node->devmap_handle,
     999        msg = async_send_3(exch, VFS_OUT_STAT, file->node->service_id,
    10001000            file->node->index, true, NULL);
    10011001        async_forward_fast(callid, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
     
    10501050       
    10511051        aid_t msg;
    1052         msg = async_send_3(exch, VFS_OUT_STAT, node->devmap_handle,
     1052        msg = async_send_3(exch, VFS_OUT_STAT, node->service_id,
    10531053            node->index, false, NULL);
    10541054        async_forward_fast(callid, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
     
    12271227        /* Check whether linking to the same file system instance. */
    12281228        if ((old_node->fs_handle != new_par_lr.triplet.fs_handle) ||
    1229             (old_node->devmap_handle != new_par_lr.triplet.devmap_handle)) {
     1229            (old_node->service_id != new_par_lr.triplet.service_id)) {
    12301230                fibril_rwlock_write_unlock(&namespace_rwlock);
    12311231                vfs_node_put(old_node);
  • uspace/srv/vfs/vfs_register.c

    r3751a08 r16dc887  
    306306        list_foreach(fs_list, cur) {
    307307                fs_info_t *fs = list_get_instance(cur, fs_info_t, fs_link);
    308                 if (str_cmp(fs->vfs_info.name, name) == 0) { 
     308                if (str_cmp(fs->vfs_info.name, name) == 0) {
    309309                        handle = fs->fs_handle;
    310310                        break;
Note: See TracChangeset for help on using the changeset viewer.