summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/filesystems/porting18
-rw-r--r--arch/sparc/kernel/signal.c6
-rw-r--r--arch/sparc64/kernel/signal.c6
-rw-r--r--arch/sparc64/kernel/signal32.c6
-rw-r--r--drivers/block/ll_rw_blk.c16
-rw-r--r--drivers/cdrom/cdrom.c50
-rw-r--r--drivers/char/pty.c2
-rw-r--r--drivers/char/tty_io.c2
-rw-r--r--drivers/ide/ide-cd.c8
-rw-r--r--drivers/md/linear.c7
-rw-r--r--drivers/md/md.c148
-rw-r--r--drivers/md/multipath.c440
-rw-r--r--drivers/md/raid1.c450
-rw-r--r--drivers/md/raid5.c504
-rw-r--r--drivers/scsi/sr.c4
-rw-r--r--fs/Makefile2
-rw-r--r--fs/block_dev.c1
-rw-r--r--fs/buffer.c16
-rw-r--r--fs/devpts/Makefile2
-rw-r--r--fs/devpts/devpts_i.h41
-rw-r--r--fs/devpts/inode.c216
-rw-r--r--fs/devpts/root.c142
-rw-r--r--fs/inode.c2
-rw-r--r--fs/jfs/jfs_incore.h2
-rw-r--r--fs/jfs/jfs_logmgr.c2
-rw-r--r--fs/jfs/jfs_mount.c2
-rw-r--r--fs/locks.c5
-rw-r--r--fs/nfsd/export.c17
-rw-r--r--fs/nfsd/nfs3xdr.c2
-rw-r--r--fs/nfsd/nfsfh.c12
-rw-r--r--fs/nfsd/vfs.c12
-rw-r--r--fs/partitions/check.c7
-rw-r--r--fs/proc/array.c10
-rw-r--r--fs/smbfs/inode.c2
-rw-r--r--fs/stat.c2
-rw-r--r--include/linux/bio.h2
-rw-r--r--include/linux/buffer_head.h2
-rw-r--r--include/linux/cdrom.h10
-rw-r--r--include/linux/devpts_fs.h49
-rw-r--r--include/linux/fs.h3
-rw-r--r--include/linux/kdev_t.h3
-rw-r--r--include/linux/nfsd/export.h4
-rw-r--r--include/linux/nfsd/nfsfh.h4
-rw-r--r--include/linux/raid/linear.h1
-rw-r--r--include/linux/raid/md.h4
-rw-r--r--include/linux/raid/md_k.h29
-rw-r--r--include/linux/raid/multipath.h1
-rw-r--r--include/linux/raid/raid1.h1
-rw-r--r--include/linux/raid/raid5.h1
-rw-r--r--include/linux/reiserfs_fs.h3
-rw-r--r--include/linux/reiserfs_fs_sb.h2
-rw-r--r--include/linux/smb.h2
-rw-r--r--kernel/ksyms.c2
-rw-r--r--net/socket.c2
54 files changed, 915 insertions, 1374 deletions
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting
index b88f356a5919..2dcccf3d8a3a 100644
--- a/Documentation/filesystems/porting
+++ b/Documentation/filesystems/porting
@@ -230,3 +230,21 @@ anything from oops to silent memory corruption.
Use bdev_read_only(bdev) instead of is_read_only(kdev). The latter
is still alive, but only because of the mess in drivers/s390/block/dasd.c.
As soon as it gets fixed is_read_only() will die.
+
+---
+[mandatory]
+
+ is_read_only() is gone; use bdev_read_only() instead.
+
+---
+[mandatory]
+
+ destroy_buffers() is gone; use invalidate_bdev().
+
+---
+[mandatory]
+
+ fsync_dev() is gone; use fsync_bdev(). NOTE: lvm breakage is
+deliberate; as soon as struct block_device * is propagated in a reasonable
+way by that code fixing will become trivial; until then nothing can be
+done.
diff --git a/arch/sparc/kernel/signal.c b/arch/sparc/kernel/signal.c
index 743a2eed2cd5..7dfb666b685a 100644
--- a/arch/sparc/kernel/signal.c
+++ b/arch/sparc/kernel/signal.c
@@ -1090,7 +1090,7 @@ static inline void syscall_restart(unsigned long orig_i0, struct pt_regs *regs,
#ifdef DEBUG_SIGNALS_MAPS
-#define MAPS_LINE_FORMAT "%08lx-%08lx %s %08lx %s %lu "
+#define MAPS_LINE_FORMAT "%08lx-%08lx %s %08lx %02x:%02x %lu "
static inline void read_maps (void)
{
@@ -1107,7 +1107,7 @@ static inline void read_maps (void)
char *line;
char str[5], *cp = str;
int flags;
- kdev_t dev;
+ dev_t dev;
unsigned long ino;
/*
@@ -1132,7 +1132,7 @@ static inline void read_maps (void)
buffer, PAGE_SIZE);
}
printk(MAPS_LINE_FORMAT, map->vm_start, map->vm_end, str, map->vm_pgoff << PAGE_SHIFT,
- kdevname(dev), ino);
+ MAJOR(dev), MINOR(dev), ino);
if (map->vm_file != NULL)
printk("%s\n", line);
else
diff --git a/arch/sparc64/kernel/signal.c b/arch/sparc64/kernel/signal.c
index 3edaef15cc9e..9cc20dc19033 100644
--- a/arch/sparc64/kernel/signal.c
+++ b/arch/sparc64/kernel/signal.c
@@ -633,7 +633,7 @@ static inline void syscall_restart(unsigned long orig_i0, struct pt_regs *regs,
#ifdef DEBUG_SIGNALS_MAPS
-#define MAPS_LINE_FORMAT "%016lx-%016lx %s %016lx %s %lu "
+#define MAPS_LINE_FORMAT "%016lx-%016lx %s %016lx %02x:%02x %lu "
static inline void read_maps (void)
{
@@ -650,7 +650,7 @@ static inline void read_maps (void)
char *line;
char str[5], *cp = str;
int flags;
- kdev_t dev;
+ dev_t dev;
unsigned long ino;
/*
@@ -675,7 +675,7 @@ static inline void read_maps (void)
buffer, PAGE_SIZE);
}
printk(MAPS_LINE_FORMAT, map->vm_start, map->vm_end, str, map->vm_pgoff << PAGE_SHIFT,
- kdevname(dev), ino);
+ MAJOR(dev), MINOR(dev), ino);
if (map->vm_file != NULL)
printk("%s\n", line);
else
diff --git a/arch/sparc64/kernel/signal32.c b/arch/sparc64/kernel/signal32.c
index 4a49af3a33ba..47246310aa15 100644
--- a/arch/sparc64/kernel/signal32.c
+++ b/arch/sparc64/kernel/signal32.c
@@ -1319,7 +1319,7 @@ static inline void syscall_restart32(unsigned long orig_i0, struct pt_regs *regs
#ifdef DEBUG_SIGNALS_MAPS
-#define MAPS_LINE_FORMAT "%016lx-%016lx %s %016lx %s %lu "
+#define MAPS_LINE_FORMAT "%016lx-%016lx %s %016lx %02x:%02x %lu "
static inline void read_maps (void)
{
@@ -1336,7 +1336,7 @@ static inline void read_maps (void)
char *line;
char str[5], *cp = str;
int flags;
- kdev_t dev;
+ dev_t dev;
unsigned long ino;
/*
@@ -1361,7 +1361,7 @@ static inline void read_maps (void)
buffer, PAGE_SIZE);
}
printk(MAPS_LINE_FORMAT, map->vm_start, map->vm_end, str, map->vm_pgoff << PAGE_SHIFT,
- kdevname(dev), ino);
+ MAJOR(dev), MINOR(dev), ino);
if (map->vm_file != NULL)
printk("%s\n", line);
else
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c
index bb57f0ab64a8..3dda5dc8eefb 100644
--- a/drivers/block/ll_rw_blk.c
+++ b/drivers/block/ll_rw_blk.c
@@ -1211,21 +1211,19 @@ void blk_put_request(struct request *rq)
static long ro_bits[MAX_BLKDEV][8];
-int is_read_only(kdev_t dev)
+int bdev_read_only(struct block_device *bdev)
{
int minor,major;
- major = major(dev);
- minor = minor(dev);
- if (major < 0 || major >= MAX_BLKDEV) return 0;
+ if (!bdev)
+ return 0;
+ major = MAJOR(bdev->bd_dev);
+ minor = MINOR(bdev->bd_dev);
+ if (major < 0 || major >= MAX_BLKDEV)
+ return 0;
return ro_bits[major][minor >> 5] & (1 << (minor & 31));
}
-int bdev_read_only(struct block_device *bdev)
-{
- return bdev && is_read_only(to_kdev_t(bdev->bd_dev));
-}
-
void set_device_ro(kdev_t dev,int flag)
{
int minor,major;
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
index 5092049cdb57..494aa03dc273 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -318,8 +318,9 @@ static void sanitize_format(union cdrom_addr *addr,
static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
unsigned long arg);
-int cdrom_get_last_written(kdev_t dev, long *last_written);
-int cdrom_get_next_writable(kdev_t dev, long *next_writable);
+int cdrom_get_last_written(struct cdrom_device_info *, long *);
+static int cdrom_get_next_writable(struct cdrom_device_info *, long *);
+static void cdrom_count_tracks(struct cdrom_device_info *, tracktype*);
#ifdef CONFIG_SYSCTL
static void cdrom_sysctl_register(void);
@@ -441,7 +442,7 @@ int unregister_cdrom(struct cdrom_device_info *unreg)
return 0;
}
-struct cdrom_device_info *cdrom_find_device(kdev_t dev)
+static struct cdrom_device_info *cdrom_find_device(kdev_t dev)
{
struct cdrom_device_info *cdi;
@@ -780,7 +781,7 @@ static int cdrom_load_unload(struct cdrom_device_info *cdi, int slot)
return cdi->ops->generic_packet(cdi, &cgc);
}
-int cdrom_select_disc(struct cdrom_device_info *cdi, int slot)
+static int cdrom_select_disc(struct cdrom_device_info *cdi, int slot)
{
struct cdrom_changer_info info;
int curslot;
@@ -864,7 +865,7 @@ int cdrom_media_changed(kdev_t dev)
}
/* badly broken, I know. Is due for a fixup anytime. */
-void cdrom_count_tracks(struct cdrom_device_info *cdi, tracktype* tracks)
+static void cdrom_count_tracks(struct cdrom_device_info *cdi, tracktype* tracks)
{
struct cdrom_tochdr header;
struct cdrom_tocentry entry;
@@ -1926,7 +1927,6 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
{
struct cdrom_device_ops *cdo = cdi->ops;
struct cdrom_generic_command cgc;
- kdev_t dev = cdi->dev;
char buffer[32];
int ret = 0;
@@ -2198,7 +2198,7 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
case CDROM_NEXT_WRITABLE: {
long next = 0;
cdinfo(CD_DO_IOCTL, "entering CDROM_NEXT_WRITABLE\n");
- if ((ret = cdrom_get_next_writable(dev, &next)))
+ if ((ret = cdrom_get_next_writable(cdi, &next)))
return ret;
IOCTL_OUT(arg, long, next);
return 0;
@@ -2206,7 +2206,7 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
case CDROM_LAST_WRITTEN: {
long last = 0;
cdinfo(CD_DO_IOCTL, "entering CDROM_LAST_WRITTEN\n");
- if ((ret = cdrom_get_last_written(dev, &last)))
+ if ((ret = cdrom_get_last_written(cdi, &last)))
return ret;
IOCTL_OUT(arg, long, last);
return 0;
@@ -2216,10 +2216,9 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
return -ENOTTY;
}
-int cdrom_get_track_info(kdev_t dev, __u16 track, __u8 type,
+static int cdrom_get_track_info(struct cdrom_device_info *cdi, __u16 track, __u8 type,
track_information *ti)
{
- struct cdrom_device_info *cdi = cdrom_find_device(dev);
struct cdrom_device_ops *cdo = cdi->ops;
struct cdrom_generic_command cgc;
int ret;
@@ -2246,9 +2245,8 @@ int cdrom_get_track_info(kdev_t dev, __u16 track, __u8 type,
}
/* requires CD R/RW */
-int cdrom_get_disc_info(kdev_t dev, disc_information *di)
+static int cdrom_get_disc_info(struct cdrom_device_info *cdi, disc_information *di)
{
- struct cdrom_device_info *cdi = cdrom_find_device(dev);
struct cdrom_device_ops *cdo = cdi->ops;
struct cdrom_generic_command cgc;
int ret;
@@ -2278,9 +2276,8 @@ int cdrom_get_disc_info(kdev_t dev, disc_information *di)
/* return the last written block on the CD-R media. this is for the udf
file system. */
-int cdrom_get_last_written(kdev_t dev, long *last_written)
-{
- struct cdrom_device_info *cdi = cdrom_find_device(dev);
+int cdrom_get_last_written(struct cdrom_device_info *cdi, long *last_written)
+{
struct cdrom_tocentry toc;
disc_information di;
track_information ti;
@@ -2290,17 +2287,17 @@ int cdrom_get_last_written(kdev_t dev, long *last_written)
if (!CDROM_CAN(CDC_GENERIC_PACKET))
goto use_toc;
- if ((ret = cdrom_get_disc_info(dev, &di)))
+ if ((ret = cdrom_get_disc_info(cdi, &di)))
goto use_toc;
last_track = (di.last_track_msb << 8) | di.last_track_lsb;
- if ((ret = cdrom_get_track_info(dev, last_track, 1, &ti)))
+ if ((ret = cdrom_get_track_info(cdi, last_track, 1, &ti)))
goto use_toc;
/* if this track is blank, try the previous. */
if (ti.blank) {
last_track--;
- if ((ret = cdrom_get_track_info(dev, last_track, 1, &ti)))
+ if ((ret = cdrom_get_track_info(cdi, last_track, 1, &ti)))
goto use_toc;
}
@@ -2330,9 +2327,8 @@ use_toc:
}
/* return the next writable block. also for udf file system. */
-int cdrom_get_next_writable(kdev_t dev, long *next_writable)
+static int cdrom_get_next_writable(struct cdrom_device_info *cdi, long *next_writable)
{
- struct cdrom_device_info *cdi = cdrom_find_device(dev);
disc_information di;
track_information ti;
__u16 last_track;
@@ -2341,17 +2337,17 @@ int cdrom_get_next_writable(kdev_t dev, long *next_writable)
if (!CDROM_CAN(CDC_GENERIC_PACKET))
goto use_last_written;
- if ((ret = cdrom_get_disc_info(dev, &di)))
+ if ((ret = cdrom_get_disc_info(cdi, &di)))
goto use_last_written;
last_track = (di.last_track_msb << 8) | di.last_track_lsb;
- if ((ret = cdrom_get_track_info(dev, last_track, 1, &ti)))
+ if ((ret = cdrom_get_track_info(cdi, last_track, 1, &ti)))
goto use_last_written;
/* if this track is blank, try the previous. */
if (ti.blank) {
last_track--;
- if ((ret = cdrom_get_track_info(dev, last_track, 1, &ti)))
+ if ((ret = cdrom_get_track_info(cdi, last_track, 1, &ti)))
goto use_last_written;
}
@@ -2364,7 +2360,7 @@ int cdrom_get_next_writable(kdev_t dev, long *next_writable)
return 0;
use_last_written:
- if ((ret = cdrom_get_last_written(dev, next_writable))) {
+ if ((ret = cdrom_get_last_written(cdi, next_writable))) {
*next_writable = 0;
return ret;
} else {
@@ -2373,11 +2369,7 @@ use_last_written:
}
}
-EXPORT_SYMBOL(cdrom_get_disc_info);
-EXPORT_SYMBOL(cdrom_get_track_info);
-EXPORT_SYMBOL(cdrom_get_next_writable);
EXPORT_SYMBOL(cdrom_get_last_written);
-EXPORT_SYMBOL(cdrom_count_tracks);
EXPORT_SYMBOL(register_cdrom);
EXPORT_SYMBOL(unregister_cdrom);
EXPORT_SYMBOL(cdrom_open);
@@ -2385,11 +2377,9 @@ EXPORT_SYMBOL(cdrom_release);
EXPORT_SYMBOL(cdrom_ioctl);
EXPORT_SYMBOL(cdrom_media_changed);
EXPORT_SYMBOL(cdrom_number_of_slots);
-EXPORT_SYMBOL(cdrom_select_disc);
EXPORT_SYMBOL(cdrom_mode_select);
EXPORT_SYMBOL(cdrom_mode_sense);
EXPORT_SYMBOL(init_cdrom_command);
-EXPORT_SYMBOL(cdrom_find_device);
#ifdef CONFIG_SYSCTL
diff --git a/drivers/char/pty.c b/drivers/char/pty.c
index fc6d0fe36b66..e9acfc1a5ae1 100644
--- a/drivers/char/pty.c
+++ b/drivers/char/pty.c
@@ -25,8 +25,6 @@
#include <asm/uaccess.h>
#include <asm/system.h>
#include <asm/bitops.h>
-
-#define BUILDING_PTY_C 1
#include <linux/devpts_fs.h>
struct pty_struct {
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
index 4a2bd436f8e4..1c7b4b01d3a4 100644
--- a/drivers/char/tty_io.c
+++ b/drivers/char/tty_io.c
@@ -1336,7 +1336,7 @@ retry_open:
ptmx_found:
set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
minor -= driver->minor_start;
- devpts_pty_new(driver->other->name_base + minor, mk_kdev(driver->other->major, minor + driver->other->minor_start));
+ devpts_pty_new(driver->other->name_base + minor, MKDEV(driver->other->major, minor + driver->other->minor_start));
tty_register_devfs(&pts_driver[major], DEVFS_FL_DEFAULT,
pts_driver[major].minor_start + minor);
noctty = 1;
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 104c928813a4..0e0388efd705 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -1937,9 +1937,9 @@ static int cdrom_read_tocentry(struct ata_device *drive, int trackno, int msf_fl
/* Try to read the entire TOC for the disk into our internal buffer. */
static int cdrom_read_toc(struct ata_device *drive, struct request_sense *sense)
{
- int minor, stat, ntracks, i;
- kdev_t dev;
+ int stat, ntracks, i;
struct cdrom_info *info = drive->driver_data;
+ struct cdrom_device_info *cdi = &info->devinfo;
struct atapi_toc *toc = info->toc;
struct {
struct atapi_toc_header hdr;
@@ -2071,10 +2071,8 @@ static int cdrom_read_toc(struct ata_device *drive, struct request_sense *sense)
toc->xa_flag = (ms_tmp.hdr.first_track != ms_tmp.hdr.last_track);
/* Now try to get the total cdrom capacity. */
- minor = (drive->select.b.unit) << PARTN_BITS;
- dev = mk_kdev(drive->channel->major, minor);
/* FIXME: This is making worng assumptions about register layout. */
- stat = cdrom_get_last_written(dev, (unsigned long *) &toc->capacity);
+ stat = cdrom_get_last_written(cdi, (unsigned long *) &toc->capacity);
if (stat)
stat = cdrom_read_capacity(drive, &toc->capacity, sense);
if (stat)
diff --git a/drivers/md/linear.c b/drivers/md/linear.c
index d8f29104dacf..daeeb075182c 100644
--- a/drivers/md/linear.c
+++ b/drivers/md/linear.c
@@ -60,7 +60,6 @@ static int linear_run (mddev_t *mddev)
goto out;
}
- disk->dev = rdev->dev;
disk->bdev = rdev->bdev;
atomic_inc(&rdev->bdev->bd_count);
disk->size = rdev->size;
@@ -163,7 +162,7 @@ static int linear_make_request (request_queue_t *q, struct bio *bio)
if (block >= (tmp_dev->size + tmp_dev->offset)
|| block < tmp_dev->offset) {
- printk ("linear_make_request: Block %ld out of bounds on dev %s size %ld offset %ld\n", block, kdevname(tmp_dev->dev), tmp_dev->size, tmp_dev->offset);
+ printk ("linear_make_request: Block %ld out of bounds on dev %s size %ld offset %ld\n", block, bdevname(tmp_dev->bdev), tmp_dev->size, tmp_dev->offset);
bio_io_error(bio);
return 0;
}
@@ -186,11 +185,11 @@ static int linear_status (char *page, mddev_t *mddev)
for (j = 0; j < conf->nr_zones; j++)
{
sz += sprintf(page+sz, "[%s",
- partition_name(conf->hash_table[j].dev0->dev));
+ bdev_partition_name(conf->hash_table[j].dev0->bdev));
if (conf->hash_table[j].dev1)
sz += sprintf(page+sz, "/%s] ",
- partition_name(conf->hash_table[j].dev1->dev));
+ bdev_partition_name(conf->hash_table[j].dev1->bdev));
else
sz += sprintf(page+sz, "] ");
}
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 05c8b963b8cd..7df31c2d5a57 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -297,20 +297,20 @@ char * partition_name(kdev_t dev)
return dname->name;
}
-static unsigned int calc_dev_sboffset(kdev_t dev, mddev_t *mddev,
+static unsigned int calc_dev_sboffset(mdk_rdev_t *rdev, mddev_t *mddev,
int persistent)
{
- unsigned int size = (blkdev_size_in_bytes(dev) >> BLOCK_SIZE_BITS);
+ unsigned int size = rdev->bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;
if (persistent)
size = MD_NEW_SIZE_BLOCKS(size);
return size;
}
-static unsigned int calc_dev_size(kdev_t dev, mddev_t *mddev, int persistent)
+static unsigned int calc_dev_size(mdk_rdev_t *rdev, mddev_t *mddev, int persistent)
{
unsigned int size;
- size = calc_dev_sboffset(dev, mddev, persistent);
+ size = calc_dev_sboffset(rdev, mddev, persistent);
if (!mddev->sb) {
MD_BUG();
return size;
@@ -467,7 +467,7 @@ static int read_disk_sb(mdk_rdev_t * rdev)
*
* It also happens to be a multiple of 4Kb.
*/
- sb_offset = calc_dev_sboffset(rdev->dev, rdev->mddev, 1);
+ sb_offset = calc_dev_sboffset(rdev, rdev->mddev, 1);
rdev->sb_offset = sb_offset;
if (!sync_page_io(rdev->bdev, sb_offset<<1, MD_SB_BYTES, rdev->sb_page, READ))
@@ -850,7 +850,7 @@ static int write_disk_sb(mdk_rdev_t * rdev)
return 1;
}
- sb_offset = calc_dev_sboffset(dev, rdev->mddev, 1);
+ sb_offset = calc_dev_sboffset(rdev, rdev->mddev, 1);
if (rdev->sb_offset != sb_offset) {
printk(KERN_INFO "%s's sb offset has changed from %ld to %ld, skipping\n",
partition_name(dev), rdev->sb_offset, sb_offset);
@@ -861,7 +861,7 @@ static int write_disk_sb(mdk_rdev_t * rdev)
* its size has changed to zero silently, and the MD code does
* not yet know that it's faulty.
*/
- size = calc_dev_size(dev, rdev->mddev, 1);
+ size = calc_dev_size(rdev, rdev->mddev, 1);
if (size != rdev->size) {
printk(KERN_INFO "%s's size has changed from %ld to %ld since import, skipping\n",
partition_name(dev), rdev->size, size);
@@ -1001,19 +1001,19 @@ void md_update_sb(mddev_t *mddev)
*
* a faulty rdev _never_ has rdev->sb set.
*/
-static int md_import_device(kdev_t newdev, int on_disk)
+static mdk_rdev_t *md_import_device(kdev_t newdev, int on_disk)
{
int err;
mdk_rdev_t *rdev;
unsigned int size;
if (find_rdev_all(newdev))
- return -EEXIST;
+ return ERR_PTR(-EEXIST);
rdev = (mdk_rdev_t *) kmalloc(sizeof(*rdev), GFP_KERNEL);
if (!rdev) {
printk(KERN_ERR "md: could not alloc mem for %s!\n", partition_name(newdev));
- return -ENOMEM;
+ return ERR_PTR(-ENOMEM);
}
memset(rdev, 0, sizeof(*rdev));
@@ -1030,7 +1030,7 @@ static int md_import_device(kdev_t newdev, int on_disk)
rdev->desc_nr = -1;
rdev->faulty = 0;
- size = (blkdev_size_in_bytes(newdev) >> BLOCK_SIZE_BITS);
+ size = rdev->bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;
if (!size) {
printk(KERN_WARNING
"md: %s has zero or unknown size, marking faulty!\n",
@@ -1066,7 +1066,7 @@ static int md_import_device(kdev_t newdev, int on_disk)
if (rdev->faulty && rdev->sb)
free_disk_sb(rdev);
- return 0;
+ return rdev;
abort_free:
if (rdev->sb) {
@@ -1075,7 +1075,7 @@ abort_free:
free_disk_sb(rdev);
}
kfree(rdev);
- return err;
+ return ERR_PTR(err);
}
/*
@@ -1463,7 +1463,7 @@ static int device_size_calculation(mddev_t * mddev)
MD_BUG();
continue;
}
- rdev->size = calc_dev_size(rdev->dev, mddev, persistent);
+ rdev->size = calc_dev_size(rdev, mddev, persistent);
if (rdev->size < sb->chunk_size / 1024) {
printk(KERN_WARNING
"md: Dev %s smaller than chunk_size: %ldk < %dk\n",
@@ -1741,8 +1741,7 @@ static int do_md_stop(mddev_t * mddev, int ro)
md_unregister_thread(mddev->sync_thread);
mddev->sync_thread = NULL;
if (mddev->spare) {
- mddev->pers->diskop(mddev, &mddev->spare,
- DISKOP_SPARE_INACTIVE);
+ mddev->pers->spare_inactive(mddev);
mddev->spare = NULL;
}
}
@@ -1951,16 +1950,12 @@ static int autostart_array(kdev_t startdev)
mdp_super_t *sb = NULL;
mdk_rdev_t *start_rdev = NULL, *rdev;
- if (md_import_device(startdev, 1)) {
+ start_rdev = md_import_device(startdev, 1);
+ if (IS_ERR(start_rdev)) {
printk(KERN_WARNING "md: could not import %s!\n", partition_name(startdev));
goto abort;
}
- start_rdev = find_rdev_all(startdev);
- if (!start_rdev) {
- MD_BUG();
- goto abort;
- }
if (start_rdev->faulty) {
printk(KERN_WARNING "md: can not autostart based on faulty %s!\n",
partition_name(startdev));
@@ -1989,16 +1984,12 @@ static int autostart_array(kdev_t startdev)
continue;
if (kdev_same(dev, startdev))
continue;
- if (md_import_device(dev, 1)) {
+ rdev = md_import_device(dev, 1);
+ if (IS_ERR(rdev)) {
printk(KERN_WARNING "md: could not import %s, trying to run array nevertheless.\n",
partition_name(dev));
continue;
}
- rdev = find_rdev_all(dev);
- if (!rdev) {
- MD_BUG();
- goto abort;
- }
list_add(&rdev->pending, &pending_raid_disks);
}
@@ -2108,7 +2099,7 @@ static int get_disk_info(mddev_t * mddev, void * arg)
static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info)
{
- int err, size, persistent;
+ int size, persistent;
mdk_rdev_t *rdev;
unsigned int nr;
kdev_t dev;
@@ -2121,14 +2112,9 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info)
}
if (!mddev->sb) {
/* expecting a device which has a superblock */
- err = md_import_device(dev, 1);
- if (err) {
- printk(KERN_WARNING "md: md_import_device returned %d\n", err);
- return -EINVAL;
- }
- rdev = find_rdev_all(dev);
- if (!rdev) {
- MD_BUG();
+ rdev = md_import_device(dev, 1);
+ if (IS_ERR(rdev)) {
+ printk(KERN_WARNING "md: md_import_device returned %ld\n", PTR_ERR(rdev));
return -EINVAL;
}
if (!list_empty(&mddev->disks)) {
@@ -2165,17 +2151,11 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info)
SET_SB(state);
if (!(info->state & (1<<MD_DISK_FAULTY))) {
- err = md_import_device (dev, 0);
- if (err) {
- printk(KERN_WARNING "md: error, md_import_device() returned %d\n", err);
+ rdev = md_import_device (dev, 0);
+ if (IS_ERR(rdev)) {
+ printk(KERN_WARNING "md: error, md_import_device() returned %ld\n", PTR_ERR(rdev));
return -EINVAL;
}
- rdev = find_rdev_all(dev);
- if (!rdev) {
- MD_BUG();
- return -EINVAL;
- }
-
rdev->old_dev = dev;
rdev->desc_nr = info->number;
@@ -2185,8 +2165,8 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info)
if (!persistent)
printk(KERN_INFO "md: nonpersistent superblock ...\n");
- size = calc_dev_size(dev, mddev, persistent);
- rdev->sb_offset = calc_dev_sboffset(dev, mddev, persistent);
+ size = calc_dev_size(rdev, mddev, persistent);
+ rdev->sb_offset = calc_dev_sboffset(rdev, mddev, persistent);
if (!mddev->sb->size || (mddev->sb->size > size))
mddev->sb->size = size;
@@ -2250,7 +2230,7 @@ static int hot_remove_disk(mddev_t * mddev, kdev_t dev)
printk(KERN_INFO "md: trying to remove %s from md%d ... \n",
partition_name(dev), mdidx(mddev));
- if (!mddev->pers->diskop) {
+ if (!mddev->pers->hot_remove_disk) {
printk(KERN_WARNING "md%d: personality does not support diskops!\n",
mdidx(mddev));
return -EINVAL;
@@ -2274,7 +2254,7 @@ static int hot_remove_disk(mddev_t * mddev, kdev_t dev)
return -EINVAL;
}
- err = mddev->pers->diskop(mddev, &disk, DISKOP_HOT_REMOVE_DISK);
+ err = mddev->pers->hot_remove_disk(mddev, disk->number);
if (err == -EBUSY) {
MD_BUG();
goto busy;
@@ -2308,35 +2288,31 @@ static int hot_add_disk(mddev_t * mddev, kdev_t dev)
printk(KERN_INFO "md: trying to hot-add %s to md%d ... \n",
partition_name(dev), mdidx(mddev));
- if (!mddev->pers->diskop) {
+ if (!mddev->pers->hot_add_disk) {
printk(KERN_WARNING "md%d: personality does not support diskops!\n",
mdidx(mddev));
return -EINVAL;
}
- persistent = !mddev->sb->not_persistent;
- size = calc_dev_size(dev, mddev, persistent);
-
- if (size < mddev->sb->size) {
- printk(KERN_WARNING "md%d: disk size %d blocks < array size %d\n",
- mdidx(mddev), size, mddev->sb->size);
- return -ENOSPC;
- }
-
rdev = find_rdev(mddev, dev);
if (rdev)
return -EBUSY;
- err = md_import_device (dev, 0);
- if (err) {
- printk(KERN_WARNING "md: error, md_import_device() returned %d\n", err);
+ rdev = md_import_device (dev, 0);
+ if (IS_ERR(rdev)) {
+ printk(KERN_WARNING "md: error, md_import_device() returned %ld\n", PTR_ERR(rdev));
return -EINVAL;
}
- rdev = find_rdev_all(dev);
- if (!rdev) {
- MD_BUG();
- return -EINVAL;
+ persistent = !mddev->sb->not_persistent;
+ size = calc_dev_size(rdev, mddev, persistent);
+
+ if (size < mddev->sb->size) {
+ printk(KERN_WARNING "md%d: disk size %d blocks < array size %d\n",
+ mdidx(mddev), size, mddev->sb->size);
+ err = -ENOSPC;
+ goto abort_export;
}
+
if (rdev->faulty) {
printk(KERN_WARNING "md: can not hot-add faulty %s disk to md%d!\n",
partition_name(dev), mdidx(mddev));
@@ -2351,7 +2327,7 @@ static int hot_add_disk(mddev_t * mddev, kdev_t dev)
*/
rdev->old_dev = dev;
rdev->size = size;
- rdev->sb_offset = calc_dev_sboffset(dev, mddev, persistent);
+ rdev->sb_offset = calc_dev_sboffset(rdev, mddev, persistent);
disk = mddev->sb->disks + mddev->sb->raid_disks;
for (i = mddev->sb->raid_disks; i < MD_SB_DISKS; i++) {
@@ -2386,7 +2362,7 @@ static int hot_add_disk(mddev_t * mddev, kdev_t dev)
disk->major = major(dev);
disk->minor = minor(dev);
- if (mddev->pers->diskop(mddev, &disk, DISKOP_HOT_ADD_DISK)) {
+ if (mddev->pers->hot_add_disk(mddev, disk, rdev)) {
MD_BUG();
err = -EINVAL;
goto abort_unbind_export;
@@ -2922,7 +2898,7 @@ int md_error(mddev_t *mddev, struct block_device *bdev)
if (!rrdev || rrdev->faulty)
return 0;
if (!mddev->pers->error_handler
- || mddev->pers->error_handler(mddev,rdev) <= 0) {
+ || mddev->pers->error_handler(mddev,bdev) <= 0) {
rrdev->faulty = 1;
} else
return 1;
@@ -3134,8 +3110,9 @@ mdp_disk_t *get_spare(mddev_t *mddev)
}
static unsigned int sync_io[DK_MAX_MAJOR][DK_MAX_DISK];
-void md_sync_acct(kdev_t dev, unsigned long nr_sectors)
+void md_sync_acct(struct block_device *bdev, unsigned long nr_sectors)
{
+ kdev_t dev = to_kdev_t(bdev->bd_dev);
unsigned int major = major(dev);
unsigned int index;
@@ -3367,7 +3344,7 @@ void md_do_recovery(void *data)
ITERATE_MDDEV(mddev,tmp) if (mddev_lock(mddev)==0) {
sb = mddev->sb;
- if (!sb || !mddev->pers || !mddev->pers->diskop || mddev->ro)
+ if (!sb || !mddev->pers || mddev->ro)
goto unlock;
if (mddev->recovery_running > 0)
/* resync/recovery still happening */
@@ -3381,16 +3358,19 @@ void md_do_recovery(void *data)
* If we were doing a reconstruction,
* we need to retrieve the spare
*/
+ if (!mddev->pers->spare_inactive)
+ goto unlock;
if (mddev->spare) {
- mddev->pers->diskop(mddev, &mddev->spare,
- DISKOP_SPARE_INACTIVE);
+ mddev->pers->spare_inactive(mddev);
mddev->spare = NULL;
}
} else {
+ if (!mddev->pers->spare_active)
+ goto unlock;
/* success...*/
if (mddev->spare) {
- mddev->pers->diskop(mddev, &mddev->spare,
- DISKOP_SPARE_ACTIVE);
+ mddev->pers->spare_active(mddev,
+ &mddev->spare);
mark_disk_sync(mddev->spare);
mark_disk_active(mddev->spare);
sb->active_disks++;
@@ -3429,12 +3409,13 @@ void md_do_recovery(void *data)
if (!mddev->sync_thread) {
printk(KERN_ERR "md%d: could not start resync thread...\n", mdidx(mddev));
if (mddev->spare)
- mddev->pers->diskop(mddev, &mddev->spare, DISKOP_SPARE_INACTIVE);
+ mddev->pers->spare_inactive(mddev);
mddev->spare = NULL;
mddev->recovery_running = 0;
} else {
if (mddev->spare)
- mddev->pers->diskop(mddev, &mddev->spare, DISKOP_SPARE_WRITE);
+ mddev->pers->spare_write(mddev,
+ mddev->spare->number);
mddev->recovery_running = 1;
md_wakeup_thread(mddev->sync_thread);
}
@@ -3588,19 +3569,12 @@ static void autostart_arrays(void)
for (i = 0; i < dev_cnt; i++) {
kdev_t dev = detected_devices[i];
- if (md_import_device(dev,1)) {
+ rdev = md_import_device(dev,1);
+ if (IS_ERR(rdev)) {
printk(KERN_ALERT "md: could not import %s!\n",
partition_name(dev));
continue;
}
- /*
- * Sanity checks:
- */
- rdev = find_rdev_all(dev);
- if (!rdev) {
- MD_BUG();
- continue;
- }
if (rdev->faulty) {
MD_BUG();
continue;
diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c
index 32dc200aee66..ac08a9a90611 100644
--- a/drivers/md/multipath.c
+++ b/drivers/md/multipath.c
@@ -55,9 +55,8 @@ static mdk_personality_t multipath_personality;
static spinlock_t retry_list_lock = SPIN_LOCK_UNLOCKED;
struct multipath_bh *multipath_retry_list = NULL, **multipath_retry_tail;
-static int multipath_diskop(mddev_t *mddev, mdp_disk_t **d, int state);
-
-
+static int multipath_spare_write(mddev_t *, int);
+static int multipath_spare_active(mddev_t *mddev, mdp_disk_t **d);
static struct multipath_bh *multipath_alloc_mpbh(multipath_conf_t *conf)
{
@@ -313,14 +312,14 @@ static void mark_disk_bad (mddev_t *mddev, int failed)
mddev->sb_dirty = 1;
md_wakeup_thread(conf->thread);
conf->working_disks--;
- printk (DISK_FAILED, partition_name (multipath->dev),
+ printk (DISK_FAILED, bdev_partition_name (multipath->bdev),
conf->working_disks);
}
/*
* Careful, this can execute in IRQ contexts as well!
*/
-static int multipath_error (mddev_t *mddev, kdev_t dev)
+static int multipath_error (mddev_t *mddev, struct block_device *bdev)
{
multipath_conf_t *conf = mddev_to_conf(mddev);
struct multipath_info * multipaths = conf->multipaths;
@@ -345,7 +344,7 @@ static int multipath_error (mddev_t *mddev, kdev_t dev)
* which has just failed.
*/
for (i = 0; i < disks; i++) {
- if (kdev_same(multipaths[i].dev, dev) && !multipaths[i].operational)
+ if (multipaths[i].bdev == bdev && !multipaths[i].operational)
return 0;
}
printk (LAST_DISK);
@@ -354,7 +353,7 @@ static int multipath_error (mddev_t *mddev, kdev_t dev)
* Mark disk as unusable
*/
for (i = 0; i < disks; i++) {
- if (kdev_same(multipaths[i].dev,dev) && multipaths[i].operational) {
+ if (multipaths[i].bdev == bdev && multipaths[i].operational) {
mark_disk_bad(mddev, i);
break;
}
@@ -366,11 +365,11 @@ static int multipath_error (mddev_t *mddev, kdev_t dev)
spare = get_spare(mddev);
if (spare) {
- err = multipath_diskop(mddev, &spare, DISKOP_SPARE_WRITE);
+ err = multipath_spare_write(mddev, spare->number);
printk("got DISKOP_SPARE_WRITE err: %d. (spare_faulty(): %d)\n", err, disk_faulty(spare));
}
if (!err && !disk_faulty(spare)) {
- multipath_diskop(mddev, &spare, DISKOP_SPARE_ACTIVE);
+ multipath_spare_active(mddev, &spare);
mark_disk_sync(spare);
mark_disk_active(spare);
sb->active_disks++;
@@ -406,259 +405,240 @@ static void print_multipath_conf (multipath_conf_t *conf)
printk(" disk%d, s:%d, o:%d, n:%d rd:%d us:%d dev:%s\n",
i, tmp->spare,tmp->operational,
tmp->number,tmp->raid_disk,tmp->used_slot,
- partition_name(tmp->dev));
+ bdev_partition_name(tmp->bdev));
}
}
-static int multipath_diskop(mddev_t *mddev, mdp_disk_t **d, int state)
+/*
+ * Find the spare disk ... (can only be in the 'high' area of the array)
+ */
+static struct multipath_info *find_spare(mddev_t *mddev, int number)
{
- int err = 0;
- int i, failed_disk=-1, spare_disk=-1, removed_disk=-1, added_disk=-1;
multipath_conf_t *conf = mddev->private;
- struct multipath_info *tmp, *sdisk, *fdisk, *rdisk, *adisk;
- mdp_super_t *sb = mddev->sb;
- mdp_disk_t *failed_desc, *spare_desc, *added_desc;
- mdk_rdev_t *spare_rdev, *failed_rdev;
- struct block_device *bdev;
+ int i;
+ for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
+ struct multipath_info *p = conf->multipaths + i;
+ if (p->spare && p->number == number)
+ return p;
+ }
+ return NULL;
+}
+
+static int multipath_spare_inactive(mddev_t *mddev)
+{
+ multipath_conf_t *conf = mddev->private;
+ struct multipath_info *p;
+ int err = 0;
print_multipath_conf(conf);
spin_lock_irq(&conf->device_lock);
- /*
- * find the disk ...
- */
- switch (state) {
-
- case DISKOP_SPARE_ACTIVE:
+ p = find_spare(mddev, mddev->spare->number);
+ if (p) {
+ p->operational = 0;
+ } else {
+ MD_BUG();
+ err = 1;
+ }
+ spin_unlock_irq(&conf->device_lock);
- /*
- * Find the failed disk within the MULTIPATH configuration ...
- * (this can only be in the first conf->working_disks part)
- */
- for (i = 0; i < conf->raid_disks; i++) {
- tmp = conf->multipaths + i;
- if ((!tmp->operational && !tmp->spare) ||
- !tmp->used_slot) {
- failed_disk = i;
- break;
- }
- }
- /*
- * When we activate a spare disk we _must_ have a disk in
- * the lower (active) part of the array to replace.
- */
- if ((failed_disk == -1) || (failed_disk >= conf->raid_disks)) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- /* fall through */
+ print_multipath_conf(conf);
+ return err;
+}
- case DISKOP_SPARE_WRITE:
- case DISKOP_SPARE_INACTIVE:
+static int multipath_spare_write(mddev_t *mddev, int number)
+{
+ multipath_conf_t *conf = mddev->private;
+ struct multipath_info *p;
+ int err = 0;
- /*
- * Find the spare disk ... (can only be in the 'high'
- * area of the array)
- */
- for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
- tmp = conf->multipaths + i;
- if (tmp->spare && tmp->number == (*d)->number) {
- spare_disk = i;
- break;
- }
- }
- if (spare_disk == -1) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- break;
-
- case DISKOP_HOT_REMOVE_DISK:
-
- for (i = 0; i < MD_SB_DISKS; i++) {
- tmp = conf->multipaths + i;
- if (tmp->used_slot && (tmp->number == (*d)->number)) {
- if (tmp->operational) {
- printk(KERN_ERR "hot-remove-disk, slot %d is identified to be the requested disk (number %d), but is still operational!\n", i, (*d)->number);
- err = -EBUSY;
- goto abort;
- }
- removed_disk = i;
- break;
- }
- }
- if (removed_disk == -1) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- break;
+ print_multipath_conf(conf);
+ spin_lock_irq(&conf->device_lock);
+ p = find_spare(mddev, number);
+ if (p) {
+ p->operational = 1;
+ } else {
+ MD_BUG();
+ err = 1;
+ }
+ spin_unlock_irq(&conf->device_lock);
- case DISKOP_HOT_ADD_DISK:
+ print_multipath_conf(conf);
+ return err;
+}
- for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
- tmp = conf->multipaths + i;
- if (!tmp->used_slot) {
- added_disk = i;
- break;
- }
- }
- if (added_disk == -1) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- break;
- }
+static int multipath_spare_active(mddev_t *mddev, mdp_disk_t **d)
+{
+ int err = 0;
+ int i, failed_disk=-1, spare_disk=-1;
+ multipath_conf_t *conf = mddev->private;
+ struct multipath_info *tmp, *sdisk, *fdisk;
+ mdp_super_t *sb = mddev->sb;
+ mdp_disk_t *failed_desc, *spare_desc;
+ mdk_rdev_t *spare_rdev, *failed_rdev;
- switch (state) {
+ print_multipath_conf(conf);
+ spin_lock_irq(&conf->device_lock);
/*
- * Switch the spare disk to write-only mode:
+ * Find the failed disk within the MULTIPATH configuration ...
+ * (this can only be in the first conf->working_disks part)
*/
- case DISKOP_SPARE_WRITE:
- sdisk = conf->multipaths + spare_disk;
- sdisk->operational = 1;
- break;
+ for (i = 0; i < conf->raid_disks; i++) {
+ tmp = conf->multipaths + i;
+ if ((!tmp->operational && !tmp->spare) ||
+ !tmp->used_slot) {
+ failed_disk = i;
+ break;
+ }
+ }
/*
- * Deactivate a spare disk:
+ * When we activate a spare disk we _must_ have a disk in
+ * the lower (active) part of the array to replace.
*/
- case DISKOP_SPARE_INACTIVE:
- sdisk = conf->multipaths + spare_disk;
- sdisk->operational = 0;
- break;
+ if (failed_disk == -1) {
+ MD_BUG();
+ err = 1;
+ goto abort;
+ }
/*
- * Activate (mark read-write) the (now sync) spare disk,
- * which means we switch it's 'raid position' (->raid_disk)
- * with the failed disk. (only the first 'conf->nr_disks'
- * slots are used for 'real' disks and we must preserve this
- * property)
+ * Find the spare disk ... (can only be in the 'high'
+ * area of the array)
*/
- case DISKOP_SPARE_ACTIVE:
- sdisk = conf->multipaths + spare_disk;
- fdisk = conf->multipaths + failed_disk;
-
- spare_desc = &sb->disks[sdisk->number];
- failed_desc = &sb->disks[fdisk->number];
-
- if (spare_desc != *d) {
- MD_BUG();
- err = 1;
- goto abort;
+ for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
+ tmp = conf->multipaths + i;
+ if (tmp->spare && tmp->number == (*d)->number) {
+ spare_disk = i;
+ break;
}
+ }
+ if (spare_disk == -1) {
+ MD_BUG();
+ err = 1;
+ goto abort;
+ }
- if (spare_desc->raid_disk != sdisk->raid_disk) {
- MD_BUG();
- err = 1;
- goto abort;
- }
-
- if (sdisk->raid_disk != spare_disk) {
- MD_BUG();
- err = 1;
- goto abort;
- }
+ sdisk = conf->multipaths + spare_disk;
+ fdisk = conf->multipaths + failed_disk;
- if (failed_desc->raid_disk != fdisk->raid_disk) {
- MD_BUG();
- err = 1;
- goto abort;
- }
+ spare_desc = &sb->disks[sdisk->number];
+ failed_desc = &sb->disks[fdisk->number];
- if (fdisk->raid_disk != failed_disk) {
- MD_BUG();
- err = 1;
- goto abort;
- }
+ if (spare_desc != *d || spare_desc->raid_disk != sdisk->raid_disk ||
+ sdisk->raid_disk != spare_disk || fdisk->raid_disk != failed_disk ||
+ failed_desc->raid_disk != fdisk->raid_disk) {
+ MD_BUG();
+ err = 1;
+ goto abort;
+ }
- /*
- * do the switch finally
- */
- spare_rdev = find_rdev_nr(mddev, spare_desc->number);
- failed_rdev = find_rdev_nr(mddev, failed_desc->number);
- xchg_values(spare_rdev->desc_nr, failed_rdev->desc_nr);
- spare_rdev->alias_device = 0;
- failed_rdev->alias_device = 1;
+ /*
+ * do the switch finally
+ */
+ spare_rdev = find_rdev_nr(mddev, spare_desc->number);
+ failed_rdev = find_rdev_nr(mddev, failed_desc->number);
+ xchg_values(spare_rdev->desc_nr, failed_rdev->desc_nr);
+ spare_rdev->alias_device = 0;
+ failed_rdev->alias_device = 1;
- xchg_values(*spare_desc, *failed_desc);
- xchg_values(*fdisk, *sdisk);
+ xchg_values(*spare_desc, *failed_desc);
+ xchg_values(*fdisk, *sdisk);
- /*
- * (careful, 'failed' and 'spare' are switched from now on)
- *
- * we want to preserve linear numbering and we want to
- * give the proper raid_disk number to the now activated
- * disk. (this means we switch back these values)
- */
-
- xchg_values(spare_desc->raid_disk, failed_desc->raid_disk);
- xchg_values(sdisk->raid_disk, fdisk->raid_disk);
- xchg_values(spare_desc->number, failed_desc->number);
- xchg_values(sdisk->number, fdisk->number);
+ /*
+ * (careful, 'failed' and 'spare' are switched from now on)
+ *
+ * we want to preserve linear numbering and we want to
+ * give the proper raid_disk number to the now activated
+ * disk. (this means we switch back these values)
+ */
- *d = failed_desc;
+ xchg_values(spare_desc->raid_disk, failed_desc->raid_disk);
+ xchg_values(sdisk->raid_disk, fdisk->raid_disk);
+ xchg_values(spare_desc->number, failed_desc->number);
+ xchg_values(sdisk->number, fdisk->number);
- if (!sdisk->bdev)
- sdisk->used_slot = 0;
- /*
- * this really activates the spare.
- */
- fdisk->spare = 0;
+ *d = failed_desc;
- /*
- * if we activate a spare, we definitely replace a
- * non-operational disk slot in the 'low' area of
- * the disk array.
- */
+ if (!sdisk->bdev)
+ sdisk->used_slot = 0;
+ /*
+ * this really activates the spare.
+ */
+ fdisk->spare = 0;
- conf->working_disks++;
+ /*
+ * if we activate a spare, we definitely replace a
+ * non-operational disk slot in the 'low' area of
+ * the disk array.
+ */
- break;
+ conf->working_disks++;
+abort:
+ spin_unlock_irq(&conf->device_lock);
- case DISKOP_HOT_REMOVE_DISK:
- rdisk = conf->multipaths + removed_disk;
+ print_multipath_conf(conf);
+ return err;
+}
- if (rdisk->spare && (removed_disk < conf->raid_disks)) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- bdev = rdisk->bdev;
- rdisk->dev = NODEV;
- rdisk->bdev = NULL;
- rdisk->used_slot = 0;
- conf->nr_disks--;
- bdput(bdev);
- break;
-
- case DISKOP_HOT_ADD_DISK:
- adisk = conf->multipaths + added_disk;
- added_desc = *d;
-
- if (added_disk != added_desc->number) {
- MD_BUG();
- err = 1;
- goto abort;
+static int multipath_add_disk(mddev_t *mddev, mdp_disk_t *added_desc,
+ mdk_rdev_t *rdev)
+{
+ multipath_conf_t *conf = mddev->private;
+ int err = 1;
+ int i;
+
+ print_multipath_conf(conf);
+ spin_lock_irq(&conf->device_lock);
+ for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
+ struct multipath_info *p = conf->multipaths + i;
+ if (!p->used_slot) {
+ if (added_desc->number != i)
+ break;
+ p->number = added_desc->number;
+ p->raid_disk = added_desc->raid_disk;
+ p->bdev = rdev->bdev;
+ p->operational = 0;
+ p->spare = 1;
+ p->used_slot = 1;
+ conf->nr_disks++;
+ err = 0;
+ break;
}
+ }
+ if (err)
+ MD_BUG();
+ spin_unlock_irq(&conf->device_lock);
- adisk->number = added_desc->number;
- adisk->raid_disk = added_desc->raid_disk;
- adisk->dev = mk_kdev(added_desc->major,added_desc->minor);
- /* it will be held open by rdev */
- adisk->bdev = bdget(kdev_t_to_nr(adisk->dev));
+ print_multipath_conf(conf);
+ return err;
+}
- adisk->operational = 0;
- adisk->spare = 1;
- adisk->used_slot = 1;
- conf->nr_disks++;
+static int multipath_remove_disk(mddev_t *mddev, int number)
+{
+ multipath_conf_t *conf = mddev->private;
+ int err = 1;
+ int i;
- break;
+ print_multipath_conf(conf);
+ spin_lock_irq(&conf->device_lock);
- default:
- MD_BUG();
- err = 1;
- goto abort;
+ for (i = 0; i < MD_SB_DISKS; i++) {
+ struct multipath_info *p = conf->multipaths + i;
+ if (p->used_slot && (p->number == number)) {
+ if (p->operational) {
+ printk(KERN_ERR "hot-remove-disk, slot %d is identified to be the requested disk (number %d), but is still operational!\n", i, number);
+ err = -EBUSY;
+ goto abort;
+ }
+ if (p->spare && i < conf->raid_disks)
+ break;
+ p->bdev = NULL;
+ p->used_slot = 0;
+ conf->nr_disks--;
+ err = 0;
+ break;
+ }
}
+ if (err)
+ MD_BUG();
abort:
spin_unlock_irq(&conf->device_lock);
@@ -666,7 +646,6 @@ abort:
return err;
}
-
#define IO_ERROR KERN_ALERT \
"multipath: %s: unrecoverable IO read error for block %lu\n"
@@ -872,7 +851,7 @@ static int multipath_run (mddev_t *mddev)
if (rdev->faulty) {
/* this is a "should never happen" case and if it */
/* ever does happen, a continue; won't help */
- printk(ERRORS, partition_name(rdev->dev));
+ printk(ERRORS, bdev_partition_name(rdev->bdev));
continue;
} else {
/* this is a "should never happen" case and if it */
@@ -892,7 +871,7 @@ static int multipath_run (mddev_t *mddev)
disk = conf->multipaths + disk_idx;
if (!disk_sync(desc))
- printk(NOT_IN_SYNC, partition_name(rdev->dev));
+ printk(NOT_IN_SYNC, bdev_partition_name(rdev->bdev));
/*
* Mark all disks as spare to start with, then pick our
@@ -901,7 +880,6 @@ static int multipath_run (mddev_t *mddev)
*/
disk->number = desc->number;
disk->raid_disk = desc->raid_disk;
- disk->dev = rdev->dev;
disk->bdev = rdev->bdev;
atomic_inc(&rdev->bdev->bd_count);
disk->operational = 0;
@@ -911,7 +889,7 @@ static int multipath_run (mddev_t *mddev)
if (disk_active(desc)) {
if(!conf->working_disks) {
- printk(OPERATIONAL, partition_name(rdev->dev),
+ printk(OPERATIONAL, bdev_partition_name(rdev->bdev),
desc->raid_disk);
disk->operational = 1;
disk->spare = 0;
@@ -928,7 +906,7 @@ static int multipath_run (mddev_t *mddev)
if(!conf->working_disks && num_rdevs) {
desc = &sb->disks[def_rdev->desc_nr];
disk = conf->multipaths + desc->raid_disk;
- printk(OPERATIONAL, partition_name(def_rdev->dev),
+ printk(OPERATIONAL, bdev_partition_name(def_rdev->bdev),
disk->raid_disk);
disk->operational = 1;
disk->spare = 0;
@@ -1074,7 +1052,11 @@ static mdk_personality_t multipath_personality=
stop: multipath_stop,
status: multipath_status,
error_handler: multipath_error,
- diskop: multipath_diskop,
+ hot_add_disk: multipath_add_disk,
+ hot_remove_disk:multipath_remove_disk,
+ spare_inactive: multipath_spare_inactive,
+ spare_active: multipath_spare_active,
+ spare_write: multipath_spare_write,
};
static int __init multipath_init (void)
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 4c855576f9fe..088993cf5165 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -589,10 +589,10 @@ static void mark_disk_bad(mddev_t *mddev, int failed)
md_wakeup_thread(conf->thread);
if (!mirror->write_only)
conf->working_disks--;
- printk(DISK_FAILED, partition_name(mirror->dev), conf->working_disks);
+ printk(DISK_FAILED, bdev_partition_name(mirror->bdev), conf->working_disks);
}
-static int error(mddev_t *mddev, kdev_t dev)
+static int error(mddev_t *mddev, struct block_device *bdev)
{
conf_t *conf = mddev_to_conf(mddev);
mirror_info_t * mirrors = conf->mirrors;
@@ -607,7 +607,7 @@ static int error(mddev_t *mddev, kdev_t dev)
* else mark the drive as failed
*/
for (i = 0; i < disks; i++)
- if (kdev_same(mirrors[i].dev, dev) && mirrors[i].operational)
+ if (mirrors[i].bdev == bdev && mirrors[i].operational)
break;
if (i == disks)
return 0;
@@ -640,7 +640,7 @@ static void print_conf(conf_t *conf)
printk(" disk %d, s:%d, o:%d, n:%d rd:%d us:%d dev:%s\n",
i, tmp->spare, tmp->operational,
tmp->number, tmp->raid_disk, tmp->used_slot,
- partition_name(tmp->dev));
+ bdev_partition_name(tmp->bdev));
}
}
@@ -658,263 +658,242 @@ static void close_sync(conf_t *conf)
conf->r1buf_pool = NULL;
}
-static int diskop(mddev_t *mddev, mdp_disk_t **d, int state)
+static mirror_info_t *find_spare(mddev_t *mddev, int number)
+{
+ conf_t *conf = mddev->private;
+ int i;
+ for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
+ mirror_info_t *p = conf->mirrors + i;
+ if (p->spare && p->number == number)
+ return p;
+ }
+ return NULL;
+}
+
+static int raid1_spare_active(mddev_t *mddev, mdp_disk_t **d)
{
int err = 0;
- int i, failed_disk = -1, spare_disk = -1, removed_disk = -1, added_disk = -1;
+ int i, failed_disk = -1, spare_disk = -1;
conf_t *conf = mddev->private;
- mirror_info_t *tmp, *sdisk, *fdisk, *rdisk, *adisk;
+ mirror_info_t *tmp, *sdisk, *fdisk;
mdp_super_t *sb = mddev->sb;
- mdp_disk_t *failed_desc, *spare_desc, *added_desc;
+ mdp_disk_t *failed_desc, *spare_desc;
mdk_rdev_t *spare_rdev, *failed_rdev;
- struct block_device *bdev;
print_conf(conf);
spin_lock_irq(&conf->device_lock);
/*
- * find the disk ...
+ * Find the failed disk within the RAID1 configuration ...
+ * (this can only be in the first conf->working_disks part)
*/
- switch (state) {
-
- case DISKOP_SPARE_ACTIVE:
-
- /*
- * Find the failed disk within the RAID1 configuration ...
- * (this can only be in the first conf->working_disks part)
- */
- for (i = 0; i < conf->raid_disks; i++) {
- tmp = conf->mirrors + i;
- if ((!tmp->operational && !tmp->spare) ||
- !tmp->used_slot) {
- failed_disk = i;
- break;
- }
+ for (i = 0; i < conf->raid_disks; i++) {
+ tmp = conf->mirrors + i;
+ if ((!tmp->operational && !tmp->spare) ||
+ !tmp->used_slot) {
+ failed_disk = i;
+ break;
}
- /*
- * When we activate a spare disk we _must_ have a disk in
- * the lower (active) part of the array to replace.
- */
- if ((failed_disk == -1) || (failed_disk >= conf->raid_disks)) {
- MD_BUG();
- err = 1;
- goto abort;
+ }
+ /*
+ * When we activate a spare disk we _must_ have a disk in
+ * the lower (active) part of the array to replace.
+ */
+ if (failed_disk == -1) {
+ MD_BUG();
+ err = 1;
+ goto abort;
+ }
+ /*
+ * Find the spare disk ... (can only be in the 'high'
+ * area of the array)
+ */
+ for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
+ tmp = conf->mirrors + i;
+ if (tmp->spare && tmp->number == (*d)->number) {
+ spare_disk = i;
+ break;
}
- /* fall through */
-
- case DISKOP_SPARE_WRITE:
- case DISKOP_SPARE_INACTIVE:
+ }
+ if (spare_disk == -1) {
+ MD_BUG();
+ err = 1;
+ goto abort;
+ }
- /*
- * Find the spare disk ... (can only be in the 'high'
- * area of the array)
- */
- for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
- tmp = conf->mirrors + i;
- if (tmp->spare && tmp->number == (*d)->number) {
- spare_disk = i;
- break;
- }
- }
- if (spare_disk == -1) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- break;
-
- case DISKOP_HOT_REMOVE_DISK:
-
- for (i = 0; i < MD_SB_DISKS; i++) {
- tmp = conf->mirrors + i;
- if (tmp->used_slot && (tmp->number == (*d)->number)) {
- if (tmp->operational) {
- err = -EBUSY;
- goto abort;
- }
- removed_disk = i;
- break;
- }
- }
- if (removed_disk == -1) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- break;
+ sdisk = conf->mirrors + spare_disk;
+ fdisk = conf->mirrors + failed_disk;
- case DISKOP_HOT_ADD_DISK:
+ spare_desc = &sb->disks[sdisk->number];
+ failed_desc = &sb->disks[fdisk->number];
- for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
- tmp = conf->mirrors + i;
- if (!tmp->used_slot) {
- added_disk = i;
- break;
- }
- }
- if (added_disk == -1) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- break;
+ if (spare_desc != *d || spare_desc->raid_disk != sdisk->raid_disk ||
+ sdisk->raid_disk != spare_disk || fdisk->raid_disk != failed_disk ||
+ failed_desc->raid_disk != fdisk->raid_disk) {
+ MD_BUG();
+ err = 1;
+ goto abort;
}
- switch (state) {
- /*
- * Switch the spare disk to write-only mode:
- */
- case DISKOP_SPARE_WRITE:
- sdisk = conf->mirrors + spare_disk;
- sdisk->operational = 1;
- sdisk->write_only = 1;
- break;
/*
- * Deactivate a spare disk:
+ * do the switch finally
*/
- case DISKOP_SPARE_INACTIVE:
- sdisk = conf->mirrors + spare_disk;
- sdisk->operational = 0;
- sdisk->write_only = 0;
- break;
+ spare_rdev = find_rdev_nr(mddev, spare_desc->number);
+ failed_rdev = find_rdev_nr(mddev, failed_desc->number);
+
/*
- * Activate (mark read-write) the (now sync) spare disk,
- * which means we switch it's 'raid position' (->raid_disk)
- * with the failed disk. (only the first 'conf->nr_disks'
- * slots are used for 'real' disks and we must preserve this
- * property)
+ * There must be a spare_rdev, but there may not be a
+ * failed_rdev. That slot might be empty...
*/
- case DISKOP_SPARE_ACTIVE:
- sdisk = conf->mirrors + spare_disk;
- fdisk = conf->mirrors + failed_disk;
-
- spare_desc = &sb->disks[sdisk->number];
- failed_desc = &sb->disks[fdisk->number];
-
- if (spare_desc != *d) {
- MD_BUG();
- err = 1;
- goto abort;
- }
+ spare_rdev->desc_nr = failed_desc->number;
+ if (failed_rdev)
+ failed_rdev->desc_nr = spare_desc->number;
- if (spare_desc->raid_disk != sdisk->raid_disk) {
- MD_BUG();
- err = 1;
- goto abort;
- }
-
- if (sdisk->raid_disk != spare_disk) {
- MD_BUG();
- err = 1;
- goto abort;
- }
+ xchg_values(*spare_desc, *failed_desc);
+ xchg_values(*fdisk, *sdisk);
- if (failed_desc->raid_disk != fdisk->raid_disk) {
- MD_BUG();
- err = 1;
- goto abort;
- }
-
- if (fdisk->raid_disk != failed_disk) {
- MD_BUG();
- err = 1;
- goto abort;
- }
+ /*
+ * (careful, 'failed' and 'spare' are switched from now on)
+ *
+ * we want to preserve linear numbering and we want to
+ * give the proper raid_disk number to the now activated
+ * disk. (this means we switch back these values)
+ */
+ xchg_values(spare_desc->raid_disk, failed_desc->raid_disk);
+ xchg_values(sdisk->raid_disk, fdisk->raid_disk);
+ xchg_values(spare_desc->number, failed_desc->number);
+ xchg_values(sdisk->number, fdisk->number);
- /*
- * do the switch finally
- */
- spare_rdev = find_rdev_nr(mddev, spare_desc->number);
- failed_rdev = find_rdev_nr(mddev, failed_desc->number);
+ *d = failed_desc;
- /*
- * There must be a spare_rdev, but there may not be a
- * failed_rdev. That slot might be empty...
- */
- spare_rdev->desc_nr = failed_desc->number;
- if (failed_rdev)
- failed_rdev->desc_nr = spare_desc->number;
+ if (!sdisk->bdev)
+ sdisk->used_slot = 0;
+ /*
+ * this really activates the spare.
+ */
+ fdisk->spare = 0;
+ fdisk->write_only = 0;
- xchg_values(*spare_desc, *failed_desc);
- xchg_values(*fdisk, *sdisk);
+ /*
+ * if we activate a spare, we definitely replace a
+ * non-operational disk slot in the 'low' area of
+ * the disk array.
+ */
- /*
- * (careful, 'failed' and 'spare' are switched from now on)
- *
- * we want to preserve linear numbering and we want to
- * give the proper raid_disk number to the now activated
- * disk. (this means we switch back these values)
- */
- xchg_values(spare_desc->raid_disk, failed_desc->raid_disk);
- xchg_values(sdisk->raid_disk, fdisk->raid_disk);
- xchg_values(spare_desc->number, failed_desc->number);
- xchg_values(sdisk->number, fdisk->number);
+ conf->working_disks++;
+abort:
+ spin_unlock_irq(&conf->device_lock);
- *d = failed_desc;
+ print_conf(conf);
+ return err;
+}
- if (!sdisk->bdev)
- sdisk->used_slot = 0;
- /*
- * this really activates the spare.
- */
- fdisk->spare = 0;
- fdisk->write_only = 0;
+static int raid1_spare_inactive(mddev_t *mddev)
+{
+ conf_t *conf = mddev->private;
+ mirror_info_t *p;
+ int err = 0;
- /*
- * if we activate a spare, we definitely replace a
- * non-operational disk slot in the 'low' area of
- * the disk array.
- */
+ print_conf(conf);
+ spin_lock_irq(&conf->device_lock);
+ p = find_spare(mddev, mddev->spare->number);
+ if (p) {
+ p->operational = 0;
+ p->write_only = 0;
+ } else {
+ MD_BUG();
+ err = 1;
+ }
+ spin_unlock_irq(&conf->device_lock);
+ print_conf(conf);
+ return err;
+}
- conf->working_disks++;
+static int raid1_spare_write(mddev_t *mddev, int number)
+{
+ conf_t *conf = mddev->private;
+ mirror_info_t *p;
+ int err = 0;
- break;
+ print_conf(conf);
+ spin_lock_irq(&conf->device_lock);
+ p = find_spare(mddev, number);
+ if (p) {
+ p->operational = 1;
+ p->write_only = 1;
+ } else {
+ MD_BUG();
+ err = 1;
+ }
+ spin_unlock_irq(&conf->device_lock);
+ print_conf(conf);
+ return err;
+}
- case DISKOP_HOT_REMOVE_DISK:
- rdisk = conf->mirrors + removed_disk;
+static int raid1_add_disk(mddev_t *mddev, mdp_disk_t *added_desc,
+ mdk_rdev_t *rdev)
+{
+ conf_t *conf = mddev->private;
+ int err = 1;
+ int i;
- if (rdisk->spare && (removed_disk < conf->raid_disks)) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- bdev = rdisk->bdev;
- rdisk->dev = NODEV;
- rdisk->bdev = NULL;
- rdisk->used_slot = 0;
- conf->nr_disks--;
- bdput(bdev);
- break;
-
- case DISKOP_HOT_ADD_DISK:
- adisk = conf->mirrors + added_disk;
- added_desc = *d;
-
- if (added_disk != added_desc->number) {
- MD_BUG();
- err = 1;
- goto abort;
+ print_conf(conf);
+ spin_lock_irq(&conf->device_lock);
+ /*
+ * find the disk ...
+ */
+ for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
+ mirror_info_t *p = conf->mirrors + i;
+ if (!p->used_slot) {
+ if (added_desc->number != i)
+ break;
+ p->number = added_desc->number;
+ p->raid_disk = added_desc->raid_disk;
+ /* it will be held open by rdev */
+ p->bdev = rdev->bdev;
+ p->operational = 0;
+ p->write_only = 0;
+ p->spare = 1;
+ p->used_slot = 1;
+ p->head_position = 0;
+ conf->nr_disks++;
+ err = 0;
+ break;
}
+ }
+ if (err)
+ MD_BUG();
+ spin_unlock_irq(&conf->device_lock);
- adisk->number = added_desc->number;
- adisk->raid_disk = added_desc->raid_disk;
- adisk->dev = mk_kdev(added_desc->major, added_desc->minor);
- /* it will be held open by rdev */
- adisk->bdev = bdget(kdev_t_to_nr(adisk->dev));
-
- adisk->operational = 0;
- adisk->write_only = 0;
- adisk->spare = 1;
- adisk->used_slot = 1;
- adisk->head_position = 0;
- conf->nr_disks++;
+ print_conf(conf);
+ return err;
+}
- break;
+static int raid1_remove_disk(mddev_t *mddev, int number)
+{
+ conf_t *conf = mddev->private;
+ int err = 1;
+ int i;
- default:
- MD_BUG();
- err = 1;
- goto abort;
+ print_conf(conf);
+ spin_lock_irq(&conf->device_lock);
+ for (i = 0; i < MD_SB_DISKS; i++) {
+ mirror_info_t *p = conf->mirrors + i;
+ if (p->used_slot && (p->number == number)) {
+ if (p->operational) {
+ err = -EBUSY;
+ goto abort;
+ }
+ if (p->spare && (i < conf->raid_disks))
+ break;
+ p->bdev = NULL;
+ p->used_slot = 0;
+ conf->nr_disks--;
+ err = 0;
+ break;
+ }
}
+ if (err)
+ MD_BUG();
abort:
spin_unlock_irq(&conf->device_lock);
@@ -922,7 +901,6 @@ abort:
return err;
}
-
#define IO_ERROR KERN_ALERT \
"raid1: %s: unrecoverable I/O read error for block %lu\n"
@@ -1045,7 +1023,7 @@ static void sync_request_write(mddev_t *mddev, r1bio_t *r1_bio)
if (!mbio)
continue;
- md_sync_acct(to_kdev_t(mbio->bi_bdev->bd_dev), mbio->bi_size >> 9);
+ md_sync_acct(mbio->bi_bdev, mbio->bi_size >> 9);
generic_make_request(mbio);
atomic_inc(&conf->mirrors[i].nr_pending);
}
@@ -1217,7 +1195,7 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster)
BUG();
r1_bio->read_bio = read_bio;
- md_sync_acct(to_kdev_t(read_bio->bi_bdev->bd_dev), nr_sectors);
+ md_sync_acct(read_bio->bi_bdev, nr_sectors);
generic_make_request(read_bio);
atomic_inc(&conf->mirrors[conf->last_used].nr_pending);
@@ -1304,7 +1282,7 @@ static int run(mddev_t *mddev)
ITERATE_RDEV(mddev, rdev, tmp) {
if (rdev->faulty) {
- printk(ERRORS, partition_name(rdev->dev));
+ printk(ERRORS, bdev_partition_name(rdev->bdev));
} else {
if (!rdev->sb) {
MD_BUG();
@@ -1322,7 +1300,6 @@ static int run(mddev_t *mddev)
if (disk_faulty(descriptor)) {
disk->number = descriptor->number;
disk->raid_disk = disk_idx;
- disk->dev = rdev->dev;
disk->bdev = rdev->bdev;
atomic_inc(&rdev->bdev->bd_count);
disk->operational = 0;
@@ -1335,27 +1312,26 @@ static int run(mddev_t *mddev)
if (disk_active(descriptor)) {
if (!disk_sync(descriptor)) {
printk(NOT_IN_SYNC,
- partition_name(rdev->dev));
+ bdev_partition_name(rdev->bdev));
continue;
}
if ((descriptor->number > MD_SB_DISKS) ||
(disk_idx > sb->raid_disks)) {
printk(INCONSISTENT,
- partition_name(rdev->dev));
+ bdev_partition_name(rdev->bdev));
continue;
}
if (disk->operational) {
printk(ALREADY_RUNNING,
- partition_name(rdev->dev),
+ bdev_partition_name(rdev->bdev),
disk_idx);
continue;
}
- printk(OPERATIONAL, partition_name(rdev->dev),
+ printk(OPERATIONAL, bdev_partition_name(rdev->bdev),
disk_idx);
disk->number = descriptor->number;
disk->raid_disk = disk_idx;
- disk->dev = rdev->dev;
disk->bdev = rdev->bdev;
atomic_inc(&rdev->bdev->bd_count);
disk->operational = 1;
@@ -1368,10 +1344,9 @@ static int run(mddev_t *mddev)
/*
* Must be a spare disk ..
*/
- printk(SPARE, partition_name(rdev->dev));
+ printk(SPARE, bdev_partition_name(rdev->bdev));
disk->number = descriptor->number;
disk->raid_disk = disk_idx;
- disk->dev = rdev->dev;
disk->bdev = rdev->bdev;
atomic_inc(&rdev->bdev->bd_count);
disk->operational = 0;
@@ -1405,7 +1380,6 @@ static int run(mddev_t *mddev)
!disk->used_slot) {
disk->number = descriptor->number;
disk->raid_disk = disk_idx;
- disk->dev = NODEV;
disk->bdev = NULL;
disk->operational = 0;
disk->write_only = 0;
@@ -1495,7 +1469,11 @@ static mdk_personality_t raid1_personality =
stop: stop,
status: status,
error_handler: error,
- diskop: diskop,
+ hot_add_disk: raid1_add_disk,
+ hot_remove_disk:raid1_remove_disk,
+ spare_write: raid1_spare_write,
+ spare_inactive: raid1_spare_inactive,
+ spare_active: raid1_spare_active,
sync_request: sync_request
};
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index f19d8d936f44..5d0af20344cc 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -439,7 +439,7 @@ static void raid5_build_block (struct stripe_head *sh, int i)
dev->sector = compute_blocknr(sh, i);
}
-static int error (mddev_t *mddev, kdev_t dev)
+static int error(mddev_t *mddev, struct block_device *bdev)
{
raid5_conf_t *conf = (raid5_conf_t *) mddev->private;
mdp_super_t *sb = mddev->sb;
@@ -449,36 +449,36 @@ static int error (mddev_t *mddev, kdev_t dev)
PRINTK("raid5: error called\n");
for (i = 0, disk = conf->disks; i < conf->raid_disks; i++, disk++) {
- if (kdev_same(disk->dev, dev)) {
- if (disk->operational) {
- disk->operational = 0;
- mark_disk_faulty(sb->disks+disk->number);
- mark_disk_nonsync(sb->disks+disk->number);
- mark_disk_inactive(sb->disks+disk->number);
- sb->active_disks--;
- sb->working_disks--;
- sb->failed_disks++;
- mddev->sb_dirty = 1;
- conf->working_disks--;
- conf->failed_disks++;
- md_wakeup_thread(conf->thread);
- printk (KERN_ALERT
- "raid5: Disk failure on %s, disabling device."
- " Operation continuing on %d devices\n",
- partition_name (dev), conf->working_disks);
- }
- return 0;
+ if (disk->bdev != bdev)
+ continue;
+ if (disk->operational) {
+ disk->operational = 0;
+ mark_disk_faulty(sb->disks+disk->number);
+ mark_disk_nonsync(sb->disks+disk->number);
+ mark_disk_inactive(sb->disks+disk->number);
+ sb->active_disks--;
+ sb->working_disks--;
+ sb->failed_disks++;
+ mddev->sb_dirty = 1;
+ conf->working_disks--;
+ conf->failed_disks++;
+ md_wakeup_thread(conf->thread);
+ printk (KERN_ALERT
+ "raid5: Disk failure on %s, disabling device."
+ " Operation continuing on %d devices\n",
+ bdev_partition_name(bdev), conf->working_disks);
}
+ return 0;
}
/*
* handle errors in spares (during reconstruction)
*/
if (conf->spare) {
disk = conf->spare;
- if (kdev_same(disk->dev, dev)) {
+ if (disk->bdev == bdev) {
printk (KERN_ALERT
"raid5: Disk failure on spare %s\n",
- partition_name (dev));
+ bdev_partition_name (bdev));
if (!conf->spare->operational) {
/* probably a SET_DISK_FAULTY ioctl */
return -EIO;
@@ -1017,7 +1017,7 @@ static void handle_stripe(struct stripe_head *sh)
locked++;
PRINTK("Reading block %d (sync=%d)\n", i, syncing);
if (syncing)
- md_sync_acct(conf->disks[i].dev, STRIPE_SECTORS);
+ md_sync_acct(conf->disks[i].bdev, STRIPE_SECTORS);
}
}
}
@@ -1156,9 +1156,9 @@ static void handle_stripe(struct stripe_head *sh)
locked++;
set_bit(STRIPE_INSYNC, &sh->state);
if (conf->disks[failed_num].operational)
- md_sync_acct(conf->disks[failed_num].dev, STRIPE_SECTORS);
+ md_sync_acct(conf->disks[failed_num].bdev, STRIPE_SECTORS);
else if ((spare=conf->spare))
- md_sync_acct(spare->dev, STRIPE_SECTORS);
+ md_sync_acct(spare->bdev, STRIPE_SECTORS);
}
}
@@ -1428,14 +1428,13 @@ static int run (mddev_t *mddev)
disk = conf->disks + raid_disk;
if (disk_faulty(desc)) {
- printk(KERN_ERR "raid5: disabled device %s (errors detected)\n", partition_name(rdev->dev));
+ printk(KERN_ERR "raid5: disabled device %s (errors detected)\n", bdev_partition_name(rdev->bdev));
if (!rdev->faulty) {
MD_BUG();
goto abort;
}
disk->number = desc->number;
disk->raid_disk = raid_disk;
- disk->dev = rdev->dev;
disk->bdev = rdev->bdev;
disk->operational = 0;
@@ -1446,23 +1445,22 @@ static int run (mddev_t *mddev)
}
if (disk_active(desc)) {
if (!disk_sync(desc)) {
- printk(KERN_ERR "raid5: disabled device %s (not in sync)\n", partition_name(rdev->dev));
+ printk(KERN_ERR "raid5: disabled device %s (not in sync)\n", bdev_partition_name(rdev->bdev));
MD_BUG();
goto abort;
}
if (raid_disk > sb->raid_disks) {
- printk(KERN_ERR "raid5: disabled device %s (inconsistent descriptor)\n", partition_name(rdev->dev));
+ printk(KERN_ERR "raid5: disabled device %s (inconsistent descriptor)\n", bdev_partition_name(rdev->bdev));
continue;
}
if (disk->operational) {
- printk(KERN_ERR "raid5: disabled device %s (device %d already operational)\n", partition_name(rdev->dev), raid_disk);
+ printk(KERN_ERR "raid5: disabled device %s (device %d already operational)\n", bdev_partition_name(rdev->bdev), raid_disk);
continue;
}
- printk(KERN_INFO "raid5: device %s operational as raid disk %d\n", partition_name(rdev->dev), raid_disk);
+ printk(KERN_INFO "raid5: device %s operational as raid disk %d\n", bdev_partition_name(rdev->bdev), raid_disk);
disk->number = desc->number;
disk->raid_disk = raid_disk;
- disk->dev = rdev->dev;
disk->bdev = rdev->bdev;
disk->operational = 1;
disk->used_slot = 1;
@@ -1472,10 +1470,9 @@ static int run (mddev_t *mddev)
/*
* Must be a spare disk ..
*/
- printk(KERN_INFO "raid5: spare disk %s\n", partition_name(rdev->dev));
+ printk(KERN_INFO "raid5: spare disk %s\n", bdev_partition_name(rdev->bdev));
disk->number = desc->number;
disk->raid_disk = raid_disk;
- disk->dev = rdev->dev;
disk->bdev = rdev->bdev;
disk->operational = 0;
@@ -1495,7 +1492,6 @@ static int run (mddev_t *mddev)
disk->number = desc->number;
disk->raid_disk = raid_disk;
- disk->dev = NODEV;
disk->bdev = NULL;
disk->operational = 0;
@@ -1691,282 +1687,246 @@ static void print_raid5_conf (raid5_conf_t *conf)
printk(" disk %d, s:%d, o:%d, n:%d rd:%d us:%d dev:%s\n",
i, tmp->spare,tmp->operational,
tmp->number,tmp->raid_disk,tmp->used_slot,
- partition_name(tmp->dev));
+ bdev_partition_name(tmp->bdev));
+ }
+}
+
+static struct disk_info *find_spare(mddev_t *mddev, int number)
+{
+ raid5_conf_t *conf = mddev->private;
+ int i;
+ for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
+ struct disk_info *p = conf->disks + i;
+ if (p->spare && p->number == number)
+ return p;
}
+ return NULL;
}
-static int diskop(mddev_t *mddev, mdp_disk_t **d, int state)
+static int raid5_spare_active(mddev_t *mddev, mdp_disk_t **d)
{
int err = 0;
- int i, failed_disk=-1, spare_disk=-1, removed_disk=-1, added_disk=-1;
+ int i, failed_disk=-1, spare_disk=-1;
raid5_conf_t *conf = mddev->private;
- struct disk_info *tmp, *sdisk, *fdisk, *rdisk, *adisk;
+ struct disk_info *tmp, *sdisk, *fdisk;
mdp_super_t *sb = mddev->sb;
- mdp_disk_t *failed_desc, *spare_desc, *added_desc;
+ mdp_disk_t *failed_desc, *spare_desc;
mdk_rdev_t *spare_rdev, *failed_rdev;
print_raid5_conf(conf);
spin_lock_irq(&conf->device_lock);
+ for (i = 0; i < conf->raid_disks; i++) {
+ tmp = conf->disks + i;
+ if ((!tmp->operational && !tmp->spare) ||
+ !tmp->used_slot) {
+ failed_disk = i;
+ break;
+ }
+ }
+ if (failed_disk == -1) {
+ MD_BUG();
+ err = 1;
+ goto abort;
+ }
/*
- * find the disk ...
+ * Find the spare disk ... (can only be in the 'high'
+ * area of the array)
*/
- switch (state) {
-
- case DISKOP_SPARE_ACTIVE:
-
- /*
- * Find the failed disk within the RAID5 configuration ...
- * (this can only be in the first conf->raid_disks part)
- */
- for (i = 0; i < conf->raid_disks; i++) {
- tmp = conf->disks + i;
- if ((!tmp->operational && !tmp->spare) ||
- !tmp->used_slot) {
- failed_disk = i;
- break;
- }
- }
- /*
- * When we activate a spare disk we _must_ have a disk in
- * the lower (active) part of the array to replace.
- */
- if ((failed_disk == -1) || (failed_disk >= conf->raid_disks)) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- /* fall through */
-
- case DISKOP_SPARE_WRITE:
- case DISKOP_SPARE_INACTIVE:
-
- /*
- * Find the spare disk ... (can only be in the 'high'
- * area of the array)
- */
- for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
- tmp = conf->disks + i;
- if (tmp->spare && tmp->number == (*d)->number) {
- spare_disk = i;
- break;
- }
- }
- if (spare_disk == -1) {
- MD_BUG();
- err = 1;
- goto abort;
+ for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
+ tmp = conf->disks + i;
+ if (tmp->spare && tmp->number == (*d)->number) {
+ spare_disk = i;
+ break;
}
- break;
-
- case DISKOP_HOT_REMOVE_DISK:
+ }
+ if (spare_disk == -1) {
+ MD_BUG();
+ err = 1;
+ goto abort;
+ }
- for (i = 0; i < MD_SB_DISKS; i++) {
- tmp = conf->disks + i;
- if (tmp->used_slot && (tmp->number == (*d)->number)) {
- if (tmp->operational) {
- err = -EBUSY;
- goto abort;
- }
- removed_disk = i;
- break;
- }
- }
- if (removed_disk == -1) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- break;
+ if (!conf->spare) {
+ MD_BUG();
+ err = 1;
+ goto abort;
+ }
+ sdisk = conf->disks + spare_disk;
+ fdisk = conf->disks + failed_disk;
- case DISKOP_HOT_ADD_DISK:
+ spare_desc = &sb->disks[sdisk->number];
+ failed_desc = &sb->disks[fdisk->number];
- for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
- tmp = conf->disks + i;
- if (!tmp->used_slot) {
- added_disk = i;
- break;
- }
- }
- if (added_disk == -1) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- break;
+ if (spare_desc != *d || spare_desc->raid_disk != sdisk->raid_disk ||
+ sdisk->raid_disk != spare_disk || fdisk->raid_disk != failed_disk ||
+ failed_desc->raid_disk != fdisk->raid_disk) {
+ MD_BUG();
+ err = 1;
+ goto abort;
}
- switch (state) {
/*
- * Switch the spare disk to write-only mode:
+ * do the switch finally
*/
- case DISKOP_SPARE_WRITE:
- if (conf->spare) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- sdisk = conf->disks + spare_disk;
- sdisk->operational = 1;
- sdisk->write_only = 1;
- conf->spare = sdisk;
- break;
- /*
- * Deactivate a spare disk:
+ spare_rdev = find_rdev_nr(mddev, spare_desc->number);
+ failed_rdev = find_rdev_nr(mddev, failed_desc->number);
+
+ /* There must be a spare_rdev, but there may not be a
+ * failed_rdev. That slot might be empty...
*/
- case DISKOP_SPARE_INACTIVE:
- sdisk = conf->disks + spare_disk;
- sdisk->operational = 0;
- sdisk->write_only = 0;
- /*
- * Was the spare being resynced?
- */
- if (conf->spare == sdisk)
- conf->spare = NULL;
- break;
+ spare_rdev->desc_nr = failed_desc->number;
+ if (failed_rdev)
+ failed_rdev->desc_nr = spare_desc->number;
+
+ xchg_values(*spare_desc, *failed_desc);
+ xchg_values(*fdisk, *sdisk);
+
/*
- * Activate (mark read-write) the (now sync) spare disk,
- * which means we switch it's 'raid position' (->raid_disk)
- * with the failed disk. (only the first 'conf->raid_disks'
- * slots are used for 'real' disks and we must preserve this
- * property)
+ * (careful, 'failed' and 'spare' are switched from now on)
+ *
+ * we want to preserve linear numbering and we want to
+ * give the proper raid_disk number to the now activated
+ * disk. (this means we switch back these values)
*/
- case DISKOP_SPARE_ACTIVE:
- if (!conf->spare) {
- MD_BUG();
- err = 1;
- goto abort;
- }
- sdisk = conf->disks + spare_disk;
- fdisk = conf->disks + failed_disk;
- spare_desc = &sb->disks[sdisk->number];
- failed_desc = &sb->disks[fdisk->number];
+ xchg_values(spare_desc->raid_disk, failed_desc->raid_disk);
+ xchg_values(sdisk->raid_disk, fdisk->raid_disk);
+ xchg_values(spare_desc->number, failed_desc->number);
+ xchg_values(sdisk->number, fdisk->number);
- if (spare_desc != *d) {
- MD_BUG();
- err = 1;
- goto abort;
- }
+ *d = failed_desc;
- if (spare_desc->raid_disk != sdisk->raid_disk) {
- MD_BUG();
- err = 1;
- goto abort;
- }
-
- if (sdisk->raid_disk != spare_disk) {
- MD_BUG();
- err = 1;
- goto abort;
- }
-
- if (failed_desc->raid_disk != fdisk->raid_disk) {
- MD_BUG();
- err = 1;
- goto abort;
- }
-
- if (fdisk->raid_disk != failed_disk) {
- MD_BUG();
- err = 1;
- goto abort;
- }
+ if (!sdisk->bdev)
+ sdisk->used_slot = 0;
- /*
- * do the switch finally
- */
- spare_rdev = find_rdev_nr(mddev, spare_desc->number);
- failed_rdev = find_rdev_nr(mddev, failed_desc->number);
-
- /* There must be a spare_rdev, but there may not be a
- * failed_rdev. That slot might be empty...
- */
- spare_rdev->desc_nr = failed_desc->number;
- if (failed_rdev)
- failed_rdev->desc_nr = spare_desc->number;
-
- xchg_values(*spare_desc, *failed_desc);
- xchg_values(*fdisk, *sdisk);
+ /*
+ * this really activates the spare.
+ */
+ fdisk->spare = 0;
+ fdisk->write_only = 0;
- /*
- * (careful, 'failed' and 'spare' are switched from now on)
- *
- * we want to preserve linear numbering and we want to
- * give the proper raid_disk number to the now activated
- * disk. (this means we switch back these values)
- */
-
- xchg_values(spare_desc->raid_disk, failed_desc->raid_disk);
- xchg_values(sdisk->raid_disk, fdisk->raid_disk);
- xchg_values(spare_desc->number, failed_desc->number);
- xchg_values(sdisk->number, fdisk->number);
+ /*
+ * if we activate a spare, we definitely replace a
+ * non-operational disk slot in the 'low' area of
+ * the disk array.
+ */
+ conf->failed_disks--;
+ conf->working_disks++;
+ conf->spare = NULL;
+abort:
+ spin_unlock_irq(&conf->device_lock);
+ print_raid5_conf(conf);
+ return err;
+}
- *d = failed_desc;
+static int raid5_spare_inactive(mddev_t *mddev)
+{
+ raid5_conf_t *conf = mddev->private;
+ struct disk_info *p;
+ int err = 0;
- if (kdev_none(sdisk->dev))
- sdisk->used_slot = 0;
+ print_raid5_conf(conf);
+ spin_lock_irq(&conf->device_lock);
+ p = find_spare(mddev, mddev->spare->number);
+ if (p) {
+ p->operational = 0;
+ p->write_only = 0;
+ if (conf->spare == p)
+ conf->spare = NULL;
+ } else {
+ MD_BUG();
+ err = 1;
+ }
+ spin_unlock_irq(&conf->device_lock);
+ print_raid5_conf(conf);
+ return err;
+}
- /*
- * this really activates the spare.
- */
- fdisk->spare = 0;
- fdisk->write_only = 0;
+static int raid5_spare_write(mddev_t *mddev, int number)
+{
+ raid5_conf_t *conf = mddev->private;
+ struct disk_info *p;
+ int err = 0;
- /*
- * if we activate a spare, we definitely replace a
- * non-operational disk slot in the 'low' area of
- * the disk array.
- */
- conf->failed_disks--;
- conf->working_disks++;
- conf->spare = NULL;
+ print_raid5_conf(conf);
+ spin_lock_irq(&conf->device_lock);
+ p = find_spare(mddev, number);
+ if (p && !conf->spare) {
+ p->operational = 1;
+ p->write_only = 1;
+ conf->spare = p;
+ } else {
+ MD_BUG();
+ err = 1;
+ }
+ spin_unlock_irq(&conf->device_lock);
+ print_raid5_conf(conf);
+ return err;
+}
- break;
+static int raid5_remove_disk(mddev_t *mddev, int number)
+{
+ raid5_conf_t *conf = mddev->private;
+ int err = 1;
+ int i;
- case DISKOP_HOT_REMOVE_DISK:
- rdisk = conf->disks + removed_disk;
+ print_raid5_conf(conf);
+ spin_lock_irq(&conf->device_lock);
- if (rdisk->spare && (removed_disk < conf->raid_disks)) {
- MD_BUG();
- err = 1;
- goto abort;
+ for (i = 0; i < MD_SB_DISKS; i++) {
+ struct disk_info *p = conf->disks + i;
+ if (p->used_slot && p->number == number) {
+ if (p->operational) {
+ err = -EBUSY;
+ goto abort;
+ }
+ if (p->spare && i < conf->raid_disks)
+ break;
+ p->bdev = NULL;
+ p->used_slot = 0;
+ err = 0;
+ break;
}
- rdisk->dev = NODEV;
- rdisk->bdev = NULL;
- rdisk->used_slot = 0;
+ }
+ if (err)
+ MD_BUG();
+abort:
+ spin_unlock_irq(&conf->device_lock);
+ print_raid5_conf(conf);
+ return err;
+}
- break;
+static int raid5_add_disk(mddev_t *mddev, mdp_disk_t *added_desc,
+ mdk_rdev_t *rdev)
+{
+ raid5_conf_t *conf = mddev->private;
+ int err = 1;
+ int i;
- case DISKOP_HOT_ADD_DISK:
- adisk = conf->disks + added_disk;
- added_desc = *d;
+ print_raid5_conf(conf);
+ spin_lock_irq(&conf->device_lock);
+ /*
+ * find the disk ...
+ */
- if (added_disk != added_desc->number) {
- MD_BUG();
- err = 1;
- goto abort;
+ for (i = conf->raid_disks; i < MD_SB_DISKS; i++) {
+ struct disk_info *p = conf->disks + i;
+ if (!p->used_slot) {
+ if (added_desc->number != i)
+ break;
+ p->number = added_desc->number;
+ p->raid_disk = added_desc->raid_disk;
+ /* it will be held open by rdev */
+ p->bdev = rdev->bdev;
+ p->operational = 0;
+ p->write_only = 0;
+ p->spare = 1;
+ p->used_slot = 1;
+ err = 0;
+ break;
}
-
- adisk->number = added_desc->number;
- adisk->raid_disk = added_desc->raid_disk;
- adisk->dev = mk_kdev(added_desc->major,added_desc->minor);
- /* it will be held open by rdev */
- adisk->bdev = bdget(kdev_t_to_nr(adisk->dev));
-
- adisk->operational = 0;
- adisk->write_only = 0;
- adisk->spare = 1;
- adisk->used_slot = 1;
-
-
- break;
-
- default:
- MD_BUG();
- err = 1;
- goto abort;
}
-abort:
+ if (err)
+ MD_BUG();
spin_unlock_irq(&conf->device_lock);
print_raid5_conf(conf);
return err;
@@ -1980,7 +1940,11 @@ static mdk_personality_t raid5_personality=
stop: stop,
status: status,
error_handler: error,
- diskop: diskop,
+ hot_add_disk: raid5_add_disk,
+ hot_remove_disk:raid5_remove_disk,
+ spare_write: raid5_spare_write,
+ spare_inactive: raid5_spare_inactive,
+ spare_active: raid5_spare_active,
sync_request: sync_request
};
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index 7ed4d818f3e6..a9ae22858798 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -522,8 +522,8 @@ void get_sectorsize(int i)
SCp->needs_sector_size = 1;
} else {
#if 0
- if (cdrom_get_last_written(mkdev(MAJOR_NR, i),
- &scsi_CDs[i].capacity))
+ if (cdrom_get_last_written(&SCp->cdi,
+ &SCp->capacity))
#endif
SCp->capacity = 1 + ((buffer[0] << 24) |
(buffer[1] << 16) |
diff --git a/fs/Makefile b/fs/Makefile
index 28fe3eb901db..2f516179753c 100644
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -40,6 +40,7 @@ obj-$(CONFIG_QUOTACTL) += quota.o
obj-$(CONFIG_PROC_FS) += proc/
obj-y += partitions/
obj-y += driverfs/
+obj-y += devpts/
# Do not add any filesystems before this line
obj-$(CONFIG_EXT3_FS) += ext3/ # Before ext2 so root fs can be ext3
@@ -81,7 +82,6 @@ obj-$(CONFIG_AUTOFS_FS) += autofs/
obj-$(CONFIG_AUTOFS4_FS) += autofs4/
obj-$(CONFIG_ADFS_FS) += adfs/
obj-$(CONFIG_REISERFS_FS) += reiserfs/
-obj-$(CONFIG_DEVPTS_FS) += devpts/
obj-$(CONFIG_SUN_OPENPROMFS) += openpromfs/
obj-$(CONFIG_JFS_FS) += jfs/
diff --git a/fs/block_dev.c b/fs/block_dev.c
index be2c8ef578de..ec7e816c7c0f 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -297,7 +297,6 @@ struct block_device *bdget(dev_t dev)
new_bdev->bd_inode = inode;
inode->i_mode = S_IFBLK;
inode->i_rdev = kdev;
- inode->i_dev = kdev;
inode->i_bdev = new_bdev;
inode->i_data.a_ops = &def_blk_aops;
inode->i_data.gfp_mask = GFP_USER;
diff --git a/fs/buffer.c b/fs/buffer.c
index 8510f2bb9309..f96f5f48bd13 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -246,22 +246,6 @@ int fsync_bdev(struct block_device *bdev)
}
/*
- * Write out and wait upon all dirty data associated with this
- * kdev_t. Filesystem data as well as the underlying block
- * device. Takes the superblock lock.
- */
-int fsync_dev(kdev_t dev)
-{
- struct block_device *bdev = bdget(kdev_t_to_nr(dev));
- if (bdev) {
- int res = fsync_bdev(bdev);
- bdput(bdev);
- return res;
- }
- return 0;
-}
-
-/*
* sync everything.
*/
asmlinkage long sys_sync(void)
diff --git a/fs/devpts/Makefile b/fs/devpts/Makefile
index 59aba3c15f50..f80cfe5bd8cd 100644
--- a/fs/devpts/Makefile
+++ b/fs/devpts/Makefile
@@ -4,6 +4,6 @@
obj-$(CONFIG_DEVPTS_FS) += devpts.o
-devpts-objs := root.o inode.o
+devpts-objs := inode.o
include $(TOPDIR)/Rules.make
diff --git a/fs/devpts/devpts_i.h b/fs/devpts/devpts_i.h
deleted file mode 100644
index da387ea1a932..000000000000
--- a/fs/devpts/devpts_i.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- linux-c -*- --------------------------------------------------------- *
- *
- * linux/fs/devpts/devpts_i.h
- *
- * Copyright 1998 H. Peter Anvin -- All Rights Reserved
- *
- * This file is part of the Linux kernel and is made available under
- * the terms of the GNU General Public License, version 2, or at your
- * option, any later version, incorporated herein by reference.
- *
- * ------------------------------------------------------------------------- */
-
-#include <linux/fs.h>
-#include <linux/tty.h>
-#include <linux/types.h>
-
-#define BUILDING_DEVPTS 1
-#include <linux/devpts_fs.h>
-
-struct devpts_sb_info {
- u32 magic;
- int setuid;
- int setgid;
- uid_t uid;
- gid_t gid;
- umode_t mode;
-
- unsigned int max_ptys;
- struct inode **inodes;
-};
-
-#define DEVPTS_SUPER_MAGIC 0x1cd1
-#define DEVPTS_SBI_MAGIC 0x01da1d02
-
-extern inline struct devpts_sb_info *SBI(struct super_block *sb)
-{
- return (struct devpts_sb_info *)(sb->u.generic_sbp);
-}
-
-extern struct inode_operations devpts_root_inode_operations;
-extern struct file_operations devpts_root_operations;
diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c
index 0727e719279d..973c288fe28a 100644
--- a/fs/devpts/inode.c
+++ b/fs/devpts/inode.c
@@ -11,135 +11,70 @@
* ------------------------------------------------------------------------- */
#include <linux/module.h>
-
-#include <linux/string.h>
-#include <linux/fs.h>
#include <linux/init.h>
-#include <linux/kdev_t.h>
-#include <linux/kernel.h>
-#include <linux/major.h>
-#include <linux/slab.h>
-#include <linux/stat.h>
-#include <linux/tty.h>
-#include <asm/bitops.h>
-#include <asm/uaccess.h>
+#include <linux/fs.h>
+#include <linux/sched.h>
+#include <linux/namei.h>
-#include "devpts_i.h"
+#define DEVPTS_SUPER_MAGIC 0x1cd1
static struct vfsmount *devpts_mnt;
+static struct dentry *devpts_root;
-static void devpts_put_super(struct super_block *sb)
-{
- struct devpts_sb_info *sbi = SBI(sb);
- struct inode *inode;
- int i;
+static struct {
+ int setuid;
+ int setgid;
+ uid_t uid;
+ gid_t gid;
+ umode_t mode;
+} config = {mode: 0600};
- for ( i = 0 ; i < sbi->max_ptys ; i++ ) {
- if ( (inode = sbi->inodes[i]) ) {
- if ( atomic_read(&inode->i_count) != 1 )
- printk("devpts_put_super: badness: entry %d count %d\n",
- i, atomic_read(&inode->i_count));
- inode->i_nlink--;
- iput(inode);
- }
- }
- kfree(sbi->inodes);
- kfree(sbi);
-}
-
-static int devpts_remount (struct super_block * sb, int * flags, char * data);
-
-static struct super_operations devpts_sops = {
- put_super: devpts_put_super,
- statfs: simple_statfs,
- remount_fs: devpts_remount,
-};
-
-static int devpts_parse_options(char *options, struct devpts_sb_info *sbi)
+static int devpts_remount(struct super_block *sb, int *flags, char *data)
{
int setuid = 0;
int setgid = 0;
uid_t uid = 0;
gid_t gid = 0;
umode_t mode = 0600;
- char *this_char, *value;
+ char *this_char;
this_char = NULL;
- while ((this_char = strsep(&options, ",")) != NULL) {
+ while ((this_char = strsep(&data, ",")) != NULL) {
+ int n;
+ char dummy;
if (!*this_char)
continue;
- if ((value = strchr(this_char,'=')) != NULL)
- *value++ = 0;
- if (!strcmp(this_char,"uid")) {
- if (!value || !*value)
- return 1;
- uid = simple_strtoul(value,&value,0);
- if (*value)
- return 1;
+ if (sscanf(this_char, "uid=%i%c", &n, &dummy) == 1) {
setuid = 1;
- }
- else if (!strcmp(this_char,"gid")) {
- if (!value || !*value)
- return 1;
- gid = simple_strtoul(value,&value,0);
- if (*value)
- return 1;
+ uid = n;
+ } else if (sscanf(this_char, "gid=%i%c", &n, &dummy) == 1) {
setgid = 1;
+ gid = n;
+ } else if (sscanf(this_char, "mode=%o%c", &n, &dummy) == 1)
+ mode = n & ~S_IFMT;
+ else {
+ printk("devpts: called with bogus options\n");
+ return -EINVAL;
}
- else if (!strcmp(this_char,"mode")) {
- if (!value || !*value)
- return 1;
- mode = simple_strtoul(value,&value,8);
- if (*value)
- return 1;
- }
- else
- return 1;
}
- sbi->setuid = setuid;
- sbi->setgid = setgid;
- sbi->uid = uid;
- sbi->gid = gid;
- sbi->mode = mode & ~S_IFMT;
+ config.setuid = setuid;
+ config.setgid = setgid;
+ config.uid = uid;
+ config.gid = gid;
+ config.mode = mode;
return 0;
}
-static int devpts_remount(struct super_block * sb, int * flags, char * data)
-{
- struct devpts_sb_info *sbi = sb->u.generic_sbp;
- int res = devpts_parse_options(data,sbi);
- if (res) {
- printk("devpts: called with bogus options\n");
- return -EINVAL;
- }
- return 0;
-}
+static struct super_operations devpts_sops = {
+ statfs: simple_statfs,
+ remount_fs: devpts_remount,
+};
static int devpts_fill_super(struct super_block *s, void *data, int silent)
{
- int error = -ENOMEM;
struct inode * inode;
- struct devpts_sb_info *sbi;
-
- sbi = kmalloc(sizeof(*sbi), GFP_KERNEL);
- if ( !sbi )
- goto fail;
- memset(sbi, 0, sizeof(*sbi));
-
- sbi->magic = DEVPTS_SBI_MAGIC;
- sbi->max_ptys = unix98_max_ptys;
- sbi->inodes = kmalloc(sizeof(struct inode *) * sbi->max_ptys, GFP_KERNEL);
- if ( !sbi->inodes )
- goto fail_free;
- memset(sbi->inodes, 0, sizeof(struct inode *) * sbi->max_ptys);
- if ( devpts_parse_options(data,sbi) && !silent) {
- error = -EINVAL;
- printk("devpts: called with bogus options\n");
- goto fail_free;
- }
- s->u.generic_sbp = (void *) sbi;
s->s_blocksize = 1024;
s->s_blocksize_bits = 10;
s->s_magic = DEVPTS_SUPER_MAGIC;
@@ -147,27 +82,25 @@ static int devpts_fill_super(struct super_block *s, void *data, int silent)
inode = new_inode(s);
if (!inode)
- goto fail_free;
+ goto fail;
inode->i_ino = 1;
inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
inode->i_blocks = 0;
inode->i_blksize = 1024;
inode->i_uid = inode->i_gid = 0;
inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR;
- inode->i_op = &devpts_root_inode_operations;
- inode->i_fop = &devpts_root_operations;
+ inode->i_op = &simple_dir_inode_operations;
+ inode->i_fop = &simple_dir_operations;
inode->i_nlink = 2;
- s->s_root = d_alloc_root(inode);
+ devpts_root = s->s_root = d_alloc_root(inode);
if (s->s_root)
return 0;
printk("devpts: get root dentry failed\n");
iput(inode);
-fail_free:
- kfree(sbi);
fail:
- return error;
+ return -ENOMEM;
}
static struct super_block *devpts_get_sb(struct file_system_type *fs_type,
@@ -183,44 +116,52 @@ static struct file_system_type devpts_fs_type = {
kill_sb: kill_anon_super,
};
-void devpts_pty_new(int number, kdev_t device)
+/*
+ * The normal naming convention is simply /dev/pts/<number>; this conforms
+ * to the System V naming convention
+ */
+
+static struct dentry *get_node(int num)
{
- struct super_block *sb = devpts_mnt->mnt_sb;
- struct devpts_sb_info *sbi = SBI(sb);
- struct inode *inode;
-
- if ( sbi->inodes[number] )
- return; /* Already registered, this does happen */
-
- inode = new_inode(sb);
+ char s[10];
+ struct dentry *root = devpts_root;
+ down(&root->d_inode->i_sem);
+ return lookup_one_len(s, root, sprintf(s, "%d", num));
+}
+
+void devpts_pty_new(int number, dev_t device)
+{
+ struct dentry *dentry;
+ struct inode *inode = new_inode(devpts_mnt->mnt_sb);
if (!inode)
return;
inode->i_ino = number+2;
- inode->i_blocks = 0;
inode->i_blksize = 1024;
- inode->i_uid = sbi->setuid ? sbi->uid : current->fsuid;
- inode->i_gid = sbi->setgid ? sbi->gid : current->fsgid;
+ inode->i_uid = config.setuid ? config.uid : current->fsuid;
+ inode->i_gid = config.setgid ? config.gid : current->fsgid;
inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
- init_special_inode(inode, S_IFCHR|sbi->mode, kdev_t_to_nr(device));
+ init_special_inode(inode, S_IFCHR|config.mode, device);
- if ( sbi->inodes[number] ) {
- iput(inode);
- return;
- }
- sbi->inodes[number] = inode;
+ dentry = get_node(number);
+ if (!IS_ERR(dentry) && !dentry->d_inode)
+ d_instantiate(dentry, inode);
+ up(&devpts_root->d_inode->i_sem);
}
void devpts_pty_kill(int number)
{
- struct super_block *sb = devpts_mnt->mnt_sb;
- struct devpts_sb_info *sbi = SBI(sb);
- struct inode *inode = sbi->inodes[number];
+ struct dentry *dentry = get_node(number);
- if ( inode ) {
- sbi->inodes[number] = NULL;
- inode->i_nlink--;
- iput(inode);
+ if (!IS_ERR(dentry)) {
+ struct inode *inode = dentry->d_inode;
+ if (inode) {
+ inode->i_nlink--;
+ d_delete(dentry);
+ dput(dentry);
+ }
+ dput(dentry);
}
+ up(&devpts_root->d_inode->i_sem);
}
static int __init init_devpts_fs(void)
@@ -231,22 +172,12 @@ static int __init init_devpts_fs(void)
err = PTR_ERR(devpts_mnt);
if (!IS_ERR(devpts_mnt))
err = 0;
-#ifdef MODULE
- if ( !err ) {
- devpts_upcall_new = devpts_pty_new;
- devpts_upcall_kill = devpts_pty_kill;
- }
-#endif
}
return err;
}
static void __exit exit_devpts_fs(void)
{
-#ifdef MODULE
- devpts_upcall_new = NULL;
- devpts_upcall_kill = NULL;
-#endif
unregister_filesystem(&devpts_fs_type);
kern_umount(devpts_mnt);
}
@@ -254,4 +185,3 @@ static void __exit exit_devpts_fs(void)
module_init(init_devpts_fs)
module_exit(exit_devpts_fs)
MODULE_LICENSE("GPL");
-
diff --git a/fs/devpts/root.c b/fs/devpts/root.c
deleted file mode 100644
index 44e7bd7e3baa..000000000000
--- a/fs/devpts/root.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- linux-c -*- --------------------------------------------------------- *
- *
- * linux/fs/devpts/root.c
- *
- * Copyright 1998 H. Peter Anvin -- All Rights Reserved
- *
- * This file is part of the Linux kernel and is made available under
- * the terms of the GNU General Public License, version 2, or at your
- * option, any later version, incorporated herein by reference.
- *
- * ------------------------------------------------------------------------- */
-
-#include <linux/errno.h>
-#include <linux/stat.h>
-#include <linux/param.h>
-#include <linux/string.h>
-#include <linux/smp_lock.h>
-#include "devpts_i.h"
-
-static int devpts_root_readdir(struct file *,void *,filldir_t);
-static struct dentry *devpts_root_lookup(struct inode *,struct dentry *);
-static int devpts_revalidate(struct dentry *, int);
-
-struct file_operations devpts_root_operations = {
- read: generic_read_dir,
- readdir: devpts_root_readdir,
-};
-
-struct inode_operations devpts_root_inode_operations = {
- lookup: devpts_root_lookup,
-};
-
-static struct dentry_operations devpts_dentry_operations = {
- d_revalidate: devpts_revalidate,
-};
-
-/*
- * The normal naming convention is simply /dev/pts/<number>; this conforms
- * to the System V naming convention
- */
-
-#define genptsname(buf,num) sprintf(buf, "%d", num)
-
-static int devpts_root_readdir(struct file *filp, void *dirent, filldir_t filldir)
-{
- struct inode * inode = filp->f_dentry->d_inode;
- struct devpts_sb_info * sbi = SBI(filp->f_dentry->d_inode->i_sb);
- off_t nr;
- char numbuf[16];
-
- lock_kernel();
-
- nr = filp->f_pos;
-
- switch(nr)
- {
- case 0:
- if (filldir(dirent, ".", 1, nr, inode->i_ino, DT_DIR) < 0)
- goto out;
- filp->f_pos = ++nr;
- /* fall through */
- case 1:
- if (filldir(dirent, "..", 2, nr, inode->i_ino, DT_DIR) < 0)
- goto out;
- filp->f_pos = ++nr;
- /* fall through */
- default:
- while ( nr - 2 < sbi->max_ptys ) {
- int ptynr = nr - 2;
- if ( sbi->inodes[ptynr] ) {
- genptsname(numbuf, ptynr);
- if ( filldir(dirent, numbuf, strlen(numbuf), nr, nr, DT_CHR) < 0 )
- goto out;
- }
- filp->f_pos = ++nr;
- }
- break;
- }
-
-out:
- unlock_kernel();
- return 0;
-}
-
-/*
- * Revalidate is called on every cache lookup. We use it to check that
- * the pty really does still exist. Never revalidate negative dentries;
- * for simplicity (fix later?)
- */
-static int devpts_revalidate(struct dentry * dentry, int flags)
-{
- struct devpts_sb_info *sbi;
-
- if ( !dentry->d_inode )
- return 0;
-
- sbi = SBI(dentry->d_inode->i_sb);
-
- return ( sbi->inodes[dentry->d_inode->i_ino - 2] == dentry->d_inode );
-}
-
-static struct dentry *devpts_root_lookup(struct inode * dir, struct dentry * dentry)
-{
- struct devpts_sb_info *sbi = SBI(dir->i_sb);
- unsigned int entry;
- int i;
- const char *p;
-
- dentry->d_op = &devpts_dentry_operations;
-
- if ( dentry->d_name.len == 1 && dentry->d_name.name[0] == '0' ) {
- entry = 0;
- } else if ( dentry->d_name.len < 1 ) {
- return NULL;
- } else {
- p = dentry->d_name.name;
- if ( *p < '1' || *p > '9' )
- return NULL;
- entry = *p++ - '0';
-
- for ( i = dentry->d_name.len-1 ; i ; i-- ) {
- unsigned int nentry = *p++ - '0';
- if ( nentry > 9 )
- return NULL;
- if ( entry >= ~0U/10 )
- return NULL;
- entry = nentry + entry * 10;
- }
- }
-
- if ( entry >= sbi->max_ptys )
- return NULL;
-
- lock_kernel();
- if ( sbi->inodes[entry] )
- atomic_inc(&sbi->inodes[entry]->i_count);
-
- d_add(dentry, sbi->inodes[entry]);
- unlock_kernel();
-
- return NULL;
-}
diff --git a/fs/inode.c b/fs/inode.c
index a3b2cd4e8a3c..d0e6bda9772a 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -101,7 +101,7 @@ static struct inode *alloc_inode(struct super_block *sb)
struct address_space * const mapping = &inode->i_data;
inode->i_sb = sb;
- inode->i_dev = to_kdev_t(sb->s_dev);
+ inode->i_dev = sb->s_dev;
inode->i_blkbits = sb->s_blocksize_bits;
inode->i_flags = 0;
atomic_set(&inode->i_count, 1);
diff --git a/fs/jfs/jfs_incore.h b/fs/jfs/jfs_incore.h
index c54907dddbe5..71256e2322cd 100644
--- a/fs/jfs/jfs_incore.h
+++ b/fs/jfs/jfs_incore.h
@@ -122,7 +122,7 @@ struct jfs_sb_info {
short nbperpage; /* 2: blocks per page */
short l2nbperpage; /* 2: log2 blocks per page */
short l2niperblk; /* 2: log2 inodes per page */
- kdev_t logdev; /* 2: external log device */
+ u32 logdev; /* 2: external log device */
uint aggregate; /* volume identifier in log record */
pxd_t logpxd; /* 8: pxd describing log */
pxd_t ait2; /* 8: pxd describing AIT copy */
diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c
index 1bd50e77c4a5..68e08f8b6004 100644
--- a/fs/jfs/jfs_logmgr.c
+++ b/fs/jfs/jfs_logmgr.c
@@ -1102,7 +1102,7 @@ int lmLogOpen(struct super_block *sb, log_t ** logptr)
*/
externalLog:
- if (!(bdev = bdget(kdev_t_to_nr(JFS_SBI(sb)->logdev)))) {
+ if (!(bdev = bdget(JFS_SBI(sb)->logdev))) {
rc = ENODEV;
goto free;
}
diff --git a/fs/jfs/jfs_mount.c b/fs/jfs/jfs_mount.c
index afab3ab7ed5f..d8a7773fa9ff 100644
--- a/fs/jfs/jfs_mount.c
+++ b/fs/jfs/jfs_mount.c
@@ -406,7 +406,7 @@ static int chkSuper(struct super_block *sb)
if (sbi->mntflag & JFS_INLINELOG)
sbi->logpxd = j_sb->s_logpxd;
else {
- sbi->logdev = to_kdev_t(le32_to_cpu(j_sb->s_logdev));
+ sbi->logdev = le32_to_cpu(j_sb->s_logdev);
memcpy(sbi->uuid, j_sb->s_uuid, sizeof(sbi->uuid));
memcpy(sbi->loguuid, j_sb->s_loguuid, sizeof(sbi->uuid));
}
diff --git a/fs/locks.c b/fs/locks.c
index 1e58f91263c5..bb32d1516343 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -1751,9 +1751,12 @@ static void lock_get_status(char* out, struct file_lock *fl, int id, char *pfx)
? (fl->fl_type & F_UNLCK) ? "UNLCK" : "READ "
: (fl->fl_type & F_WRLCK) ? "WRITE" : "READ ");
}
+ /*
+ * NOTE: it should be inode->i_sb->s_id, not kdevname(...).
+ */
out += sprintf(out, "%d %s:%ld ",
fl->fl_pid,
- inode ? kdevname(inode->i_dev) : "<none>",
+ inode ? kdevname(to_kdev_t(inode->i_dev)) : "<none>",
inode ? inode->i_ino : 0);
out += sprintf(out, "%Ld ", fl->fl_start);
if (fl->fl_end == OFFSET_MAX)
diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c
index e974fe17805f..6f72f241ea9b 100644
--- a/fs/nfsd/export.c
+++ b/fs/nfsd/export.c
@@ -68,17 +68,17 @@ static svc_client * clients;
* Find the client's export entry matching xdev/xino.
*/
svc_export *
-exp_get(svc_client *clp, kdev_t dev, ino_t ino)
+exp_get(svc_client *clp, dev_t dev, ino_t ino)
{
struct list_head *head, *p;
if (!clp)
return NULL;
- head = &clp->cl_export[EXPORT_HASH(kdev_t_to_nr(dev))];
+ head = &clp->cl_export[EXPORT_HASH(dev)];
list_for_each(p, head) {
svc_export *exp = list_entry(p, svc_export, ex_hash);
- if (exp->ex_ino == ino && kdev_same(exp->ex_dev, dev))
+ if (exp->ex_ino == ino && exp->ex_dev == dev)
return exp;
}
return NULL;
@@ -250,7 +250,7 @@ exp_export(struct nfsctl_export *nxp)
struct nameidata nd;
struct inode *inode = NULL;
int err;
- kdev_t dev;
+ dev_t dev;
ino_t ino;
/* Consistency check */
@@ -276,7 +276,7 @@ exp_export(struct nfsctl_export *nxp)
if (err)
goto out_unlock;
inode = nd.dentry->d_inode;
- dev = inode->i_dev;
+ dev = inode->i_sb->s_dev;
ino = inode->i_ino;
err = -EINVAL;
@@ -364,7 +364,7 @@ exp_export(struct nfsctl_export *nxp)
if (parent)
exp_change_parents(clp, parent, exp);
- list_add(&exp->ex_hash, clp->cl_export + EXPORT_HASH(kdev_t_to_nr(dev)));
+ list_add(&exp->ex_hash, clp->cl_export + EXPORT_HASH(dev));
list_add_tail(&exp->ex_list, &clp->cl_list);
exp_fsid_hash(clp, exp);
@@ -398,7 +398,7 @@ exp_do_unexport(svc_export *unexp)
dentry = unexp->ex_dentry;
mnt = unexp->ex_mnt;
inode = dentry->d_inode;
- if (!kdev_same(unexp->ex_dev, inode->i_dev) || unexp->ex_ino != inode->i_ino)
+ if (unexp->ex_dev != inode->i_sb->s_dev || unexp->ex_ino != inode->i_ino)
printk(KERN_WARNING "nfsd: bad dentry in unexport!\n");
dput(dentry);
mntput(mnt);
@@ -440,8 +440,7 @@ exp_unexport(struct nfsctl_export *nxp)
err = -EINVAL;
clp = exp_getclientbyname(nxp->ex_client);
if (clp) {
- kdev_t ex_dev = to_kdev_t(nxp->ex_dev);
- svc_export *exp = exp_get(clp, ex_dev, nxp->ex_ino);
+ svc_export *exp = exp_get(clp, nxp->ex_dev, nxp->ex_ino);
if (exp) {
exp_do_unexport(exp);
err = 0;
diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
index 89d1f99ef77c..71279e639ba3 100644
--- a/fs/nfsd/nfs3xdr.c
+++ b/fs/nfsd/nfs3xdr.c
@@ -219,7 +219,7 @@ encode_saved_post_attr(struct svc_rqst *rqstp, u32 *p, struct svc_fh *fhp)
&& (fhp->fh_export->ex_flags & NFSEXP_FSID))
p = xdr_encode_hyper(p, (u64) fhp->fh_export->ex_fsid);
else
- p = xdr_encode_hyper(p, (u64) kdev_t_to_nr(inode->i_dev));
+ p = xdr_encode_hyper(p, (u64) inode->i_dev);
p = xdr_encode_hyper(p, (u64) inode->i_ino);
p = encode_time3(p, fhp->fh_post_atime);
p = encode_time3(p, fhp->fh_post_mtime);
diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c
index 4b889c888fbb..f0f88f19164c 100644
--- a/fs/nfsd/nfsfh.c
+++ b/fs/nfsd/nfsfh.c
@@ -97,7 +97,7 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, int access)
rqstp->rq_reffh = fh;
if (!fhp->fh_dentry) {
- kdev_t xdev = NODEV;
+ dev_t xdev = 0;
ino_t xino = 0;
__u32 *datap=NULL;
__u32 tfh[3]; /* filehandle fragment for oldstyle filehandles */
@@ -122,7 +122,7 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, int access)
case 0:
if ((data_left-=2)<0) goto out;
nfsdev = ntohl(*datap++);
- xdev = mk_kdev(nfsdev>>16, nfsdev&0xFFFF);
+ xdev = MKDEV(nfsdev>>16, nfsdev&0xFFFF);
xino = *datap++;
break;
case 1:
@@ -136,7 +136,7 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, int access)
if (fh->fh_size != NFS_FHSIZE)
goto out;
/* assume old filehandle format */
- xdev = u32_to_kdev_t(fh->ofh_xdev);
+ xdev = u32_to_dev_t(fh->ofh_xdev);
xino = u32_to_ino_t(fh->ofh_xino);
}
@@ -308,7 +308,7 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, st
__u32 *datap;
dprintk("nfsd: fh_compose(exp %02x:%02x/%ld %s/%s, ino=%ld)\n",
- major(exp->ex_dev), minor(exp->ex_dev), (long) exp->ex_ino,
+ MAJOR(exp->ex_dev), MINOR(exp->ex_dev), (long) exp->ex_ino,
parent->d_name.name, dentry->d_name.name,
(inode ? inode->i_ino : 0));
@@ -329,7 +329,7 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, st
memset(&fhp->fh_handle.fh_base, 0, NFS_FHSIZE);
fhp->fh_handle.fh_size = NFS_FHSIZE;
fhp->fh_handle.ofh_dcookie = 0xfeebbaca;
- fhp->fh_handle.ofh_dev = htonl((major(exp->ex_dev)<<16)| minor(exp->ex_dev));
+ fhp->fh_handle.ofh_dev = htonl((MAJOR(exp->ex_dev)<<16)| MINOR(exp->ex_dev));
fhp->fh_handle.ofh_xdev = fhp->fh_handle.ofh_dev;
fhp->fh_handle.ofh_xino = ino_t_to_u32(exp->ex_ino);
fhp->fh_handle.ofh_dirino = ino_t_to_u32(parent_ino(dentry));
@@ -348,7 +348,7 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, st
} else {
fhp->fh_handle.fh_fsid_type = 0;
/* fsid_type 0 == 2byte major, 2byte minor, 4byte inode */
- *datap++ = htonl((major(exp->ex_dev)<<16)| minor(exp->ex_dev));
+ *datap++ = htonl((MAJOR(exp->ex_dev)<<16)| MINOR(exp->ex_dev));
*datap++ = ino_t_to_u32(exp->ex_ino);
fhp->fh_handle.fh_size = 3*4;
}
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 02419edd0250..56cd76ef5c57 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -66,7 +66,7 @@ struct raparms {
struct raparms *p_next;
unsigned int p_count;
ino_t p_ino;
- kdev_t p_dev;
+ dev_t p_dev;
struct file_ra_state p_ra;
};
@@ -527,14 +527,14 @@ nfsd_sync_dir(struct dentry *dp)
static spinlock_t ra_lock = SPIN_LOCK_UNLOCKED;
static inline struct raparms *
-nfsd_get_raparms(kdev_t dev, ino_t ino)
+nfsd_get_raparms(dev_t dev, ino_t ino)
{
struct raparms *ra, **rap, **frap = NULL;
int depth = 0;
spin_lock(&ra_lock);
for (rap = &raparm_cache; (ra = *rap); rap = &ra->p_next) {
- if (ra->p_ino == ino && kdev_same(ra->p_dev, dev))
+ if (ra->p_ino == ino && ra->p_dev == dev)
goto found;
depth++;
if (ra->p_count == 0)
@@ -691,8 +691,8 @@ nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
}
if (err >= 0 && stable) {
- static unsigned long last_ino;
- static kdev_t last_dev = NODEV;
+ static ino_t last_ino;
+ static dev_t last_dev = 0;
/*
* Gathered writes: If another process is currently
@@ -708,7 +708,7 @@ nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
*/
if (EX_WGATHER(exp)) {
if (atomic_read(&inode->i_writecount) > 1
- || (last_ino == inode->i_ino && kdev_same(last_dev, inode->i_dev))) {
+ || (last_ino == inode->i_ino && last_dev == inode->i_dev)) {
dprintk("nfsd: write defer %d\n", current->pid);
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout((HZ+99)/100);
diff --git a/fs/partitions/check.c b/fs/partitions/check.c
index 36fc86dcff3e..b4ba922cffeb 100644
--- a/fs/partitions/check.c
+++ b/fs/partitions/check.c
@@ -13,14 +13,9 @@
* Added needed MAJORS for new pairs, {hdi,hdj}, {hdk,hdl}
*/
-#include <linux/config.h>
+#include <linux/init.h>
#include <linux/fs.h>
-#include <linux/genhd.h>
-#include <linux/kernel.h>
-#include <linux/major.h>
#include <linux/blk.h>
-#include <linux/init.h>
-#include <linux/raid/md.h>
#include <linux/buffer_head.h> /* for invalidate_bdev() */
#include <linux/kmod.h>
diff --git a/fs/proc/array.c b/fs/proc/array.c
index 200adb72d9ac..e0b09b3ced45 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -539,11 +539,11 @@ int proc_pid_statm(struct task_struct *task, char * buffer)
* + (index into the line)
*/
/* for systems with sizeof(void*) == 4: */
-#define MAPS_LINE_FORMAT4 "%08lx-%08lx %s %08lx %s %lu"
+#define MAPS_LINE_FORMAT4 "%08lx-%08lx %s %08lx %02x:%02x %lu"
#define MAPS_LINE_MAX4 49 /* sum of 8 1 8 1 4 1 8 1 5 1 10 1 */
/* for systems with sizeof(void*) == 8: */
-#define MAPS_LINE_FORMAT8 "%016lx-%016lx %s %016lx %s %lu"
+#define MAPS_LINE_FORMAT8 "%016lx-%016lx %s %016lx %02x:%02x %lu"
#define MAPS_LINE_MAX8 73 /* sum of 16 1 16 1 4 1 16 1 5 1 10 1 */
#define MAPS_LINE_FORMAT (sizeof(void*) == 4 ? MAPS_LINE_FORMAT4 : MAPS_LINE_FORMAT8)
@@ -555,7 +555,7 @@ static int proc_pid_maps_get_line (char *buf, struct vm_area_struct *map)
char *line;
char str[5];
int flags;
- kdev_t dev;
+ dev_t dev;
unsigned long ino;
int len;
@@ -567,7 +567,7 @@ static int proc_pid_maps_get_line (char *buf, struct vm_area_struct *map)
str[3] = flags & VM_MAYSHARE ? 's' : 'p';
str[4] = 0;
- dev = NODEV;
+ dev = 0;
ino = 0;
if (map->vm_file != NULL) {
dev = map->vm_file->f_dentry->d_inode->i_dev;
@@ -585,7 +585,7 @@ static int proc_pid_maps_get_line (char *buf, struct vm_area_struct *map)
len = sprintf(line,
MAPS_LINE_FORMAT,
map->vm_start, map->vm_end, str, map->vm_pgoff << PAGE_SHIFT,
- kdevname(dev), ino);
+ MAJOR(dev), MINOR(dev), ino);
if(map->vm_file) {
int i;
diff --git a/fs/smbfs/inode.c b/fs/smbfs/inode.c
index c0b5997f0b7d..0d439b0b1508 100644
--- a/fs/smbfs/inode.c
+++ b/fs/smbfs/inode.c
@@ -145,7 +145,6 @@ smb_get_inode_attr(struct inode *inode, struct smb_fattr *fattr)
fattr->f_ino = inode->i_ino;
fattr->f_uid = inode->i_uid;
fattr->f_gid = inode->i_gid;
- fattr->f_rdev = inode->i_rdev;
fattr->f_size = inode->i_size;
fattr->f_mtime = inode->i_mtime;
fattr->f_ctime = inode->i_ctime;
@@ -183,7 +182,6 @@ smb_set_inode_attr(struct inode *inode, struct smb_fattr *fattr)
inode->i_nlink = fattr->f_nlink;
inode->i_uid = fattr->f_uid;
inode->i_gid = fattr->f_gid;
- inode->i_rdev = fattr->f_rdev;
inode->i_ctime = fattr->f_ctime;
inode->i_blksize= fattr->f_blksize;
inode->i_blocks = fattr->f_blocks;
diff --git a/fs/stat.c b/fs/stat.c
index 3f87e0e823ec..bce88512b2b5 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -17,7 +17,7 @@
void generic_fillattr(struct inode *inode, struct kstat *stat)
{
- stat->dev = kdev_t_to_nr(inode->i_dev);
+ stat->dev = inode->i_dev;
stat->ino = inode->i_ino;
stat->mode = inode->i_mode;
stat->nlink = inode->i_nlink;
diff --git a/include/linux/bio.h b/include/linux/bio.h
index ffc38fca9c1e..1b4004652cde 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -203,8 +203,6 @@ extern struct bio *bio_copy(struct bio *, int, int);
extern inline void bio_init(struct bio *);
-extern int bio_ioctl(kdev_t, unsigned int, unsigned long);
-
#ifdef CONFIG_HIGHMEM
/*
* remember to add offset! and never ever reenable interrupts between a
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h
index a94644322d86..f22fdecee5a9 100644
--- a/include/linux/buffer_head.h
+++ b/include/linux/buffer_head.h
@@ -121,7 +121,6 @@ BUFFER_FNS(Boundary, boundary)
#define page_has_buffers(page) PagePrivate(page)
#define invalidate_buffers(dev) __invalidate_buffers((dev), 0)
-#define destroy_buffers(dev) __invalidate_buffers((dev), 1)
/*
@@ -156,7 +155,6 @@ int sync_blockdev(struct block_device *bdev);
void __wait_on_buffer(struct buffer_head *);
void sleep_on_buffer(struct buffer_head *bh);
void wake_up_buffer(struct buffer_head *bh);
-int fsync_dev(kdev_t);
int fsync_bdev(struct block_device *);
int fsync_super(struct super_block *);
int fsync_no_super(struct block_device *);
diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h
index 296ffe2cdfd4..19a318fe8ce6 100644
--- a/include/linux/cdrom.h
+++ b/include/linux/cdrom.h
@@ -807,11 +807,8 @@ typedef struct {
long error;
} tracktype;
-extern void cdrom_count_tracks(struct cdrom_device_info *cdi,tracktype* tracks);
-extern int cdrom_get_next_writable(kdev_t dev, long *next_writable);
-extern int cdrom_get_last_written(kdev_t dev, long *last_written);
+extern int cdrom_get_last_written(struct cdrom_device_info *cdi, long *last_written);
extern int cdrom_number_of_slots(struct cdrom_device_info *cdi);
-extern int cdrom_select_disc(struct cdrom_device_info *cdi, int slot);
extern int cdrom_mode_select(struct cdrom_device_info *cdi,
struct cdrom_generic_command *cgc);
extern int cdrom_mode_sense(struct cdrom_device_info *cdi,
@@ -819,7 +816,6 @@ extern int cdrom_mode_sense(struct cdrom_device_info *cdi,
int page_code, int page_control);
extern void init_cdrom_command(struct cdrom_generic_command *cgc,
void *buffer, int len, int type);
-extern struct cdrom_device_info *cdrom_find_device(kdev_t dev);
typedef struct {
__u16 disc_information_length;
@@ -903,10 +899,6 @@ typedef struct {
__u32 last_rec_address;
} track_information;
-extern int cdrom_get_disc_info(kdev_t dev, disc_information *di);
-extern int cdrom_get_track_info(kdev_t dev, __u16 track, __u8 type,
- track_information *ti);
-
/* The SCSI spec says there could be 256 slots. */
#define CDROM_MAX_SLOTS 256
diff --git a/include/linux/devpts_fs.h b/include/linux/devpts_fs.h
index 38164e6b2bbf..4def3512b355 100644
--- a/include/linux/devpts_fs.h
+++ b/include/linux/devpts_fs.h
@@ -10,64 +10,23 @@
*
* ------------------------------------------------------------------------- */
-/*
- * Prototypes for the pty driver <-> devpts filesystem interface. Most
- * of this is really just a hack so we can exclude it or build it as a
- * module, and probably should go away eventually.
- */
-
#ifndef _LINUX_DEVPTS_FS_H
#define _LINUX_DEVPTS_FS_H 1
-#include <linux/config.h>
-#include <linux/kdev_t.h>
-#include <linux/tty.h>
-
#ifdef CONFIG_DEVPTS_FS
-void devpts_pty_new(int, kdev_t);
-void devpts_pty_kill(int);
-#define unix98_max_ptys NR_PTYS * UNIX98_NR_MAJORS;
-
-#elif defined(CONFIG_DEVPTS_FS_MODULE)
+void devpts_pty_new(int, dev_t); /* mknod in devpts */
+void devpts_pty_kill(int); /* unlink */
-#ifdef BUILDING_PTY_C
-void (*devpts_upcall_new)(int,kdev_t) = NULL;
-void (*devpts_upcall_kill)(int) = NULL;
-unsigned int unix98_max_ptys = NR_PTYS * UNIX98_NR_MAJORS;
-
-EXPORT_SYMBOL(devpts_upcall_new);
-EXPORT_SYMBOL(devpts_upcall_kill);
-EXPORT_SYMBOL(unix98_max_ptys);
#else
-extern void (*devpts_upcall_new)(int,kdev_t);
-extern void (*devpts_upcall_kill)(int);
-extern unsigned int unix98_max_ptys;
-#endif
-#ifndef BUILDING_DEVPTS
-static inline void
-devpts_pty_new(int line, kdev_t device)
+static inline void devpts_pty_new(int line, dev_t device)
{
- if ( devpts_upcall_new )
- return devpts_upcall_new(line,device);
}
-static inline void
-devpts_pty_kill(int line)
+static inline void devpts_pty_kill(int line)
{
- if ( devpts_upcall_kill )
- return devpts_upcall_kill(line);
}
-#endif
-
-#else /* No /dev/pts filesystem at all */
-
-static inline void
-devpts_pty_new(int line, kdev_t device) { }
-
-static inline void
-devpts_pty_kill(int line) { }
#endif
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 002e02289155..db86a9686640 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -359,7 +359,7 @@ struct inode {
struct list_head i_dentry;
unsigned long i_ino;
atomic_t i_count;
- kdev_t i_dev;
+ dev_t i_dev;
umode_t i_mode;
nlink_t i_nlink;
uid_t i_uid;
@@ -1223,7 +1223,6 @@ extern void ll_rw_block(int, int, struct buffer_head * bh[]);
extern int submit_bh(int, struct buffer_head *);
struct bio;
extern int submit_bio(int, struct bio *);
-extern int is_read_only(kdev_t);
extern int bdev_read_only(struct block_device *);
extern int set_blocksize(struct block_device *, int);
extern int sb_set_blocksize(struct super_block *, int);
diff --git a/include/linux/kdev_t.h b/include/linux/kdev_t.h
index 2c61fc5161b6..1721915141c7 100644
--- a/include/linux/kdev_t.h
+++ b/include/linux/kdev_t.h
@@ -36,8 +36,7 @@ typedef struct { unsigned short major, minor; } kdev_t;
Admissible operations on an object of type kdev_t:
- passing it along
- comparing it for equality with another such object
-- storing it in inode->i_dev, inode->i_rdev, req->rq_dev, de->dc_dev,
-- tty->device
+- storing it in inode->i_rdev, req->rq_dev, de->dc_dev, tty->device
- using its bit pattern as argument in a hash function
- finding its major and minor
- complaining about it
diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h
index ab7b149a3f84..9de10bf92e32 100644
--- a/include/linux/nfsd/export.h
+++ b/include/linux/nfsd/export.h
@@ -70,7 +70,7 @@ struct svc_export {
int ex_flags;
struct vfsmount * ex_mnt;
struct dentry * ex_dentry;
- kdev_t ex_dev;
+ dev_t ex_dev;
ino_t ex_ino;
uid_t ex_anon_uid;
gid_t ex_anon_gid;
@@ -94,7 +94,7 @@ void exp_readlock(void);
void exp_readunlock(void);
struct svc_client * exp_getclient(struct sockaddr_in *sin);
void exp_putclient(struct svc_client *clp);
-struct svc_export * exp_get(struct svc_client *clp, kdev_t dev, ino_t ino);
+struct svc_export * exp_get(struct svc_client *clp, dev_t dev, ino_t ino);
struct svc_export * exp_get_fsid(struct svc_client *clp, int fsid);
struct svc_export * exp_get_by_name(struct svc_client *clp,
struct vfsmount *mnt,
diff --git a/include/linux/nfsd/nfsfh.h b/include/linux/nfsd/nfsfh.h
index 84c72958f99b..53f55cc17a50 100644
--- a/include/linux/nfsd/nfsfh.h
+++ b/include/linux/nfsd/nfsfh.h
@@ -143,13 +143,13 @@ static inline __u32 kdev_t_to_u32(kdev_t dev)
return udev;
}
-static inline kdev_t u32_to_kdev_t(__u32 udev)
+static inline dev_t u32_to_dev_t(__u32 udev)
{
unsigned int minor, major;
minor = (udev & 0xff) | ((udev >> 8) & 0xfff00);
major = ((udev >> 8) & 0xff) | ((udev >> 20) & 0xf00);
- return mk_kdev(major, minor);
+ return MKDEV(major, minor);
}
static inline __u32 ino_t_to_u32(ino_t ino)
diff --git a/include/linux/raid/linear.h b/include/linux/raid/linear.h
index 56e7c06e1086..dfb588a60ea6 100644
--- a/include/linux/raid/linear.h
+++ b/include/linux/raid/linear.h
@@ -4,7 +4,6 @@
#include <linux/raid/md.h>
struct dev_info {
- kdev_t dev;
struct block_device *bdev;
unsigned long size;
unsigned long offset;
diff --git a/include/linux/raid/md.h b/include/linux/raid/md.h
index 19ebeb0a4988..280092c6e95b 100644
--- a/include/linux/raid/md.h
+++ b/include/linux/raid/md.h
@@ -66,7 +66,7 @@ extern struct hd_struct md_hd_struct[MAX_MD_DEVS];
extern char * partition_name (kdev_t dev);
extern inline char * bdev_partition_name (struct block_device *bdev)
{
- return partition_name(to_kdev_t(bdev->bd_dev));
+ return partition_name(bdev ? to_kdev_t(bdev->bd_dev) : NODEV);
}
extern int register_md_personality (int p_num, mdk_personality_t *p);
extern int unregister_md_personality (int p_num);
@@ -77,7 +77,7 @@ extern void md_wakeup_thread(mdk_thread_t *thread);
extern void md_interrupt_thread (mdk_thread_t *thread);
extern void md_update_sb (mddev_t *mddev);
extern void md_done_sync(mddev_t *mddev, int blocks, int ok);
-extern void md_sync_acct(kdev_t dev, unsigned long nr_sectors);
+extern void md_sync_acct(struct block_device *bdev, unsigned long nr_sectors);
extern int md_error (mddev_t *mddev, struct block_device *bdev);
extern int md_run_setup(void);
diff --git a/include/linux/raid/md_k.h b/include/linux/raid/md_k.h
index e238bd222ea2..7b02c3c82a33 100644
--- a/include/linux/raid/md_k.h
+++ b/include/linux/raid/md_k.h
@@ -160,16 +160,6 @@ struct mdk_rdev_s
int desc_nr; /* descriptor index in the superblock */
};
-
-/*
- * disk operations in a working array:
- */
-#define DISKOP_SPARE_INACTIVE 0
-#define DISKOP_SPARE_WRITE 1
-#define DISKOP_SPARE_ACTIVE 2
-#define DISKOP_HOT_REMOVE_DISK 3
-#define DISKOP_HOT_ADD_DISK 4
-
typedef struct mdk_personality_s mdk_personality_t;
struct mddev_s
@@ -213,19 +203,12 @@ struct mdk_personality_s
int (*run)(mddev_t *mddev);
int (*stop)(mddev_t *mddev);
int (*status)(char *page, mddev_t *mddev);
- int (*error_handler)(mddev_t *mddev, kdev_t dev);
-
-/*
- * Some personalities (RAID-1, RAID-5) can have disks hot-added and
- * hot-removed. Hot removal is different from failure. (failure marks
- * a disk inactive, but the disk is still part of the array) The interface
- * to such operations is the 'pers->diskop()' function, can be NULL.
- *
- * the diskop function can change the pointer pointing to the incoming
- * descriptor, but must do so very carefully. (currently only
- * SPARE_ACTIVE expects such a change)
- */
- int (*diskop) (mddev_t *mddev, mdp_disk_t **descriptor, int state);
+ int (*error_handler)(mddev_t *mddev, struct block_device *bdev);
+ int (*hot_add_disk) (mddev_t *mddev, mdp_disk_t *descriptor, mdk_rdev_t *rdev);
+ int (*hot_remove_disk) (mddev_t *mddev, int number);
+ int (*spare_write) (mddev_t *mddev, int number);
+ int (*spare_inactive) (mddev_t *mddev);
+ int (*spare_active) (mddev_t *mddev, mdp_disk_t **descriptor);
int (*sync_request)(mddev_t *mddev, sector_t sector_nr, int go_faster);
};
diff --git a/include/linux/raid/multipath.h b/include/linux/raid/multipath.h
index 9c9cdc77fa05..e4f3e6189b7b 100644
--- a/include/linux/raid/multipath.h
+++ b/include/linux/raid/multipath.h
@@ -6,7 +6,6 @@
struct multipath_info {
int number;
int raid_disk;
- kdev_t dev;
struct block_device *bdev;
/*
diff --git a/include/linux/raid/raid1.h b/include/linux/raid/raid1.h
index f9f02ab19bd3..f63d68e55c11 100644
--- a/include/linux/raid/raid1.h
+++ b/include/linux/raid/raid1.h
@@ -8,7 +8,6 @@ typedef struct mirror_info mirror_info_t;
struct mirror_info {
int number;
int raid_disk;
- kdev_t dev;
struct block_device *bdev;
sector_t head_position;
atomic_t nr_pending;
diff --git a/include/linux/raid/raid5.h b/include/linux/raid/raid5.h
index e14864259ffd..7f8beb8acdaa 100644
--- a/include/linux/raid/raid5.h
+++ b/include/linux/raid/raid5.h
@@ -192,7 +192,6 @@ struct stripe_head {
struct disk_info {
- kdev_t dev;
struct block_device *bdev;
int operational;
int number;
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h
index 29f6063b3546..d8b3fa0a7ba0 100644
--- a/include/linux/reiserfs_fs.h
+++ b/include/linux/reiserfs_fs.h
@@ -1675,13 +1675,10 @@ int pop_journal_writer(int windex) ;
int journal_transaction_should_end(struct reiserfs_transaction_handle *, int) ;
int reiserfs_in_journal(struct super_block *p_s_sb, unsigned long bl, int searchall, unsigned long *next) ;
int journal_begin(struct reiserfs_transaction_handle *, struct super_block *p_s_sb, unsigned long) ;
-struct super_block *reiserfs_get_super(kdev_t dev) ;
void flush_async_commits(struct super_block *p_s_sb) ;
int buffer_journaled(const struct buffer_head *bh) ;
int mark_buffer_journal_new(struct buffer_head *bh) ;
-int reiserfs_sync_all_buffers(kdev_t dev, int wait) ;
-int reiserfs_sync_buffers(kdev_t dev, int wait) ;
int reiserfs_add_page_to_flush_list(struct reiserfs_transaction_handle *,
struct inode *, struct buffer_head *) ;
int reiserfs_remove_page_from_flush_list(struct reiserfs_transaction_handle *,
diff --git a/include/linux/reiserfs_fs_sb.h b/include/linux/reiserfs_fs_sb.h
index 04ec2e907f90..534d8e20bdb7 100644
--- a/include/linux/reiserfs_fs_sb.h
+++ b/include/linux/reiserfs_fs_sb.h
@@ -160,7 +160,7 @@ struct reiserfs_transaction_handle {
int t_blocks_allocated ; /* number of blocks this writer allocated */
unsigned long t_trans_id ; /* sanity check, equals the current trans id */
struct super_block *t_super ; /* super for this FS when journal_begin was
- called. saves calls to reiserfs_get_super */
+ called. */
} ;
/*
diff --git a/include/linux/smb.h b/include/linux/smb.h
index a9d88d856df5..5b8dce292377 100644
--- a/include/linux/smb.h
+++ b/include/linux/smb.h
@@ -10,7 +10,6 @@
#define _LINUX_SMB_H
#include <linux/types.h>
-#include <linux/kdev_t.h>
enum smb_protocol {
SMB_PROTOCOL_NONE,
@@ -85,7 +84,6 @@ struct smb_fattr {
nlink_t f_nlink;
uid_t f_uid;
gid_t f_gid;
- kdev_t f_rdev;
loff_t f_size;
time_t f_atime;
time_t f_mtime;
diff --git a/kernel/ksyms.c b/kernel/ksyms.c
index 5b95da9d8a9a..f18263655052 100644
--- a/kernel/ksyms.c
+++ b/kernel/ksyms.c
@@ -185,7 +185,6 @@ EXPORT_SYMBOL(invalidate_inodes);
EXPORT_SYMBOL(invalidate_device);
EXPORT_SYMBOL(invalidate_inode_pages);
EXPORT_SYMBOL(truncate_inode_pages);
-EXPORT_SYMBOL(fsync_dev);
EXPORT_SYMBOL(fsync_bdev);
EXPORT_SYMBOL(permission);
EXPORT_SYMBOL(vfs_permission);
@@ -327,7 +326,6 @@ EXPORT_SYMBOL(tty_std_termios);
/* block device driver support */
EXPORT_SYMBOL(blk_size);
EXPORT_SYMBOL(blk_dev);
-EXPORT_SYMBOL(is_read_only);
EXPORT_SYMBOL(bdev_read_only);
EXPORT_SYMBOL(set_device_ro);
EXPORT_SYMBOL(bmap);
diff --git a/net/socket.c b/net/socket.c
index bed470afb5ed..798eeab2f47c 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -465,7 +465,7 @@ struct socket *sock_alloc(void)
if (!inode)
return NULL;
- inode->i_dev = NODEV;
+ inode->i_dev = 0;
sock = SOCKET_I(inode);
inode->i_mode = S_IFSOCK|S_IRWXUGO;