Changeset 1412b7ee in mainline for uspace/srv/fs/ext4fs/ext4fs_ops.c


Ignore:
Timestamp:
2014-02-01T21:46:42Z (10 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
3eb0c85
Parents:
680708d (diff), 0dd022ec (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

mainline changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/ext4fs/ext4fs_ops.c

    r680708d r1412b7ee  
    259259        rc = ext4fs_node_get_core(rfn, eparent->instance, inode);
    260260        if (rc != EOK)
    261                 return rc;
    262        
     261                goto exit;
     262
     263exit:
     264        ;
     265
    263266        /* Destroy search result structure */
    264         return ext4_directory_destroy_result(&result);
     267        int const rc2 = ext4_directory_destroy_result(&result);
     268        return rc == EOK ? rc2 : rc;
    265269}
    266270
     
    10021006        *lnkcnt = 1;
    10031007       
    1004         ext4fs_node_put(root_node);
    1005        
    1006         return EOK;
     1008        return ext4fs_node_put(root_node);
    10071009}
    10081010
     
    10931095        }
    10941096       
    1095         ext4_filesystem_put_inode_ref(inode_ref);
    1096        
    1097         return rc;
     1097        int const rc2 = ext4_filesystem_put_inode_ref(inode_ref);
     1098       
     1099        return rc == EOK ? rc2 : rc;
    10981100}
    10991101
     
    12681270                memset(buffer, 0, bytes);
    12691271               
    1270                 async_data_read_finalize(callid, buffer, bytes);
     1272                rc = async_data_read_finalize(callid, buffer, bytes);
    12711273                *rbytes = bytes;
    12721274               
    12731275                free(buffer);
    1274                 return EOK;
     1276                return rc;
    12751277        }
    12761278       
     
    12841286       
    12851287        assert(offset_in_block + bytes <= block_size);
    1286         async_data_read_finalize(callid, block->data + offset_in_block, bytes);
     1288        rc = async_data_read_finalize(callid, block->data + offset_in_block, bytes);
     1289        if (rc != EOK) {
     1290                block_put(block);
     1291                return rc;
     1292        }
    12871293       
    12881294        rc = block_put(block);
     
    13161322        size_t len;
    13171323        if (!async_data_write_receive(&callid, &len)) {
    1318                 ext4fs_node_put(fn);
    1319                 async_answer_0(callid, EINVAL);
    1320                 return EINVAL;
     1324                rc = EINVAL;
     1325                async_answer_0(callid, rc);
     1326                goto exit;
    13211327        }
    13221328       
     
    13411347            &fblock);
    13421348        if (rc != EOK) {
    1343                 ext4fs_node_put(fn);
    13441349                async_answer_0(callid, rc);
    1345                 return rc;
     1350                goto exit;
    13461351        }
    13471352       
     
    13591364                                    &fblock, true);
    13601365                                if (rc != EOK) {
    1361                                         ext4fs_node_put(fn);
    13621366                                        async_answer_0(callid, rc);
    1363                                         return rc;
     1367                                        goto exit;
    13641368                                }
    13651369                        }
     
    13681372                            &fblock, false);
    13691373                        if (rc != EOK) {
    1370                                 ext4fs_node_put(fn);
    13711374                                async_answer_0(callid, rc);
    1372                                 return rc;
     1375                                goto exit;
    13731376                        }
    13741377                } else {
    13751378                        rc = ext4_balloc_alloc_block(inode_ref, &fblock);
    13761379                        if (rc != EOK) {
    1377                                 ext4fs_node_put(fn);
    13781380                                async_answer_0(callid, rc);
    1379                                 return rc;
     1381                                goto exit;
    13801382                        }
    13811383                       
     
    13841386                        if (rc != EOK) {
    13851387                                ext4_balloc_free_block(inode_ref, fblock);
    1386                                 ext4fs_node_put(fn);
    13871388                                async_answer_0(callid, rc);
    1388                                 return rc;
     1389                                goto exit;
    13891390                        }
    13901391                }
     
    13981399        rc = block_get(&write_block, service_id, fblock, flags);
    13991400        if (rc != EOK) {
    1400                 ext4fs_node_put(fn);
    14011401                async_answer_0(callid, rc);
    1402                 return rc;
    1403         }
    1404        
    1405         if (flags == BLOCK_FLAGS_NOREAD)
     1402                goto exit;
     1403        }
     1404       
     1405        if (flags == BLOCK_FLAGS_NOREAD) {
    14061406                memset(write_block->data, 0, block_size);
    1407        
     1407                write_block->dirty = true;
     1408        }
     1409
    14081410        rc = async_data_write_finalize(callid, write_block->data +
    14091411            (pos % block_size), bytes);
    14101412        if (rc != EOK) {
    1411                 ext4fs_node_put(fn);
    1412                 return rc;
    1413         }
    1414        
    1415         write_block->dirty = true;
    1416        
     1413                block_put(write_block);
     1414                goto exit;
     1415        }
     1416
    14171417        rc = block_put(write_block);
    1418         if (rc != EOK) {
    1419                 ext4fs_node_put(fn);
    1420                 return rc;
    1421         }
    1422        
     1418        if (rc != EOK)
     1419                goto exit;
     1420
    14231421        /* Do some counting */
    14241422        uint32_t old_inode_size = ext4_inode_get_size(fs->superblock,
     
    14281426                inode_ref->dirty = true;
    14291427        }
    1430        
     1428
    14311429        *nsize = ext4_inode_get_size(fs->superblock, inode_ref->inode);
    14321430        *wbytes = bytes;
    1433        
    1434         return ext4fs_node_put(fn);
     1431
     1432exit:
     1433        ;
     1434
     1435        int const rc2 = ext4fs_node_put(fn);
     1436        return rc == EOK ? rc2 : rc;
    14351437}
    14361438
     
    14581460       
    14591461        rc = ext4_filesystem_truncate_inode(inode_ref, new_size);
    1460         ext4fs_node_put(fn);
    1461        
    1462         return rc;
     1462        int const rc2 = ext4fs_node_put(fn);
     1463       
     1464        return rc == EOK ? rc2 : rc;
    14631465}
    14641466
Note: See TracChangeset for help on using the changeset viewer.