Changeset 925a21e in mainline for uspace/lib/c/generic/vfs/vfs.c


Ignore:
Timestamp:
2011-09-24T14:20:29Z (14 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5bf76c1
Parents:
867e2555 (diff), 1ab4aca (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 mainline changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/vfs/vfs.c

    r867e2555 r925a21e  
    5151#include <assert.h>
    5252#include <str.h>
    53 #include <devmap.h>
     53#include <loc.h>
    5454#include <ipc/vfs.h>
    55 #include <ipc/devmap.h>
     55#include <ipc/loc.h>
    5656
    5757static FIBRIL_MUTEX_INITIALIZE(vfs_mutex);
     
    6969 *
    7070 */
    71 static async_exch_t *vfs_exchange_begin(void)
     71async_exch_t *vfs_exchange_begin(void)
    7272{
    7373        fibril_mutex_lock(&vfs_mutex);
     
    8787 *
    8888 */
    89 static void vfs_exchange_end(async_exch_t *exch)
     89void vfs_exchange_end(async_exch_t *exch)
    9090{
    9191        async_exchange_end(exch);
     
    142142}
    143143
    144 int mount(const char *fs_name, const char *mp, const char *fqdn,
    145     const char *opts, unsigned int flags)
     144int mount(const char *fs_name, const char *mp, const char *fqsn,
     145    const char *opts, unsigned int flags, unsigned int instance)
    146146{
    147147        int null_id = -1;
    148         char null[DEVMAP_NAME_MAXLEN];
    149        
    150         if (str_cmp(fqdn, "") == 0) {
     148        char null[LOC_NAME_MAXLEN];
     149       
     150        if (str_cmp(fqsn, "") == 0) {
    151151                /* No device specified, create a fresh
    152152                   null/%d device instead */
    153                 null_id = devmap_null_create();
     153                null_id = loc_null_create();
    154154               
    155155                if (null_id == -1)
    156156                        return ENOMEM;
    157157               
    158                 snprintf(null, DEVMAP_NAME_MAXLEN, "null/%d", null_id);
    159                 fqdn = null;
    160         }
    161        
    162         devmap_handle_t devmap_handle;
    163         int res = devmap_device_get_handle(fqdn, &devmap_handle, flags);
     158                snprintf(null, LOC_NAME_MAXLEN, "null/%d", null_id);
     159                fqsn = null;
     160        }
     161       
     162        service_id_t service_id;
     163        int res = loc_service_get_id(fqsn, &service_id, flags);
    164164        if (res != EOK) {
    165165                if (null_id != -1)
    166                         devmap_null_destroy(null_id);
     166                        loc_null_destroy(null_id);
    167167               
    168168                return res;
     
    173173        if (!mpa) {
    174174                if (null_id != -1)
    175                         devmap_null_destroy(null_id);
     175                        loc_null_destroy(null_id);
    176176               
    177177                return ENOMEM;
     
    181181
    182182        sysarg_t rc_orig;
    183         aid_t req = async_send_2(exch, VFS_IN_MOUNT, devmap_handle, flags, NULL);
     183        aid_t req = async_send_3(exch, VFS_IN_MOUNT, service_id, flags,
     184            instance, NULL);
    184185        sysarg_t rc = async_data_write_start(exch, (void *) mpa, mpa_size);
    185186        if (rc != EOK) {
     
    189190               
    190191                if (null_id != -1)
    191                         devmap_null_destroy(null_id);
     192                        loc_null_destroy(null_id);
    192193               
    193194                if (rc_orig == EOK)
     
    204205               
    205206                if (null_id != -1)
    206                         devmap_null_destroy(null_id);
     207                        loc_null_destroy(null_id);
    207208               
    208209                if (rc_orig == EOK)
     
    219220               
    220221                if (null_id != -1)
    221                         devmap_null_destroy(null_id);
     222                        loc_null_destroy(null_id);
    222223               
    223224                if (rc_orig == EOK)
     
    235236               
    236237                if (null_id != -1)
    237                         devmap_null_destroy(null_id);
     238                        loc_null_destroy(null_id);
    238239               
    239240                if (rc_orig == EOK)
     
    248249       
    249250        if ((rc != EOK) && (null_id != -1))
    250                 devmap_null_destroy(null_id);
     251                loc_null_destroy(null_id);
    251252       
    252253        return (int) rc;
     
    327328       
    328329        return ret;
    329 }
    330 
    331 int open_node(fdi_node_t *node, int oflag)
    332 {
    333         async_exch_t *exch = vfs_exchange_begin();
    334        
    335         ipc_call_t answer;
    336         aid_t req = async_send_4(exch, VFS_IN_OPEN_NODE, node->fs_handle,
    337             node->devmap_handle, node->index, oflag, &answer);
    338        
    339         vfs_exchange_end(exch);
    340 
    341         sysarg_t rc;
    342         async_wait_for(req, &rc);
    343        
    344         if (rc != EOK)
    345                 return (int) rc;
    346        
    347         return (int) IPC_GET_ARG1(answer);
    348330}
    349331
     
    673655        async_exch_t *exch = vfs_exchange_begin();
    674656       
    675         req = async_send_0(exch, VFS_IN_UNLINK, NULL);
     657        req = async_send_1(exch, VFS_IN_UNLINK, lflag, NULL);
    676658        rc = async_data_write_start(exch, pa, pa_size);
    677659        if (rc != EOK) {
     
    811793        }
    812794       
    813         if (!stat.device) {
     795        if (!stat.service) {
    814796                errno = ENOENT;
    815797                return NULL;
    816798        }
    817799       
    818         return devmap_device_connect(mgmt, stat.device, 0);
    819 }
    820 
    821 int fd_node(int fildes, fdi_node_t *node)
    822 {
    823         struct stat stat;
    824         int rc = fstat(fildes, &stat);
    825        
    826         if (rc == EOK) {
    827                 node->fs_handle = stat.fs_handle;
    828                 node->devmap_handle = stat.devmap_handle;
    829                 node->index = stat.index;
    830         }
    831        
    832         return rc;
     800        return loc_service_connect(mgmt, stat.service, 0);
    833801}
    834802
     
    848816}
    849817
     818int fd_wait(void)
     819{
     820        async_exch_t *exch = vfs_exchange_begin();
     821       
     822        sysarg_t ret;
     823        sysarg_t rc = async_req_0_1(exch, VFS_IN_WAIT_HANDLE, &ret);
     824       
     825        vfs_exchange_end(exch);
     826       
     827        if (rc == EOK)
     828                return (int) ret;
     829       
     830        return (int) rc;
     831}
     832
    850833/** @}
    851834 */
Note: See TracChangeset for help on using the changeset viewer.