Changeset 4b4668e in mainline for uspace/srv/fs/fat/fat_ops.c


Ignore:
Timestamp:
2009-09-21T16:00:44Z (15 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
46c0498
Parents:
4098e38
Message:

Make fat_link() return an error code instead of hitting an assertion on an I/O
error.

File:
1 edited

Legend:

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

    r4098e38 r4b4668e  
    445445        for (i = 0; i < blocks; i++) {
    446446                rc = fat_block_get(&b, bs, parentp, i, BLOCK_FLAGS_NONE);
    447                 assert(rc == EOK);
     447                if (rc != EOK) {
     448                        fibril_mutex_unlock(&parentp->idx->lock);
     449                        return rc;
     450                }
    448451                for (j = 0; j < dps; j++) {
    449452                        d = ((fat_dentry_t *)b->data) + j;
     
    460463                }
    461464                rc = block_put(b);
    462                 assert(rc == EOK);
     465                if (rc != EOK) {
     466                        fibril_mutex_unlock(&parentp->idx->lock);
     467                        return rc;
     468                }
    463469        }
    464470        j = 0;
     
    478484        }
    479485        rc = fat_zero_cluster(bs, parentp->idx->dev_handle, mcl);
    480         assert(rc == EOK);
     486        if (rc != EOK) {
     487                fibril_mutex_unlock(&parentp->idx->lock);
     488                return rc;
     489        }
    481490        rc = fat_append_clusters(bs, parentp, mcl);
    482         assert(rc == EOK);
     491        if (rc != EOK) {
     492                fibril_mutex_unlock(&parentp->idx->lock);
     493                return rc;
     494        }
    483495        parentp->size += bps * bs->spc;
    484496        parentp->dirty = true;          /* need to sync node */
    485497        rc = fat_block_get(&b, bs, parentp, i, BLOCK_FLAGS_NONE);
    486         assert(rc == EOK);
     498        if (rc != EOK) {
     499                fibril_mutex_unlock(&parentp->idx->lock);
     500                return rc;
     501        }
    487502        d = (fat_dentry_t *)b->data;
    488503
     
    498513        b->dirty = true;                /* need to sync block */
    499514        rc = block_put(b);
    500         assert(rc == EOK);
    501515        fibril_mutex_unlock(&parentp->idx->lock);
     516        if (rc != EOK)
     517                return rc;
    502518
    503519        fibril_mutex_lock(&childp->idx->lock);
     
    510526         */
    511527        rc = fat_block_get(&b, bs, childp, 0, BLOCK_FLAGS_NONE);
    512         assert(rc == EOK);
     528        if (rc != EOK) {
     529                /*
     530                 * Rather than returning an error, simply skip the creation of
     531                 * these two entries.
     532                 */
     533                goto skip_dots;
     534        }
    513535        d = (fat_dentry_t *)b->data;
    514536        if (fat_classify_dentry(d) == FAT_DENTRY_LAST ||
     
    534556        }
    535557        b->dirty = true;                /* need to sync block */
    536         rc = block_put(b);
    537         assert(rc == EOK);
     558        /*
     559         * Ignore the return value as we would have fallen through on error
     560         * anyway.
     561         */
     562        (void) block_put(b);
     563skip_dots:
    538564
    539565        childp->idx->pfc = parentp->firstc;
Note: See TracChangeset for help on using the changeset viewer.