Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset f7d90eb in mainline


Ignore:
Timestamp:
2011-08-14T07:44:32Z (10 years ago)
Author:
Oleg Romanenko <romanenko.oleg@…>
Branches:
lfn, master
Children:
a18bd22
Parents:
7be14db
Message:

exFAT: implement bitmap_alloc_clusters

Location:
uspace/srv/fs/exfat
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/exfat/exfat_fat.c

    r7be14db rf7d90eb  
    476476}
    477477
     478int bitmap_is_free(exfat_bs_t *bs, devmap_handle_t devmap_handle,
     479    exfat_cluster_t clst)
     480{
     481        /* TODO */
     482        return EOK;
     483}
     484
     485int bitmap_set_clusters(exfat_bs_t *bs, devmap_handle_t devmap_handle,
     486    exfat_cluster_t firstc, exfat_cluster_t count)
     487{
     488        /* TODO */
     489        return EOK;
     490}
     491
     492
    478493int bitmap_alloc_clusters(exfat_bs_t *bs, devmap_handle_t devmap_handle,
    479494    exfat_cluster_t *firstc, exfat_cluster_t count)
    480495{
    481         /* TODO */
    482         return EOK;
     496        exfat_cluster_t startc, endc;
     497        startc = EXFAT_CLST_FIRST;
     498
     499        while (startc < DATA_CNT(bs)+2) {
     500                if (bitmap_is_free(bs, devmap_handle, startc) == EOK) {
     501                        endc = startc+1;
     502                        while (bitmap_is_free(bs, devmap_handle, endc) == EOK) {
     503                                if ((endc - startc)+1 == count){
     504                                        *firstc = startc;
     505                                        return bitmap_set_clusters(bs, devmap_handle, startc, count);
     506                                }
     507                                else
     508                                        endc++;
     509                        }
     510                        startc = endc+1;
     511                }
     512                else
     513                        startc++;
     514        }
     515        return ENOSPC;
    483516}
    484517
  • uspace/srv/fs/exfat/exfat_fat.h

    r7be14db rf7d90eb  
    8484extern int bitmap_replicate_clusters(struct exfat_bs *bs, struct exfat_node *nodep);
    8585
     86extern int bitmap_is_free(struct exfat_bs *bs, devmap_handle_t devmap_handle,
     87    exfat_cluster_t clst);
     88extern int bitmap_set_clusters(struct exfat_bs *bs, devmap_handle_t devmap_handle,
     89    exfat_cluster_t firstc, exfat_cluster_t count);
     90
    8691extern int exfat_append_clusters(struct exfat_bs *, struct exfat_node *,
    8792    exfat_cluster_t, exfat_cluster_t);
  • uspace/srv/fs/exfat/exfat_ops.c

    r7be14db rf7d90eb  
    673673        if (childp->lnkcnt == 1) {
    674674                /*
    675                  * On FAT, we don't support multiple hard links.
     675                 * We don't support multiple hard links.
    676676                 */
    677677                fibril_mutex_unlock(&childp->lock);
Note: See TracChangeset for help on using the changeset viewer.