Commit 828289f7 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge kroah.com:/home/greg/linux/BK/bleed-2.5

into kroah.com:/home/greg/linux/BK/gregkh-2.5
parents d0f1e643 5c88d5d3
...@@ -4,10 +4,10 @@ JFS Homepage: http://oss.software.ibm.com/jfs/ ...@@ -4,10 +4,10 @@ JFS Homepage: http://oss.software.ibm.com/jfs/
Team members Team members
------------ ------------
Steve Best sbest@us.ibm.com
Dave Kleikamp shaggy@austin.ibm.com Dave Kleikamp shaggy@austin.ibm.com
Dave Blaschke blaschke@us.ibm.com
Steve Best sbest@us.ibm.com
Barry Arndt barndt@us.ibm.com Barry Arndt barndt@us.ibm.com
Christoph Hellwig hch@infradead.org
The following mount options are supported: The following mount options are supported:
......
...@@ -207,11 +207,8 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, ...@@ -207,11 +207,8 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd,
set_device_ro(bdev, n); set_device_ro(bdev, n);
return 0; return 0;
default: default:
if (disk->fops->ioctl) { if (disk->fops->ioctl)
ret = disk->fops->ioctl(inode, file, cmd, arg); return disk->fops->ioctl(inode, file, cmd, arg);
if (ret != -EINVAL)
return ret;
}
} }
return -ENOTTY; return -ENOTTY;
} }
...@@ -553,7 +553,7 @@ int blk_queue_resize_tags(request_queue_t *q, int new_depth) ...@@ -553,7 +553,7 @@ int blk_queue_resize_tags(request_queue_t *q, int new_depth)
memcpy(bqt->tag_index, tag_index, max_depth * sizeof(struct request *)); memcpy(bqt->tag_index, tag_index, max_depth * sizeof(struct request *));
bits = max_depth / BLK_TAGS_PER_LONG; bits = max_depth / BLK_TAGS_PER_LONG;
memcpy(bqt->tag_map, bqt->tag_map, bits * sizeof(unsigned long)); memcpy(bqt->tag_map, tag_map, bits * sizeof(unsigned long));
kfree(tag_index); kfree(tag_index);
kfree(tag_map); kfree(tag_map);
......
...@@ -68,7 +68,6 @@ static int blk_do_rq(request_queue_t *q, struct block_device *bdev, ...@@ -68,7 +68,6 @@ static int blk_do_rq(request_queue_t *q, struct block_device *bdev,
rq->flags |= REQ_NOMERGE; rq->flags |= REQ_NOMERGE;
rq->waiting = &wait; rq->waiting = &wait;
drive_stat_acct(rq, rq->nr_sectors, 1);
elv_add_request(q, rq, 1, 1); elv_add_request(q, rq, 1, 1);
generic_unplug_device(q); generic_unplug_device(q);
wait_for_completion(&wait); wait_for_completion(&wait);
...@@ -99,7 +98,7 @@ static int scsi_get_bus(request_queue_t *q, int *p) ...@@ -99,7 +98,7 @@ static int scsi_get_bus(request_queue_t *q, int *p)
static int sg_get_timeout(request_queue_t *q) static int sg_get_timeout(request_queue_t *q)
{ {
return q->sg_timeout; return q->sg_timeout / (HZ / USER_HZ);
} }
static int sg_set_timeout(request_queue_t *q, int *p) static int sg_set_timeout(request_queue_t *q, int *p)
...@@ -107,7 +106,7 @@ static int sg_set_timeout(request_queue_t *q, int *p) ...@@ -107,7 +106,7 @@ static int sg_set_timeout(request_queue_t *q, int *p)
int timeout, err = get_user(timeout, p); int timeout, err = get_user(timeout, p);
if (!err) if (!err)
q->sg_timeout = timeout; q->sg_timeout = timeout * (HZ / USER_HZ);
return err; return err;
} }
...@@ -121,10 +120,14 @@ static int sg_set_reserved_size(request_queue_t *q, int *p) ...@@ -121,10 +120,14 @@ static int sg_set_reserved_size(request_queue_t *q, int *p)
{ {
int size, err = get_user(size, p); int size, err = get_user(size, p);
if (!err) if (err)
q->sg_reserved_size = size;
return err; return err;
if (size > (q->max_sectors << 9))
return -EINVAL;
q->sg_reserved_size = size;
return 0;
} }
/* /*
...@@ -139,16 +142,14 @@ static int sg_emulated_host(request_queue_t *q, int *p) ...@@ -139,16 +142,14 @@ static int sg_emulated_host(request_queue_t *q, int *p)
static int sg_io(request_queue_t *q, struct block_device *bdev, static int sg_io(request_queue_t *q, struct block_device *bdev,
struct sg_io_hdr *uptr) struct sg_io_hdr *uptr)
{ {
unsigned long uaddr, start_time; unsigned long start_time;
int reading, writing, nr_sectors; int reading, writing;
struct sg_io_hdr hdr; struct sg_io_hdr hdr;
struct request *rq; struct request *rq;
struct bio *bio; struct bio *bio;
char sense[SCSI_SENSE_BUFFERSIZE]; char sense[SCSI_SENSE_BUFFERSIZE];
void *buffer; void *buffer;
if (!access_ok(VERIFY_WRITE, uptr, sizeof(*uptr)))
return -EFAULT;
if (copy_from_user(&hdr, uptr, sizeof(*uptr))) if (copy_from_user(&hdr, uptr, sizeof(*uptr)))
return -EFAULT; return -EFAULT;
...@@ -156,11 +157,6 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -156,11 +157,6 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
return -EINVAL; return -EINVAL;
if (hdr.cmd_len > sizeof(rq->cmd)) if (hdr.cmd_len > sizeof(rq->cmd))
return -EINVAL; return -EINVAL;
if (!access_ok(VERIFY_READ, hdr.cmdp, hdr.cmd_len))
return -EFAULT;
if (hdr.dxfer_len > 65536)
return -EINVAL;
/* /*
* we'll do that later * we'll do that later
...@@ -168,7 +164,9 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -168,7 +164,9 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
if (hdr.iovec_count) if (hdr.iovec_count)
return -EOPNOTSUPP; return -EOPNOTSUPP;
nr_sectors = 0; if (hdr.dxfer_len > (q->max_sectors << 9))
return -EIO;
reading = writing = 0; reading = writing = 0;
buffer = NULL; buffer = NULL;
bio = NULL; bio = NULL;
...@@ -189,19 +187,12 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -189,19 +187,12 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
break; break;
} }
uaddr = (unsigned long) hdr.dxferp;
/* writing to device -> reading from vm */
if (writing && !access_ok(VERIFY_READ, uaddr, bytes))
return -EFAULT;
/* reading from device -> writing to vm */
else if (reading && !access_ok(VERIFY_WRITE, uaddr, bytes))
return -EFAULT;
/* /*
* first try to map it into a bio. reading from device will * first try to map it into a bio. reading from device will
* be a write to vm. * be a write to vm.
*/ */
bio = bio_map_user(bdev, uaddr, hdr.dxfer_len, reading); bio = bio_map_user(bdev, (unsigned long) hdr.dxferp,
hdr.dxfer_len, reading);
/* /*
* if bio setup failed, fall back to slow approach * if bio setup failed, fall back to slow approach
...@@ -211,10 +202,11 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -211,10 +202,11 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
if (!buffer) if (!buffer)
return -ENOMEM; return -ENOMEM;
nr_sectors = bytes >> 9; if (writing) {
if (writing) if (copy_from_user(buffer, hdr.dxferp,
copy_from_user(buffer,hdr.dxferp,hdr.dxfer_len); hdr.dxfer_len))
else goto out_buffer;
} else
memset(buffer, 0, hdr.dxfer_len); memset(buffer, 0, hdr.dxfer_len);
} }
} }
...@@ -225,7 +217,8 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -225,7 +217,8 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
* fill in request structure * fill in request structure
*/ */
rq->cmd_len = hdr.cmd_len; rq->cmd_len = hdr.cmd_len;
copy_from_user(rq->cmd, hdr.cmdp, hdr.cmd_len); if (copy_from_user(rq->cmd, hdr.cmdp, hdr.cmd_len))
goto out_request;
if (sizeof(rq->cmd) != hdr.cmd_len) if (sizeof(rq->cmd) != hdr.cmd_len)
memset(rq->cmd + hdr.cmd_len, 0, sizeof(rq->cmd) - hdr.cmd_len); memset(rq->cmd + hdr.cmd_len, 0, sizeof(rq->cmd) - hdr.cmd_len);
...@@ -235,18 +228,15 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -235,18 +228,15 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
rq->flags |= REQ_BLOCK_PC; rq->flags |= REQ_BLOCK_PC;
rq->hard_nr_sectors = rq->nr_sectors = nr_sectors; rq->bio = rq->biotail = NULL;
rq->hard_cur_sectors = rq->current_nr_sectors = nr_sectors;
rq->bio = rq->biotail = bio;
if (bio) if (bio)
blk_rq_bio_prep(q, rq, bio); blk_rq_bio_prep(q, rq, bio);
rq->data_len = hdr.dxfer_len;
rq->data = buffer; rq->data = buffer;
rq->data_len = hdr.dxfer_len;
rq->timeout = hdr.timeout; rq->timeout = (hdr.timeout * HZ) / 1000;
if (!rq->timeout) if (!rq->timeout)
rq->timeout = q->sg_timeout; rq->timeout = q->sg_timeout;
if (!rq->timeout) if (!rq->timeout)
...@@ -273,12 +263,11 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -273,12 +263,11 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
if (hdr.masked_status || hdr.host_status || hdr.driver_status) if (hdr.masked_status || hdr.host_status || hdr.driver_status)
hdr.info |= SG_INFO_CHECK; hdr.info |= SG_INFO_CHECK;
hdr.resid = rq->data_len; hdr.resid = rq->data_len;
hdr.duration = (jiffies - start_time) * (1000 / HZ); hdr.duration = ((jiffies - start_time) * 1000) / HZ;
hdr.sb_len_wr = 0; hdr.sb_len_wr = 0;
if (rq->sense_len && hdr.sbp) { if (rq->sense_len && hdr.sbp) {
int len = (hdr.mx_sb_len < rq->sense_len) ? int len = min((unsigned int) hdr.mx_sb_len, rq->sense_len);
hdr.mx_sb_len : rq->sense_len;
if (!copy_to_user(hdr.sbp, rq->sense, len)) if (!copy_to_user(hdr.sbp, rq->sense, len))
hdr.sb_len_wr = len; hdr.sb_len_wr = len;
...@@ -286,17 +275,25 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -286,17 +275,25 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
blk_put_request(rq); blk_put_request(rq);
copy_to_user(uptr, &hdr, sizeof(*uptr)); if (copy_to_user(uptr, &hdr, sizeof(*uptr)))
goto out_buffer;
if (buffer) { if (buffer) {
if (reading) if (reading)
copy_to_user(hdr.dxferp, buffer, hdr.dxfer_len); if (copy_to_user(hdr.dxferp, buffer, hdr.dxfer_len))
goto out_buffer;
kfree(buffer); kfree(buffer);
} }
/* may not have succeeded, but output values written to control /* may not have succeeded, but output values written to control
* structure (struct sg_io_hdr). */ * structure (struct sg_io_hdr). */
return 0; return 0;
out_request:
blk_put_request(rq);
out_buffer:
kfree(buffer);
return -EFAULT;
} }
#define FORMAT_UNIT_TIMEOUT (2 * 60 * 60 * HZ) #define FORMAT_UNIT_TIMEOUT (2 * 60 * 60 * HZ)
......
...@@ -666,8 +666,10 @@ static void cdrom_end_request (ide_drive_t *drive, int uptodate) ...@@ -666,8 +666,10 @@ static void cdrom_end_request (ide_drive_t *drive, int uptodate)
struct cdrom_info *info = drive->driver_data; struct cdrom_info *info = drive->driver_data;
void *sense = &info->sense_data; void *sense = &info->sense_data;
if (failed && failed->sense) if (failed && failed->sense) {
sense = failed->sense; sense = failed->sense;
failed->sense_len = rq->sense_len;
}
cdrom_analyze_sense_data(drive, failed, sense); cdrom_analyze_sense_data(drive, failed, sense);
} }
...@@ -723,7 +725,7 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret) ...@@ -723,7 +725,7 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
* scsi status byte * scsi status byte
*/ */
if ((rq->flags & REQ_BLOCK_PC) && !rq->errors) if ((rq->flags & REQ_BLOCK_PC) && !rq->errors)
rq->errors = CHECK_CONDITION; rq->errors = SAM_STAT_CHECK_CONDITION;
/* Check for tray open. */ /* Check for tray open. */
if (sense_key == NOT_READY) { if (sense_key == NOT_READY) {
...@@ -1471,8 +1473,9 @@ static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive) ...@@ -1471,8 +1473,9 @@ static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive)
/* Keep count of how much data we've moved. */ /* Keep count of how much data we've moved. */
rq->data += thislen; rq->data += thislen;
rq->data_len -= thislen; rq->data_len -= thislen;
if (rq->cmd[0] == GPCMD_REQUEST_SENSE)
rq->sense_len++; if (rq->flags & REQ_SENSE)
rq->sense_len += thislen;
} else { } else {
confused: confused:
printk ("%s: cdrom_pc_intr: The drive " printk ("%s: cdrom_pc_intr: The drive "
...@@ -1609,12 +1612,20 @@ static inline int cdrom_write_check_ireason(ide_drive_t *drive, int len, int ire ...@@ -1609,12 +1612,20 @@ static inline int cdrom_write_check_ireason(ide_drive_t *drive, int len, int ire
static void post_transform_command(struct request *req) static void post_transform_command(struct request *req)
{ {
char *ibuf = req->buffer;
u8 *c = req->cmd; u8 *c = req->cmd;
char *ibuf;
if (!blk_pc_request(req)) if (!blk_pc_request(req))
return; return;
if (req->bio)
ibuf = bio_data(req->bio);
else
ibuf = req->data;
if (!ibuf)
return;
/* /*
* set ansi-revision and response data as atapi * set ansi-revision and response data as atapi
*/ */
......
...@@ -462,7 +462,6 @@ static int ide_open (struct inode * inode, struct file * filp) ...@@ -462,7 +462,6 @@ static int ide_open (struct inode * inode, struct file * filp)
return -ENXIO; return -ENXIO;
} }
static LIST_HEAD(ata_unused);
static spinlock_t drives_lock = SPIN_LOCK_UNLOCKED; static spinlock_t drives_lock = SPIN_LOCK_UNLOCKED;
static spinlock_t drivers_lock = SPIN_LOCK_UNLOCKED; static spinlock_t drivers_lock = SPIN_LOCK_UNLOCKED;
static LIST_HEAD(drivers); static LIST_HEAD(drivers);
...@@ -1437,9 +1436,6 @@ int ata_attach(ide_drive_t *drive) ...@@ -1437,9 +1436,6 @@ int ata_attach(ide_drive_t *drive)
spin_unlock(&drivers_lock); spin_unlock(&drivers_lock);
if(idedefault_driver.attach(drive) != 0) if(idedefault_driver.attach(drive) != 0)
panic("ide: default attach failed"); panic("ide: default attach failed");
spin_lock(&drives_lock);
list_add_tail(&drive->list, &ata_unused);
spin_unlock(&drives_lock);
return 1; return 1;
} }
...@@ -1737,7 +1733,6 @@ static int __initdata is_chipset_set[MAX_HWIFS]; ...@@ -1737,7 +1733,6 @@ static int __initdata is_chipset_set[MAX_HWIFS];
* "hdx=cyl,head,sect" : disk drive is present, with specified geometry * "hdx=cyl,head,sect" : disk drive is present, with specified geometry
* "hdx=remap63" : add 63 to all sector numbers (for OnTrack DM) * "hdx=remap63" : add 63 to all sector numbers (for OnTrack DM)
* "hdx=remap" : remap 0->1 (for EZDrive) * "hdx=remap" : remap 0->1 (for EZDrive)
* "hdx=noremap" : do not remap 0->1 even though EZD was detected
* "hdx=autotune" : driver will attempt to tune interface speed * "hdx=autotune" : driver will attempt to tune interface speed
* to the fastest PIO mode supported, * to the fastest PIO mode supported,
* if possible for this drive only. * if possible for this drive only.
...@@ -1859,8 +1854,8 @@ int __init ide_setup (char *s) ...@@ -1859,8 +1854,8 @@ int __init ide_setup (char *s)
const char *hd_words[] = { const char *hd_words[] = {
"none", "noprobe", "nowerr", "cdrom", "serialize", "none", "noprobe", "nowerr", "cdrom", "serialize",
"autotune", "noautotune", "slow", "swapdata", "bswap", "autotune", "noautotune", "slow", "swapdata", "bswap",
"flash", "remap", "noremap", "scsi", "biostimings", "flash", "remap", "remap63", "scsi", "biostimings",
"remap63", NULL }; NULL };
unit = s[2] - 'a'; unit = s[2] - 'a';
hw = unit / MAX_DRIVES; hw = unit / MAX_DRIVES;
unit = unit % MAX_DRIVES; unit = unit % MAX_DRIVES;
...@@ -1920,23 +1915,15 @@ int __init ide_setup (char *s) ...@@ -1920,23 +1915,15 @@ int __init ide_setup (char *s)
case -12: /* "remap" */ case -12: /* "remap" */
drive->remap_0_to_1 = 1; drive->remap_0_to_1 = 1;
goto done; goto done;
case -13: /* "noremap" */ case -13: /* "remap63" */
drive->remap_0_to_1 = 2; drive->sect0 = 63;
goto done; goto done;
case -14: /* "scsi" */ case -14: /* "scsi" */
#if defined(CONFIG_BLK_DEV_IDESCSI) && defined(CONFIG_SCSI)
drive->scsi = 1; drive->scsi = 1;
goto done; goto done;
#else
drive->scsi = 0;
goto bad_option;
#endif /* defined(CONFIG_BLK_DEV_IDESCSI) && defined(CONFIG_SCSI) */
case -15: /* "biostimings" */ case -15: /* "biostimings" */
drive->autotune = IDE_TUNE_BIOS; drive->autotune = IDE_TUNE_BIOS;
goto done; goto done;
case -16: /* "remap63" */
drive->sect0 = 63;
goto done;
case 3: /* cyl,head,sect */ case 3: /* cyl,head,sect */
drive->media = ide_disk; drive->media = ide_disk;
drive->cyl = drive->bios_cyl = vals[0]; drive->cyl = drive->bios_cyl = vals[0];
...@@ -2392,8 +2379,8 @@ int ide_unregister_subdriver (ide_drive_t *drive) ...@@ -2392,8 +2379,8 @@ int ide_unregister_subdriver (ide_drive_t *drive)
spin_unlock_irqrestore(&ide_lock, flags); spin_unlock_irqrestore(&ide_lock, flags);
spin_lock(&drives_lock); spin_lock(&drives_lock);
list_del_init(&drive->list); list_del_init(&drive->list);
list_add(&drive->list, &drive->driver->drives);
spin_unlock(&drives_lock); spin_unlock(&drives_lock);
/* drive will be added to &idedefault_driver->drives in ata_attach() */
return 0; return 0;
} }
...@@ -2416,9 +2403,9 @@ int ide_register_driver(ide_driver_t *driver) ...@@ -2416,9 +2403,9 @@ int ide_register_driver(ide_driver_t *driver)
list_add(&driver->drivers, &drivers); list_add(&driver->drivers, &drivers);
spin_unlock(&drivers_lock); spin_unlock(&drivers_lock);
spin_lock(&drives_lock);
INIT_LIST_HEAD(&list); INIT_LIST_HEAD(&list);
list_splice_init(&ata_unused, &list); spin_lock(&drives_lock);
list_splice_init(&idedefault_driver.drives, &list);
spin_unlock(&drives_lock); spin_unlock(&drives_lock);
list_for_each_safe(list_loop, tmp_storage, &list) { list_for_each_safe(list_loop, tmp_storage, &list) {
......
...@@ -538,12 +538,6 @@ struct bio *bio_map_user(struct block_device *bdev, unsigned long uaddr, ...@@ -538,12 +538,6 @@ struct bio *bio_map_user(struct block_device *bdev, unsigned long uaddr,
bio = __bio_map_user(bdev, uaddr, len, write_to_vm); bio = __bio_map_user(bdev, uaddr, len, write_to_vm);
if (bio) { if (bio) {
if (bio->bi_size < len) {
bio_endio(bio, bio->bi_size, 0);
bio_unmap_user(bio, 0);
return NULL;
}
/* /*
* subtle -- if __bio_map_user() ended up bouncing a bio, * subtle -- if __bio_map_user() ended up bouncing a bio,
* it would normally disappear when its bi_end_io is run. * it would normally disappear when its bi_end_io is run.
...@@ -551,6 +545,12 @@ struct bio *bio_map_user(struct block_device *bdev, unsigned long uaddr, ...@@ -551,6 +545,12 @@ struct bio *bio_map_user(struct block_device *bdev, unsigned long uaddr,
* reference to it * reference to it
*/ */
bio_get(bio); bio_get(bio);
if (bio->bi_size < len) {
bio_endio(bio, bio->bi_size, 0);
bio_unmap_user(bio, 0);
return NULL;
}
} }
return bio; return bio;
......
/* /*
* Copyright (c) International Business Machines Corp., 2000-2002 * Copyright (c) International Business Machines Corp., 2000-2003
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
...@@ -348,7 +348,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize) ...@@ -348,7 +348,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize)
/* need to grow map file ? */ /* need to grow map file ? */
if (nPages == newNpages) if (nPages == newNpages)
goto updateImap; goto finalizeBmap;
/* /*
* grow bmap file for the new map pages required: * grow bmap file for the new map pages required:
...@@ -414,6 +414,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize) ...@@ -414,6 +414,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize)
if (XSize) if (XSize)
goto extendBmap; goto extendBmap;
finalizeBmap:
/* finalize bmap */ /* finalize bmap */
dbFinalizeBmap(ipbmap); dbFinalizeBmap(ipbmap);
...@@ -427,7 +428,6 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize) ...@@ -427,7 +428,6 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize)
* (computation of ag number from agstart based on agsize * (computation of ag number from agstart based on agsize
* will correctly identify the new ag); * will correctly identify the new ag);
*/ */
updateImap:
/* if new AG size the same as old AG size, done! */ /* if new AG size the same as old AG size, done! */
if (bmp->db_agsize != old_agsize) { if (bmp->db_agsize != old_agsize) {
if ((rc = diExtendFS(ipimap, ipbmap))) if ((rc = diExtendFS(ipimap, ipbmap)))
...@@ -485,8 +485,8 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize) ...@@ -485,8 +485,8 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize)
/* mark extendfs() completion */ /* mark extendfs() completion */
j_sb->s_state &= cpu_to_le32(~FM_EXTENDFS); j_sb->s_state &= cpu_to_le32(~FM_EXTENDFS);
j_sb->s_size = cpu_to_le64(bmp->db_mapsize) << j_sb->s_size = cpu_to_le64(bmp->db_mapsize <<
le16_to_cpu(j_sb->s_l2bfactor); le16_to_cpu(j_sb->s_l2bfactor));
j_sb->s_agsize = cpu_to_le32(bmp->db_agsize); j_sb->s_agsize = cpu_to_le32(bmp->db_agsize);
/* update inline log space descriptor */ /* update inline log space descriptor */
......
...@@ -105,10 +105,14 @@ static void jfs_destroy_inode(struct inode *inode) ...@@ -105,10 +105,14 @@ static void jfs_destroy_inode(struct inode *inode)
} }
#ifdef CONFIG_JFS_POSIX_ACL #ifdef CONFIG_JFS_POSIX_ACL
if (ji->i_acl && (ji->i_acl != JFS_ACL_NOT_CACHED)) if (ji->i_acl != JFS_ACL_NOT_CACHED) {
posix_acl_release(ji->i_acl); posix_acl_release(ji->i_acl);
if (ji->i_default_acl && (ji->i_default_acl != JFS_ACL_NOT_CACHED)) ji->i_acl = JFS_ACL_NOT_CACHED;
}
if (ji->i_default_acl != JFS_ACL_NOT_CACHED) {
posix_acl_release(ji->i_default_acl); posix_acl_release(ji->i_default_acl);
ji->i_default_acl = JFS_ACL_NOT_CACHED;
}
#endif #endif
kmem_cache_free(jfs_inode_cachep, ji); kmem_cache_free(jfs_inode_cachep, ji);
......
...@@ -720,7 +720,7 @@ typedef struct ide_drive_s { ...@@ -720,7 +720,7 @@ typedef struct ide_drive_s {
unsigned doorlocking : 1; /* for removable only: door lock/unlock works */ unsigned doorlocking : 1; /* for removable only: door lock/unlock works */
unsigned autotune : 3; /* 1=autotune, 2=noautotune, unsigned autotune : 3; /* 1=autotune, 2=noautotune,
3=biostimings, 0=default */ 3=biostimings, 0=default */
unsigned remap_0_to_1 : 2; /* 0=remap if ezdrive, 1=remap, 2=noremap */ unsigned remap_0_to_1 : 1; /* 0=noremap, 1=remap 0->1 (for EZDrive) */
unsigned ata_flash : 1; /* 1=present, 0=default */ unsigned ata_flash : 1; /* 1=present, 0=default */
unsigned blocked : 1; /* 1=powermanagment told us not to do anything, so sleep nicely */ unsigned blocked : 1; /* 1=powermanagment told us not to do anything, so sleep nicely */
unsigned vdma : 1; /* 1=doing PIO over DMA 0=doing normal DMA */ unsigned vdma : 1; /* 1=doing PIO over DMA 0=doing normal DMA */
......
...@@ -1718,10 +1718,9 @@ generic_file_aio_write_nolock(struct kiocb *iocb, const struct iovec *iov, ...@@ -1718,10 +1718,9 @@ generic_file_aio_write_nolock(struct kiocb *iocb, const struct iovec *iov,
copied = filemap_copy_from_user_iovec(page, offset, copied = filemap_copy_from_user_iovec(page, offset,
cur_iov, iov_base, bytes); cur_iov, iov_base, bytes);
flush_dcache_page(page); flush_dcache_page(page);
if (likely(copied > 0)) {
status = a_ops->commit_write(file, page, offset, status = a_ops->commit_write(file, page, offset,
offset + copied); offset + copied);
if (likely(copied > 0)) {
if (!status) if (!status)
status = copied; status = copied;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment