Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932177AbVKES2E (ORCPT ); Sat, 5 Nov 2005 13:28:04 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932170AbVKES2E (ORCPT ); Sat, 5 Nov 2005 13:28:04 -0500 Received: from smtp.mailbox.co.uk ([195.82.125.32]:44681 "EHLO smtp.mailbox.co.uk") by vger.kernel.org with ESMTP id S932177AbVKES2A (ORCPT ); Sat, 5 Nov 2005 13:28:00 -0500 Date: Sat, 5 Nov 2005 18:27:28 +0000 From: Jon Masters To: Andrew Morton , Linux Kernel Subject: PATCH: fix-readonly-policy-use-and-floppy-ro-rw-status Message-ID: <20051105182728.GB27767@apogee.jonmasters.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4865 Lines: 155 [PATCH]: This modifies the gendisk and hd_struct structs to replace "policy" with "readonly" (as that's the only use for this field). It also introduces a new function disk_read_only, which behaves like the corresponding device functions do. I've also replaced direct usage of the old policy fields with calls to the appropriate function. Signed-off-by: Jon Masters diff -urN linux-2.6.14/drivers/block/floppy.c linux-2.6.14_new/drivers/block/floppy.c --- linux-2.6.14/drivers/block/floppy.c 2005-10-28 01:02:08.000000000 +0100 +++ linux-2.6.14_new/drivers/block/floppy.c 2005-11-05 15:30:05.000000000 +0000 @@ -3714,6 +3714,13 @@ USETF(FD_VERIFY); } + /* set underlying gendisk readonly state to reflect real ro/rw status */ + if (UTESTF(FD_DISK_WRITABLE)) { + set_device_ro(inode->i_bdev, 0); + } else { + set_device_ro(inode->i_bdev, 1); + } + if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (filp->f_flags & O_EXCL))) goto out2; diff -urN linux-2.6.14/drivers/block/genhd.c linux-2.6.14_new/drivers/block/genhd.c --- linux-2.6.14/drivers/block/genhd.c 2005-10-28 01:02:08.000000000 +0100 +++ linux-2.6.14_new/drivers/block/genhd.c 2005-11-05 16:17:18.000000000 +0000 @@ -655,22 +655,22 @@ EXPORT_SYMBOL(put_disk); -void set_device_ro(struct block_device *bdev, int flag) +void set_device_ro(struct block_device *bdev, int state) { if (bdev->bd_contains != bdev) - bdev->bd_part->policy = flag; + bdev->bd_part->readonly = state; else - bdev->bd_disk->policy = flag; + bdev->bd_disk->readonly = state; } EXPORT_SYMBOL(set_device_ro); -void set_disk_ro(struct gendisk *disk, int flag) +void set_disk_ro(struct gendisk *disk, int state) { int i; - disk->policy = flag; + disk->readonly = state; for (i = 0; i < disk->minors - 1; i++) - if (disk->part[i]) disk->part[i]->policy = flag; + if (disk->part[i]) disk->part[i]->readonly = state; } EXPORT_SYMBOL(set_disk_ro); @@ -680,13 +680,23 @@ if (!bdev) return 0; else if (bdev->bd_contains != bdev) - return bdev->bd_part->policy; + return bdev->bd_part->readonly; else - return bdev->bd_disk->policy; + return bdev->bd_disk->readonly; } EXPORT_SYMBOL(bdev_read_only); +int disk_read_only(struct gendisk *disk) +{ + if (!disk) + return 0; + + return (disk->readonly); +} + +EXPORT_SYMBOL(disk_read_only); + int invalidate_partition(struct gendisk *disk, int index) { int res = 0; diff -urN linux-2.6.14/drivers/ide/ide-cd.c linux-2.6.14_new/drivers/ide/ide-cd.c --- linux-2.6.14/drivers/ide/ide-cd.c 2005-10-28 01:02:08.000000000 +0100 +++ linux-2.6.14_new/drivers/ide/ide-cd.c 2005-11-05 17:27:58.000000000 +0000 @@ -313,7 +313,7 @@ #include #include #include - + #include /* For SCSI -> ATAPI command conversion */ #include @@ -1873,7 +1873,8 @@ /* * disk has become write protected */ - if (g->policy) { + + if (disk_read_only(g)) { cdrom_end_request(drive, 0); return ide_stopped; } diff -urN linux-2.6.14/drivers/md/dm-ioctl.c linux-2.6.14_new/drivers/md/dm-ioctl.c --- linux-2.6.14/drivers/md/dm-ioctl.c 2005-10-28 01:02:08.000000000 +0100 +++ linux-2.6.14_new/drivers/md/dm-ioctl.c 2005-11-05 17:27:37.000000000 +0000 @@ -538,7 +538,7 @@ } else param->open_count = -1; - if (disk->policy) + if (disk_read_only(disk)) param->flags |= DM_READONLY_FLAG; param->event_nr = dm_get_event_nr(md); diff -urN linux-2.6.14/include/linux/genhd.h linux-2.6.14_new/include/linux/genhd.h --- linux-2.6.14/include/linux/genhd.h 2005-10-28 01:02:08.000000000 +0100 +++ linux-2.6.14_new/include/linux/genhd.h 2005-11-05 16:19:48.000000000 +0000 @@ -79,7 +79,7 @@ sector_t nr_sects; struct kobject kobj; unsigned reads, read_sectors, writes, write_sectors; - int policy, partno; + int readonly, partno; }; #define GENHD_FL_REMOVABLE 1 @@ -116,7 +116,7 @@ struct kobject kobj; struct timer_rand_state *random; - int policy; + int readonly; /* needed for underlying media */ atomic_t sync_io; /* RAID */ unsigned long stamp, stamp_idle; @@ -230,8 +230,9 @@ extern void unlink_gendisk(struct gendisk *gp); extern struct gendisk *get_gendisk(dev_t dev, int *part); -extern void set_device_ro(struct block_device *bdev, int flag); -extern void set_disk_ro(struct gendisk *disk, int flag); +extern void set_device_ro(struct block_device *bdev, int state); +extern void set_disk_ro(struct gendisk *disk, int state); +extern int disk_read_only(struct gendisk *disk); /* drivers/char/random.c */ extern void add_disk_randomness(struct gendisk *disk); - 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/