Changeset 4f9ab1e in mainline for uspace/srv/vfs/vfs_lookup.c


Ignore:
Timestamp:
2017-03-18T14:25:47Z (7 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f6b6b40
Parents:
7f59d6c
Message:

vfs_node_peek() should add a reference to the node

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/vfs/vfs_lookup.c

    r7f59d6c r4f9ab1e  
    314314                if (nlen > 0) {
    315315                        base = vfs_node_peek(&res);
    316                         if (base == NULL || base->mount == NULL) {
     316                        if (!base) {
    317317                                rc = ENOENT;
    318318                                goto out;
    319319                        }
     320                        if (!base->mount) {
     321                                vfs_node_put(base);
     322                                rc = ENOENT;
     323                                goto out;
     324                        }
     325                        vfs_node_put(base);
    320326                        if (lflag & L_DISABLE_MOUNTS) {
    321327                                rc = EXDEV;
     
    330336        if (result != NULL) {
    331337                /* The found file may be a mount point. Try to cross it. */
    332                 if (!(lflag & (L_MP|L_DISABLE_MOUNTS))) {
     338                if (!(lflag & (L_MP | L_DISABLE_MOUNTS))) {
    333339                        base = vfs_node_peek(&res);
    334                         if (base != NULL && base->mount != NULL) {
    335                                 while (base->mount != NULL) {
    336                                         base = base->mount;
     340                        if (base && base->mount) {
     341                                while (base->mount) {
     342                                        vfs_node_addref(base->mount);
     343                                        vfs_node_t *nbase = base->mount;
     344                                        vfs_node_put(base);
     345                                        base = nbase;
    337346                                }
    338347                               
    339                                 result->triplet = *(vfs_triplet_t *)base;
     348                                result->triplet = *((vfs_triplet_t *) base);
    340349                                result->type = base->type;
    341                                 result->size = base->size;                             
    342                                 goto out;
    343                         }
     350                                result->size = base->size;
     351                                vfs_node_put(base);
     352                                goto out;
     353                        }
     354                        if (base)
     355                                vfs_node_put(base);
    344356                }
    345357
Note: See TracChangeset for help on using the changeset viewer.