Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
ba5cd163
Commit
ba5cd163
authored
May 29, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://jfs.bkbits.net/linux-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
6d8870cc
de5926e2
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
71 additions
and
79 deletions
+71
-79
drivers/block/ioctl.c
drivers/block/ioctl.c
+2
-5
drivers/block/ll_rw_blk.c
drivers/block/ll_rw_blk.c
+1
-1
drivers/block/scsi_ioctl.c
drivers/block/scsi_ioctl.c
+38
-41
drivers/ide/ide-cd.c
drivers/ide/ide-cd.c
+16
-5
drivers/ide/ide.c
drivers/ide/ide.c
+7
-20
fs/bio.c
fs/bio.c
+6
-6
include/linux/ide.h
include/linux/ide.h
+1
-1
No files found.
drivers/block/ioctl.c
View file @
ba5cd163
...
...
@@ -207,11 +207,8 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd,
set_device_ro
(
bdev
,
n
);
return
0
;
default:
if
(
disk
->
fops
->
ioctl
)
{
ret
=
disk
->
fops
->
ioctl
(
inode
,
file
,
cmd
,
arg
);
if
(
ret
!=
-
EINVAL
)
return
ret
;
}
if
(
disk
->
fops
->
ioctl
)
return
disk
->
fops
->
ioctl
(
inode
,
file
,
cmd
,
arg
);
}
return
-
ENOTTY
;
}
drivers/block/ll_rw_blk.c
View file @
ba5cd163
...
...
@@ -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
*
));
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_map
);
...
...
drivers/block/scsi_ioctl.c
View file @
ba5cd163
...
...
@@ -68,7 +68,6 @@ static int blk_do_rq(request_queue_t *q, struct block_device *bdev,
rq
->
flags
|=
REQ_NOMERGE
;
rq
->
waiting
=
&
wait
;
drive_stat_acct
(
rq
,
rq
->
nr_sectors
,
1
);
elv_add_request
(
q
,
rq
,
1
,
1
);
generic_unplug_device
(
q
);
wait_for_completion
(
&
wait
);
...
...
@@ -99,7 +98,7 @@ static int scsi_get_bus(request_queue_t *q, int *p)
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
)
...
...
@@ -107,7 +106,7 @@ static int sg_set_timeout(request_queue_t *q, int *p)
int
timeout
,
err
=
get_user
(
timeout
,
p
);
if
(
!
err
)
q
->
sg_timeout
=
timeout
;
q
->
sg_timeout
=
timeout
*
(
HZ
/
USER_HZ
)
;
return
err
;
}
...
...
@@ -121,10 +120,14 @@ static int sg_set_reserved_size(request_queue_t *q, int *p)
{
int
size
,
err
=
get_user
(
size
,
p
);
if
(
!
err
)
q
->
sg_reserved_size
=
size
;
if
(
err
)
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)
static
int
sg_io
(
request_queue_t
*
q
,
struct
block_device
*
bdev
,
struct
sg_io_hdr
*
uptr
)
{
unsigned
long
uaddr
,
start_time
;
int
reading
,
writing
,
nr_sectors
;
unsigned
long
start_time
;
int
reading
,
writing
;
struct
sg_io_hdr
hdr
;
struct
request
*
rq
;
struct
bio
*
bio
;
char
sense
[
SCSI_SENSE_BUFFERSIZE
];
void
*
buffer
;
if
(
!
access_ok
(
VERIFY_WRITE
,
uptr
,
sizeof
(
*
uptr
)))
return
-
EFAULT
;
if
(
copy_from_user
(
&
hdr
,
uptr
,
sizeof
(
*
uptr
)))
return
-
EFAULT
;
...
...
@@ -156,11 +157,6 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
return
-
EINVAL
;
if
(
hdr
.
cmd_len
>
sizeof
(
rq
->
cmd
))
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
...
...
@@ -168,7 +164,9 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
if
(
hdr
.
iovec_count
)
return
-
EOPNOTSUPP
;
nr_sectors
=
0
;
if
(
hdr
.
dxfer_len
>
(
q
->
max_sectors
<<
9
))
return
-
EIO
;
reading
=
writing
=
0
;
buffer
=
NULL
;
bio
=
NULL
;
...
...
@@ -189,19 +187,12 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
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
* 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
...
...
@@ -211,10 +202,11 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
if
(
!
buffer
)
return
-
ENOMEM
;
nr_sectors
=
bytes
>>
9
;
if
(
writing
)
copy_from_user
(
buffer
,
hdr
.
dxferp
,
hdr
.
dxfer_len
);
else
if
(
writing
)
{
if
(
copy_from_user
(
buffer
,
hdr
.
dxferp
,
hdr
.
dxfer_len
))
goto
out_buffer
;
}
else
memset
(
buffer
,
0
,
hdr
.
dxfer_len
);
}
}
...
...
@@ -225,7 +217,8 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
* fill in request structure
*/
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
)
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,
rq
->
flags
|=
REQ_BLOCK_PC
;
rq
->
hard_nr_sectors
=
rq
->
nr_sectors
=
nr_sectors
;
rq
->
hard_cur_sectors
=
rq
->
current_nr_sectors
=
nr_sectors
;
rq
->
bio
=
rq
->
biotail
=
bio
;
rq
->
bio
=
rq
->
biotail
=
NULL
;
if
(
bio
)
blk_rq_bio_prep
(
q
,
rq
,
bio
);
rq
->
data_len
=
hdr
.
dxfer_len
;
rq
->
data
=
buffer
;
rq
->
data_len
=
hdr
.
dxfer_len
;
rq
->
timeout
=
hdr
.
timeout
;
rq
->
timeout
=
(
hdr
.
timeout
*
HZ
)
/
1000
;
if
(
!
rq
->
timeout
)
rq
->
timeout
=
q
->
sg_timeout
;
if
(
!
rq
->
timeout
)
...
...
@@ -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
)
hdr
.
info
|=
SG_INFO_CHECK
;
hdr
.
resid
=
rq
->
data_len
;
hdr
.
duration
=
(
jiffies
-
start_time
)
*
(
1000
/
HZ
)
;
hdr
.
duration
=
(
(
jiffies
-
start_time
)
*
1000
)
/
HZ
;
hdr
.
sb_len_wr
=
0
;
if
(
rq
->
sense_len
&&
hdr
.
sbp
)
{
int
len
=
(
hdr
.
mx_sb_len
<
rq
->
sense_len
)
?
hdr
.
mx_sb_len
:
rq
->
sense_len
;
int
len
=
min
((
unsigned
int
)
hdr
.
mx_sb_len
,
rq
->
sense_len
);
if
(
!
copy_to_user
(
hdr
.
sbp
,
rq
->
sense
,
len
))
hdr
.
sb_len_wr
=
len
;
...
...
@@ -286,17 +275,25 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
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
(
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
);
}
/* may not have succeeded, but output values written to control
* structure (struct sg_io_hdr). */
return
0
;
out_request:
blk_put_request
(
rq
);
out_buffer:
kfree
(
buffer
);
return
-
EFAULT
;
}
#define FORMAT_UNIT_TIMEOUT (2 * 60 * 60 * HZ)
...
...
drivers/ide/ide-cd.c
View file @
ba5cd163
...
...
@@ -666,8 +666,10 @@ static void cdrom_end_request (ide_drive_t *drive, int uptodate)
struct
cdrom_info
*
info
=
drive
->
driver_data
;
void
*
sense
=
&
info
->
sense_data
;
if
(
failed
&&
failed
->
sense
)
if
(
failed
&&
failed
->
sense
)
{
sense
=
failed
->
sense
;
failed
->
sense_len
=
rq
->
sense_len
;
}
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)
* scsi status byte
*/
if
((
rq
->
flags
&
REQ_BLOCK_PC
)
&&
!
rq
->
errors
)
rq
->
errors
=
CHECK_CONDITION
;
rq
->
errors
=
SAM_STAT_
CHECK_CONDITION
;
/* Check for tray open. */
if
(
sense_key
==
NOT_READY
)
{
...
...
@@ -1471,8 +1473,9 @@ static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive)
/* Keep count of how much data we've moved. */
rq
->
data
+=
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
{
confused:
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
static
void
post_transform_command
(
struct
request
*
req
)
{
char
*
ibuf
=
req
->
buffer
;
u8
*
c
=
req
->
cmd
;
char
*
ibuf
;
if
(
!
blk_pc_request
(
req
))
return
;
if
(
req
->
bio
)
ibuf
=
bio_data
(
req
->
bio
);
else
ibuf
=
req
->
data
;
if
(
!
ibuf
)
return
;
/*
* set ansi-revision and response data as atapi
*/
...
...
drivers/ide/ide.c
View file @
ba5cd163
...
...
@@ -462,7 +462,6 @@ static int ide_open (struct inode * inode, struct file * filp)
return
-
ENXIO
;
}
static
LIST_HEAD
(
ata_unused
);
static
spinlock_t
drives_lock
=
SPIN_LOCK_UNLOCKED
;
static
spinlock_t
drivers_lock
=
SPIN_LOCK_UNLOCKED
;
static
LIST_HEAD
(
drivers
);
...
...
@@ -1437,9 +1436,6 @@ int ata_attach(ide_drive_t *drive)
spin_unlock
(
&
drivers_lock
);
if
(
idedefault_driver
.
attach
(
drive
)
!=
0
)
panic
(
"ide: default attach failed"
);
spin_lock
(
&
drives_lock
);
list_add_tail
(
&
drive
->
list
,
&
ata_unused
);
spin_unlock
(
&
drives_lock
);
return
1
;
}
...
...
@@ -1737,7 +1733,6 @@ static int __initdata is_chipset_set[MAX_HWIFS];
* "hdx=cyl,head,sect" : disk drive is present, with specified geometry
* "hdx=remap63" : add 63 to all sector numbers (for OnTrack DM)
* "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
* to the fastest PIO mode supported,
* if possible for this drive only.
...
...
@@ -1859,8 +1854,8 @@ int __init ide_setup (char *s)
const
char
*
hd_words
[]
=
{
"none"
,
"noprobe"
,
"nowerr"
,
"cdrom"
,
"serialize"
,
"autotune"
,
"noautotune"
,
"slow"
,
"swapdata"
,
"bswap"
,
"flash"
,
"remap"
,
"
noremap
"
,
"scsi"
,
"biostimings"
,
"remap63"
,
NULL
};
"flash"
,
"remap"
,
"
remap63
"
,
"scsi"
,
"biostimings"
,
NULL
};
unit
=
s
[
2
]
-
'a'
;
hw
=
unit
/
MAX_DRIVES
;
unit
=
unit
%
MAX_DRIVES
;
...
...
@@ -1920,23 +1915,15 @@ int __init ide_setup (char *s)
case
-
12
:
/* "remap" */
drive
->
remap_0_to_1
=
1
;
goto
done
;
case
-
13
:
/* "
noremap
" */
drive
->
remap_0_to_1
=
2
;
case
-
13
:
/* "
remap63
" */
drive
->
sect0
=
63
;
goto
done
;
case
-
14
:
/* "scsi" */
#if defined(CONFIG_BLK_DEV_IDESCSI) && defined(CONFIG_SCSI)
drive
->
scsi
=
1
;
goto
done
;
#else
drive
->
scsi
=
0
;
goto
bad_option
;
#endif
/* defined(CONFIG_BLK_DEV_IDESCSI) && defined(CONFIG_SCSI) */
case
-
15
:
/* "biostimings" */
drive
->
autotune
=
IDE_TUNE_BIOS
;
goto
done
;
case
-
16
:
/* "remap63" */
drive
->
sect0
=
63
;
goto
done
;
case
3
:
/* cyl,head,sect */
drive
->
media
=
ide_disk
;
drive
->
cyl
=
drive
->
bios_cyl
=
vals
[
0
];
...
...
@@ -2392,8 +2379,8 @@ int ide_unregister_subdriver (ide_drive_t *drive)
spin_unlock_irqrestore
(
&
ide_lock
,
flags
);
spin_lock
(
&
drives_lock
);
list_del_init
(
&
drive
->
list
);
list_add
(
&
drive
->
list
,
&
drive
->
driver
->
drives
);
spin_unlock
(
&
drives_lock
);
/* drive will be added to &idedefault_driver->drives in ata_attach() */
return
0
;
}
...
...
@@ -2416,9 +2403,9 @@ int ide_register_driver(ide_driver_t *driver)
list_add
(
&
driver
->
drivers
,
&
drivers
);
spin_unlock
(
&
drivers_lock
);
spin_lock
(
&
drives_lock
);
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
);
list_for_each_safe
(
list_loop
,
tmp_storage
,
&
list
)
{
...
...
fs/bio.c
View file @
ba5cd163
...
...
@@ -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
);
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,
* 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,
* reference to it
*/
bio_get
(
bio
);
if
(
bio
->
bi_size
<
len
)
{
bio_endio
(
bio
,
bio
->
bi_size
,
0
);
bio_unmap_user
(
bio
,
0
);
return
NULL
;
}
}
return
bio
;
...
...
include/linux/ide.h
View file @
ba5cd163
...
...
@@ -720,7 +720,7 @@ typedef struct ide_drive_s {
unsigned
doorlocking
:
1
;
/* for removable only: door lock/unlock works */
unsigned
autotune
:
3
;
/* 1=autotune, 2=noautotune,
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
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 */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment