Changeset 470708da in rtems for cpukit/libblock


Ignore:
Timestamp:
05/14/10 03:59:11 (14 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.10, 4.11, 5, master
Children:
ff861b9d
Parents:
a690c003
Message:

2010-05-14 Chris Johns <chrisj@…>

  • libblock/src/flashdisk.c: Clean up on initialisation errors.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/libblock/src/flashdisk.c

    ra690c003 r470708da  
    24792479                                              c->block_size);
    24802480
    2481     sc = rtems_disk_create_phys(dev, c->block_size,
    2482                                 blocks - fd->unavail_blocks,
    2483                                 rtems_fdisk_ioctl, NULL, name);
    2484     if (sc != RTEMS_SUCCESSFUL)
    2485     {
    2486       rtems_fdisk_error ("disk create phy failed");
    2487       return sc;
    2488     }
    2489 
    2490     sc = rtems_semaphore_create (rtems_build_name ('F', 'D', 'S', 'K'), 1,
    2491                                  RTEMS_PRIORITY | RTEMS_BINARY_SEMAPHORE |
    2492                                  RTEMS_INHERIT_PRIORITY, 0, &fd->lock);
    2493     if (sc != RTEMS_SUCCESSFUL)
    2494     {
    2495       rtems_fdisk_error ("disk lock create failed");
    2496       return sc;
    2497     }
    2498 
    24992481    /*
    25002482     * One copy buffer of a page size.
     
    25142496      return RTEMS_NO_MEMORY;
    25152497
     2498    sc = rtems_semaphore_create (rtems_build_name ('F', 'D', 'S', 'K'), 1,
     2499                                 RTEMS_PRIORITY | RTEMS_BINARY_SEMAPHORE |
     2500                                 RTEMS_INHERIT_PRIORITY, 0, &fd->lock);
     2501    if (sc != RTEMS_SUCCESSFUL)
     2502    {
     2503      rtems_fdisk_error ("disk lock create failed");
     2504      free (fd->copy_buffer);
     2505      free (fd->blocks);
     2506      free (fd->devices);
     2507      return sc;
     2508    }
     2509
     2510    sc = rtems_disk_create_phys(dev, c->block_size,
     2511                                blocks - fd->unavail_blocks,
     2512                                rtems_fdisk_ioctl, NULL, name);
     2513    if (sc != RTEMS_SUCCESSFUL)
     2514    {
     2515      rtems_semaphore_delete (fd->lock);
     2516      rtems_disk_delete (dev);
     2517      free (fd->copy_buffer);
     2518      free (fd->blocks);
     2519      free (fd->devices);
     2520      rtems_fdisk_error ("disk create phy failed");
     2521      return sc;
     2522    }
     2523
    25162524    for (device = 0; device < c->device_count; device++)
    25172525    {
     
    25252533                                             sizeof (rtems_fdisk_segment_ctl));
    25262534      if (!fd->devices[device].segments)
     2535      {
     2536        rtems_disk_delete (dev);
     2537        rtems_semaphore_delete (fd->lock);
     2538        free (fd->copy_buffer);
     2539        free (fd->blocks);
     2540        free (fd->devices);
    25272541        return RTEMS_NO_MEMORY;
    2528 
     2542      }
     2543     
    25292544      sc = fd->devices[device].segments;
    25302545
     
    25532568    ret = rtems_fdisk_recover_block_mappings (fd);
    25542569    if (ret)
     2570    {
     2571      rtems_disk_delete (dev);
     2572      rtems_semaphore_delete (fd->lock);
     2573      free (fd->copy_buffer);
     2574      free (fd->blocks);
     2575      free (fd->devices);
    25552576      rtems_fdisk_error ("recovery of disk failed: %s (%d)",
    25562577                         strerror (ret), ret);
    2557 
     2578    }
     2579   
    25582580    ret = rtems_fdisk_compact (fd);
    25592581    if (ret)
     2582    {
     2583      rtems_disk_delete (dev);
     2584      rtems_semaphore_delete (fd->lock);
     2585      free (fd->copy_buffer);
     2586      free (fd->blocks);
     2587      free (fd->devices);
    25602588      rtems_fdisk_error ("compacting of disk failed: %s (%d)",
    25612589                         strerror (ret), ret);
     2590    }
    25622591  }
    25632592
Note: See TracChangeset for help on using the changeset viewer.