Changeset 12956e57 in mainline for uspace/srv/bd/file_bd/file_bd.c


Ignore:
Timestamp:
2009-06-20T19:31:19Z (15 years ago)
Author:
Jiri Svoboda <jirik.svoboda@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2dfd9fa
Parents:
ac47b7c2
Message:

Use fibril synchronization in bd drivers. Use per-disk locks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/file_bd/file_bd.c

    rac47b7c2 r12956e57  
    4545#include <async.h>
    4646#include <as.h>
    47 #include <futex.h>
     47#include <fibril_sync.h>
    4848#include <devmap.h>
    4949#include <sys/types.h>
     
    5757
    5858static dev_handle_t dev_handle;
    59 static atomic_t dev_futex = FUTEX_INITIALIZER;
     59static fibril_mutex_t dev_lock;
    6060
    6161static int file_bd_init(const char *fname);
     
    106106        if (img == NULL)
    107107                return EINVAL;
     108
     109        fibril_mutex_initialize(&dev_lock);
    108110
    109111        return EOK;
     
    170172        size_t n_rd;
    171173
    172         printf("file_bd_read\n");
    173         futex_down(&dev_futex);
    174 
    175         printf("seek\n");
     174        fibril_mutex_lock(&dev_lock);
     175
    176176        fseek(img, blk_idx * size, SEEK_SET);
    177         printf("read\n");
    178177        n_rd = fread(buf, 1, size, img);
    179         printf("done\n");
    180 
    181         printf("done\n");
    182178
    183179        if (ferror(img)) {
    184                 futex_up(&dev_futex);
     180                fibril_mutex_unlock(&dev_lock);
    185181                return EIO;     /* Read error */
    186182        }
    187183
    188         futex_up(&dev_futex);
     184        fibril_mutex_unlock(&dev_lock);
    189185
    190186        if (n_rd < size)
     
    198194        size_t n_wr;
    199195
    200         futex_down(&dev_futex);
     196        fibril_mutex_lock(&dev_lock);
    201197
    202198        fseek(img, blk_idx * size, SEEK_SET);
     
    204200
    205201        if (ferror(img) || n_wr < size) {
    206                 futex_up(&dev_futex);
     202                fibril_mutex_unlock(&dev_lock);
    207203                return EIO;     /* Write error */
    208204        }
    209205
    210         futex_up(&dev_futex);
     206        fibril_mutex_unlock(&dev_lock);
    211207
    212208        return EOK;
Note: See TracChangeset for help on using the changeset viewer.