Changeset 4452366 in mainline


Ignore:
Timestamp:
2008-05-16T21:03:46Z (17 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
78a1b7b
Parents:
1a60fee
Message:

Introduce futex for protecting the list of unused structures in FAT server.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/fat/fat_idx.c

    r1a60fee r4452366  
    6969} unused_t;
    7070
     71/** Futex protecting the list of unused structures. */
     72static futex_t unused_futex = FUTEX_INITIALIZER;
     73
     74/** List of unused structures. */
    7175static LIST_INITIALIZE(unused_head);
    7276
     
    188192       
    189193        assert(index);
     194        futex_down(&unused_futex);
    190195        for (l = unused_head.next; l != &unused_head; l = l->next) {
    191196                u = list_get_instance(l, unused_t, link);
     
    193198                        goto hit;
    194199        }
    195 
     200        futex_up(&unused_futex);
     201       
    196202        /* dev_handle not found */
    197203        return false;   
     
    206212                        *index = u->next++;
    207213                        --u->remaining;
     214                        futex_up(&unused_futex);
    208215                        return true;
    209216                }
     
    218225                        free(f);
    219226                }
     227                futex_up(&unused_futex);
    220228                return true;
    221229        }
     
    225233         * too many zero-sized nodes).
    226234         */
     235        futex_up(&unused_futex);
    227236        return false;
    228237}
     
    253262        unused_t *u;
    254263
     264        futex_down(&unused_futex);
    255265        for (l = unused_head.next; l != &unused_head; l = l->next) {
    256266                u = list_get_instance(l, unused_t, link);
     
    258268                        goto hit;
    259269        }
     270        futex_up(&unused_futex);
    260271
    261272        /* should not happen */
     
    267278                u->next--;
    268279                u->remaining++;
    269                 return;
    270280        } else {
    271281                /*
     
    283293                                        try_coalesce_intervals(lnk->prev, lnk,
    284294                                            lnk);
     295                                futex_up(&unused_futex);
    285296                                return;
    286297                        }
     
    290301                                        try_coalesce_intervals(lnk, lnk->next,
    291302                                            lnk);
     303                                futex_up(&unused_futex);
    292304                                return;
    293305                        }
     
    300312                                n->last = index;
    301313                                list_insert_before(&n->link, lnk);
     314                                futex_up(&unused_futex);
    302315                                return;
    303316                        }
     
    313326                list_append(&n->link, &u->freed_head);
    314327        }
     328        futex_up(&unused_futex);
    315329}
    316330
Note: See TracChangeset for help on using the changeset viewer.