lkml.org 
[lkml]   [2006]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[RFC] PATCH to fix rescan_partitions to return errors properly
    [resending]

    Hi,

    Currently the rescan_partition returns 0 (success), even if it is unable
    to rescan the partition information ( may be due to disks offline, I/O
    error reading the table or unknown partition ). This would make ioctl()
    calls succeed for BLKRRPART requests even if partitions were not scanned
    properly, which is not a good thing to do.

    Attached here is patch to fix the issue. The patch makes
    rescan_partition to return -EINVAL for unknown partitions and -EIO for
    disk I/O errors ( or when disks are offline ).

    Comments ?

    Thanks,

    Suzuki K P <suzuki@in.ibm.com>
    Linux Technology Centre,
    IBM Systems & Technology Labs.




    * Fix recscan_partitions to return error when the partition is unknown
    or there is an I/O error reading the partition information.


    Signed Off by : Suzuki K P <suzuki@in.ibm.com>

    Index: linux-2.6.18/fs/partitions/check.c
    ===================================================================
    --- linux-2.6.18.orig/fs/partitions/check.c 2006-09-26
    04:41:55.000000000 +0530
    +++ linux-2.6.18/fs/partitions/check.c 2006-09-26 05:09:29.000000000 +0530
    @@ -177,7 +177,7 @@
    else if (warn_no_part)
    printk(" unable to read partition table\n");
    kfree(state);
    - return NULL;
    + return ERR_PTR(res);
    }

    /*
    @@ -458,8 +458,13 @@
    delete_partition(disk, p);
    if (disk->fops->revalidate_disk)
    disk->fops->revalidate_disk(disk);
    - if (!get_capacity(disk) || !(state = check_partition(disk, bdev)))
    - return 0;
    + if (!get_capacity(disk))
    + return -EINVAL;
    + state = check_partition(disk, bdev);
    + if (!state)
    + return -EINVAL;
    + if (IS_ERR(state))
    + return -EIO;
    for (p = 1; p < state->limit; p++) {
    sector_t size = state->parts[p].size;
    sector_t from = state->parts[p].from;


    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-10-04 03:03    [W:0.022 / U:94.328 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site