|
From: Laurence L. <la...@us...> - 2007-06-11 05:10:02
|
Update of /cvsroot/xbox-linux/kernel-2.6/fs/partitions In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv5988/fs/partitions Modified Files: Kconfig check.c Log Message: Merge 2.6.21 Index: Kconfig =================================================================== RCS file: /cvsroot/xbox-linux/kernel-2.6/fs/partitions/Kconfig,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- Kconfig 11 Jun 2007 05:08:52 -0000 1.14 +++ Kconfig 11 Jun 2007 05:10:00 -0000 1.15 @@ -235,8 +235,7 @@ select CRC32 help Say Y here if you would like to use hard disks under Linux which - were partitioned using EFI GPT. Presently only useful on the - IA-64 platform. + were partitioned using EFI GPT. config XBOX_PARTITION bool "Xbox Partition support (EXPERIMENTAL)" if PARTITION_ADVANCED && EXPERIMENTAL && BROKEN Index: check.c =================================================================== RCS file: /cvsroot/xbox-linux/kernel-2.6/fs/partitions/check.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- check.c 11 Jun 2007 05:08:52 -0000 1.19 +++ check.c 11 Jun 2007 05:10:00 -0000 1.20 @@ -188,7 +188,7 @@ #endif if (res > 0) return state; - if (!err) + if (err) /* The partition is unrecognized. So report I/O errors if there were any */ res = err; if (!res) @@ -366,14 +366,13 @@ p->ios[0] = p->ios[1] = 0; p->sectors[0] = p->sectors[1] = 0; sysfs_remove_link(&p->kobj, "subsystem"); - if (p->holder_dir) - kobject_unregister(p->holder_dir); + kobject_unregister(p->holder_dir); kobject_uevent(&p->kobj, KOBJ_REMOVE); kobject_del(&p->kobj); kobject_put(&p->kobj); } -void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len) +void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len, int flags) { struct hd_struct *p; @@ -398,6 +397,15 @@ if (!disk->part_uevent_suppress) kobject_uevent(&p->kobj, KOBJ_ADD); sysfs_create_link(&p->kobj, &block_subsys.kset.kobj, "subsystem"); + if (flags & ADDPART_FLAG_WHOLEDISK) { + static struct attribute addpartattr = { + .name = "whole_disk", + .mode = S_IRUSR | S_IRGRP | S_IROTH, + .owner = THIS_MODULE, + }; + + sysfs_create_file(&p->kobj, &addpartattr); + } partition_sysfs_add_subdir(p); disk->part[part-1] = p; } @@ -541,7 +549,7 @@ if (!get_capacity(disk) || !(state = check_partition(disk, bdev))) return 0; if (IS_ERR(state)) /* I/O error reading the partition table */ - return PTR_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; @@ -551,9 +559,9 @@ printk(" %s: p%d exceeds device capacity\n", disk->disk_name, p); } - add_partition(disk, p, from, size); + add_partition(disk, p, from, size, state->parts[p].flags); #ifdef CONFIG_BLK_DEV_MD - if (state->parts[p].flags) + if (state->parts[p].flags & ADDPART_FLAG_RAID) md_autodetect_dev(bdev->bd_dev+p); #endif } @@ -602,10 +610,8 @@ disk->stamp = 0; kobject_uevent(&disk->kobj, KOBJ_REMOVE); - if (disk->holder_dir) - kobject_unregister(disk->holder_dir); - if (disk->slave_dir) - kobject_unregister(disk->slave_dir); + kobject_unregister(disk->holder_dir); + kobject_unregister(disk->slave_dir); if (disk->driverfs_dev) { char *disk_name = make_block_name(disk); sysfs_remove_link(&disk->kobj, "device"); |