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
Kirill Smelkov
linux
Commits
8b109aa9
Commit
8b109aa9
authored
Nov 23, 2007
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Import 2.1.119
parent
00b90961
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
371 additions
and
153 deletions
+371
-153
CREDITS
CREDITS
+1
-0
Documentation/Changes
Documentation/Changes
+0
-6
Makefile
Makefile
+7
-1
arch/ppc/kernel/pmac_setup.c
arch/ppc/kernel/pmac_setup.c
+0
-92
drivers/block/Config.in
drivers/block/Config.in
+8
-0
drivers/block/Makefile
drivers/block/Makefile
+4
-0
drivers/block/ide-pmac.c
drivers/block/ide-pmac.c
+298
-0
drivers/block/ide.c
drivers/block/ide.c
+6
-0
drivers/block/nbd.c
drivers/block/nbd.c
+19
-13
drivers/isdn/isdn_common.c
drivers/isdn/isdn_common.c
+1
-0
drivers/scsi/hosts.c
drivers/scsi/hosts.c
+11
-3
fs/nfs/write.c
fs/nfs/write.c
+6
-26
fs/smbfs/proc.c
fs/smbfs/proc.c
+5
-3
include/asm-ppc/ide.h
include/asm-ppc/ide.h
+0
-2
include/linux/smb_fs.h
include/linux/smb_fs.h
+0
-1
include/linux/smb_mount.h
include/linux/smb_mount.h
+5
-6
No files found.
CREDITS
View file @
8b109aa9
...
...
@@ -68,6 +68,7 @@ D: Parport hacker
D: Implemented a workaround for some interrupt buggy printers
D: Author of pscan that helps to fix lp/parport bug
D: Author of lil (Linux Interrupt Latency benchmark)
D: Fixed the shm swap deallocation at swapoff time (try_to_unuse message)
D: Various other kernel hacks
S: Via Ciaclini 26
S: Imola 40026
...
...
Documentation/Changes
View file @
8b109aa9
...
...
@@ -190,12 +190,6 @@ net-tools. This will also fix other problems. For example, the format
of /proc/net/dev changed; as a result, an older ifconfig will
incorrectly report errors.
As of 2.1.102, the firewalling code has been replaced with
firewalling chains. See
http://www.adelaide.net.au/~rustcorp/ipfwchains/ipfwchains.html for
more information. Among other things, you'
ll
now
need
to
use
ipchains
instead
of
ipfwadm
to
configure
your
filters
.
The IP firewalling code has been replaced: ipfwadm will no longer
work. You need to obtain `ipchains'
,
available
from
http
://
www
.
adelaide
.
net
.
au
/~
rustcorp
/
ipfwchains
/
ipfwchains
.
html
...
...
Makefile
View file @
8b109aa9
...
...
@@ -72,6 +72,12 @@ ROOT_DEV = CURRENT
#INSTALL_PATH=/boot
#
# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
# relocations required by build roots. This is not defined in the
# makefile but the arguement can be passed to make if needed.
#
#
# If you want to preset the SVGA mode, uncomment the next line and
# set SVGA_MODE to whatever number you want.
...
...
@@ -289,7 +295,7 @@ $(patsubst %, _mod_%, $(SUBDIRS)) : include/linux/version.h
modules_install
:
@
(
\
MODLIB
=
/lib/modules/
$(VERSION)
.
$(PATCHLEVEL)
.
$(SUBLEVEL)
;
\
MODLIB
=
$(INSTALL_MOD_PATH)
/lib/modules/
$(VERSION)
.
$(PATCHLEVEL)
.
$(SUBLEVEL)
;
\
cd
modules
;
\
MODULES
=
""
;
\
inst_mod
()
{
These
=
"
`
cat
$$
1
`
"
;
MODULES
=
"
$$
MODULES
$$
These"
;
\
...
...
arch/ppc/kernel/pmac_setup.c
View file @
8b109aa9
...
...
@@ -44,7 +44,6 @@
#include <asm/system.h>
#include <asm/pgtable.h>
#include <asm/io.h>
#include <asm/ide.h>
#include <asm/pci-bridge.h>
#include <asm/adb.h>
#include <asm/cuda.h>
...
...
@@ -273,94 +272,3 @@ __initfunc(void note_bootable_part(kdev_t dev, int part))
}
}
#ifdef CONFIG_BLK_DEV_IDE
int
pmac_ide_ports_known
;
ide_ioreg_t
pmac_ide_regbase
[
MAX_HWIFS
];
int
pmac_ide_irq
[
MAX_HWIFS
];
__initfunc
(
void
pmac_ide_init_hwif_ports
(
ide_ioreg_t
*
p
,
ide_ioreg_t
base
,
int
*
irq
))
{
int
i
;
*
p
=
0
;
if
(
base
==
0
)
return
;
if
(
base
==
mb_cd_base
&&
!
check_media_bay
(
MB_CD
))
{
mb_cd_index
=
-
1
;
return
;
}
for
(
i
=
0
;
i
<
8
;
++
i
)
*
p
++
=
base
+
i
*
0x10
;
*
p
=
base
+
0x160
;
if
(
irq
!=
NULL
)
{
*
irq
=
0
;
for
(
i
=
0
;
i
<
MAX_HWIFS
;
++
i
)
{
if
(
base
==
pmac_ide_regbase
[
i
])
{
*
irq
=
pmac_ide_irq
[
i
];
break
;
}
}
}
}
__initfunc
(
void
pmac_ide_probe
(
void
))
{
struct
device_node
*
np
;
int
i
;
struct
device_node
*
atas
;
struct
device_node
*
p
,
**
pp
,
*
removables
,
**
rp
;
pp
=
&
atas
;
rp
=
&
removables
;
p
=
find_devices
(
"ATA"
);
if
(
p
==
NULL
)
p
=
find_devices
(
"IDE"
);
if
(
p
==
NULL
)
p
=
find_type_devices
(
"ide"
);
if
(
p
==
NULL
)
p
=
find_type_devices
(
"ata"
);
/* Move removable devices such as the media-bay CDROM
on the PB3400 to the end of the list. */
for
(;
p
!=
NULL
;
p
=
p
->
next
)
{
if
(
p
->
parent
&&
p
->
parent
->
name
&&
strcasecmp
(
p
->
parent
->
name
,
"media-bay"
)
==
0
)
{
*
rp
=
p
;
rp
=
&
p
->
next
;
}
else
{
*
pp
=
p
;
pp
=
&
p
->
next
;
}
}
*
rp
=
NULL
;
*
pp
=
removables
;
for
(
i
=
0
,
np
=
atas
;
i
<
MAX_HWIFS
&&
np
!=
NULL
;
np
=
np
->
next
)
{
if
(
np
->
n_addrs
==
0
)
{
printk
(
KERN_WARNING
"ide: no address for device %s
\n
"
,
np
->
full_name
);
continue
;
}
pmac_ide_regbase
[
i
]
=
(
unsigned
long
)
ioremap
(
np
->
addrs
[
0
].
address
,
0x200
);
if
(
np
->
n_intrs
==
0
)
{
printk
(
"ide: no intrs for device %s, using 13
\n
"
,
np
->
full_name
);
pmac_ide_irq
[
i
]
=
13
;
}
else
{
pmac_ide_irq
[
i
]
=
np
->
intrs
[
0
].
line
;
}
if
(
np
->
parent
&&
np
->
parent
->
name
&&
strcasecmp
(
np
->
parent
->
name
,
"media-bay"
)
==
0
)
{
mb_cd_index
=
i
;
mb_cd_base
=
pmac_ide_regbase
[
i
];
mb_cd_irq
=
pmac_ide_irq
[
i
];
}
++
i
;
}
pmac_ide_ports_known
=
1
;
}
#endif
/* CONFIG_BLK_DEV_IDE */
drivers/block/Config.in
View file @
8b109aa9
...
...
@@ -48,6 +48,14 @@ else
bool ' WInbond SL82c105 support' CONFIG_BLK_DEV_SL82C105
fi
fi
if [ "$CONFIG_PMAC" = "y" ]; then
define_bool CONFIG_BLK_DEV_IDE_PMAC y
bool ' PowerMac IDE DMA support' CONFIG_BLK_DEV_IDEDMA_PMAC
if [ "$CONFIG_BLK_DEV_IDEDMA_PMAC" = "y" ]; then
define_bool CONFIG_BLK_DEV_IDEDMA y
bool ' Use DMA by default' CONFIG_PMAC_IDEDMA_AUTO
fi
fi
bool ' Other IDE chipset support' CONFIG_IDE_CHIPSETS
if [ "$CONFIG_IDE_CHIPSETS" = "y" ]; then
comment 'Note: most of these also require special kernel boot parameters'
...
...
drivers/block/Makefile
View file @
8b109aa9
...
...
@@ -106,6 +106,10 @@ ifeq ($(CONFIG_BLK_DEV_CMD640),y)
IDE_OBJS
+=
cmd640.o
endif
ifeq
($(CONFIG_BLK_DEV_IDE_PMAC),y)
IDE_OBJS
+=
ide-pmac.o
endif
ifeq
($(CONFIG_BLK_DEV_IDEPCI),y)
IDE_OBJS
+=
ide-pci.o
endif
...
...
drivers/block/ide-pmac.c
0 → 100644
View file @
8b109aa9
/*
* Support for IDE interfaces on PowerMacs.
* These IDE interfaces are memory-mapped and have a DBDMA channel
* for doing DMA.
*
* Copyright (C) 1998 Paul Mackerras.
*
* 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 the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Some code taken from drivers/block/ide-dma.c:
*
* Copyright (c) 1995-1998 Mark Lord
*
*/
#include <linux/config.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <asm/prom.h>
#include <asm/io.h>
#include <asm/dbdma.h>
#include <asm/ide.h>
#include <asm/mediabay.h>
#include "ide.h"
ide_ioreg_t
pmac_ide_regbase
[
MAX_HWIFS
];
int
pmac_ide_irq
[
MAX_HWIFS
];
#ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
#define MAX_DCMDS 256
/* allow up to 256 DBDMA commands per xfer */
static
void
pmac_ide_setup_dma
(
struct
device_node
*
np
,
ide_hwif_t
*
hwif
);
static
int
pmac_ide_dmaproc
(
ide_dma_action_t
func
,
ide_drive_t
*
drive
);
static
int
pmac_ide_build_dmatable
(
ide_drive_t
*
drive
,
int
wr
);
#endif
/* CONFIG_BLK_DEV_IDEDMA_PMAC */
__initfunc
(
void
pmac_ide_init_hwif_ports
(
ide_ioreg_t
*
p
,
ide_ioreg_t
base
,
int
*
irq
))
{
int
i
;
*
p
=
0
;
if
(
base
==
0
)
return
;
if
(
base
==
mb_cd_base
&&
!
check_media_bay
(
MB_CD
))
{
mb_cd_index
=
-
1
;
return
;
}
for
(
i
=
0
;
i
<
8
;
++
i
)
*
p
++
=
base
+
i
*
0x10
;
*
p
=
base
+
0x160
;
if
(
irq
!=
NULL
)
{
*
irq
=
0
;
for
(
i
=
0
;
i
<
MAX_HWIFS
;
++
i
)
{
if
(
base
==
pmac_ide_regbase
[
i
])
{
*
irq
=
pmac_ide_irq
[
i
];
break
;
}
}
}
}
__initfunc
(
void
pmac_ide_probe
(
void
))
{
struct
device_node
*
np
;
int
i
;
struct
device_node
*
atas
;
struct
device_node
*
p
,
**
pp
,
*
removables
,
**
rp
;
unsigned
long
base
;
int
irq
;
ide_hwif_t
*
hwif
;
if
(
_machine
!=
_MACH_Pmac
)
return
;
pp
=
&
atas
;
rp
=
&
removables
;
p
=
find_devices
(
"ATA"
);
if
(
p
==
NULL
)
p
=
find_devices
(
"IDE"
);
if
(
p
==
NULL
)
p
=
find_type_devices
(
"ide"
);
if
(
p
==
NULL
)
p
=
find_type_devices
(
"ata"
);
/* Move removable devices such as the media-bay CDROM
on the PB3400 to the end of the list. */
for
(;
p
!=
NULL
;
p
=
p
->
next
)
{
if
(
p
->
parent
&&
p
->
parent
->
name
&&
strcasecmp
(
p
->
parent
->
name
,
"media-bay"
)
==
0
)
{
*
rp
=
p
;
rp
=
&
p
->
next
;
}
else
{
*
pp
=
p
;
pp
=
&
p
->
next
;
}
}
*
rp
=
NULL
;
*
pp
=
removables
;
for
(
i
=
0
,
np
=
atas
;
i
<
MAX_HWIFS
&&
np
!=
NULL
;
np
=
np
->
next
)
{
if
(
np
->
n_addrs
==
0
)
{
printk
(
KERN_WARNING
"ide: no address for device %s
\n
"
,
np
->
full_name
);
continue
;
}
base
=
(
unsigned
long
)
ioremap
(
np
->
addrs
[
0
].
address
,
0x200
);
if
(
np
->
n_intrs
==
0
)
{
printk
(
"ide: no intrs for device %s, using 13
\n
"
,
np
->
full_name
);
irq
=
13
;
}
else
{
irq
=
np
->
intrs
[
0
].
line
;
}
pmac_ide_regbase
[
i
]
=
base
;
pmac_ide_irq
[
i
]
=
irq
;
if
(
np
->
parent
&&
np
->
parent
->
name
&&
strcasecmp
(
np
->
parent
->
name
,
"media-bay"
)
==
0
)
{
mb_cd_index
=
i
;
mb_cd_base
=
base
;
mb_cd_irq
=
irq
;
}
hwif
=
&
ide_hwifs
[
i
];
pmac_ide_init_hwif_ports
(
hwif
->
io_ports
,
base
,
&
hwif
->
irq
);
hwif
->
chipset
=
ide_generic
;
hwif
->
noprobe
=
!
hwif
->
io_ports
[
IDE_DATA_OFFSET
];
#ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
if
(
np
->
n_addrs
>=
2
&&
np
->
n_intrs
>=
2
)
{
/* has a DBDMA controller channel */
pmac_ide_setup_dma
(
np
,
hwif
);
}
#endif
/* CONFIG_BLK_DEV_IDEDMA_PMAC */
++
i
;
}
}
#ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
__initfunc
(
static
void
pmac_ide_setup_dma
(
struct
device_node
*
np
,
ide_hwif_t
*
hwif
))
{
hwif
->
dma_base
=
(
unsigned
long
)
ioremap
(
np
->
addrs
[
1
].
address
,
0x200
);
/*
* Allocate space for the DBDMA commands.
* The +2 is +1 for the stop command and +1 to allow for
* aligning the start address to a multiple of 16 bytes.
*/
hwif
->
dmatable
=
(
unsigned
long
*
)
kmalloc
((
MAX_DCMDS
+
2
)
*
sizeof
(
struct
dbdma_cmd
),
GFP_KERNEL
);
if
(
hwif
->
dmatable
==
0
)
{
printk
(
KERN_ERR
"%s: unable to allocate DMA command list
\n
"
,
hwif
->
name
);
return
;
}
hwif
->
dmaproc
=
&
pmac_ide_dmaproc
;
#ifdef CONFIG_PMAC_IDEDMA_AUTO
hwif
->
autodma
=
1
;
#endif
}
/*
* pmac_ide_build_dmatable builds the DBDMA command list
* for a transfer and sets the DBDMA channel to point to it.
*/
static
int
pmac_ide_build_dmatable
(
ide_drive_t
*
drive
,
int
wr
)
{
ide_hwif_t
*
hwif
=
HWIF
(
drive
);
struct
dbdma_cmd
*
table
,
*
tstart
;
int
count
=
0
;
struct
request
*
rq
=
HWGROUP
(
drive
)
->
rq
;
struct
buffer_head
*
bh
=
rq
->
bh
;
unsigned
int
size
,
addr
;
volatile
struct
dbdma_regs
*
dma
=
(
volatile
struct
dbdma_regs
*
)
hwif
->
dma_base
;
table
=
tstart
=
(
struct
dbdma_cmd
*
)
DBDMA_ALIGN
(
hwif
->
dmatable
);
out_le32
(
&
dma
->
control
,
(
RUN
|
PAUSE
|
FLUSH
|
WAKE
|
DEAD
)
<<
16
);
do
{
/*
* Determine addr and size of next buffer area. We assume that
* individual virtual buffers are always composed linearly in
* physical memory. For example, we assume that any 8kB buffer
* is always composed of two adjacent physical 4kB pages rather
* than two possibly non-adjacent physical 4kB pages.
*/
if
(
bh
==
NULL
)
{
/* paging requests have (rq->bh == NULL) */
addr
=
virt_to_bus
(
rq
->
buffer
);
size
=
rq
->
nr_sectors
<<
9
;
}
else
{
/* group sequential buffers into one large buffer */
addr
=
virt_to_bus
(
bh
->
b_data
);
size
=
bh
->
b_size
;
while
((
bh
=
bh
->
b_reqnext
)
!=
NULL
)
{
if
((
addr
+
size
)
!=
virt_to_bus
(
bh
->
b_data
))
break
;
size
+=
bh
->
b_size
;
}
}
/*
* Fill in the next DBDMA command block.
* Note that one DBDMA command can transfer
* at most 65535 bytes.
*/
while
(
size
)
{
unsigned
int
tc
=
(
size
<
0xfe00
)
?
size
:
0xfe00
;
if
(
++
count
>=
MAX_DCMDS
)
{
printk
(
"%s: DMA table too small
\n
"
,
drive
->
name
);
return
0
;
/* revert to PIO for this request */
}
st_le16
(
&
table
->
command
,
wr
?
OUTPUT_MORE
:
INPUT_MORE
);
st_le16
(
&
table
->
req_count
,
tc
);
st_le32
(
&
table
->
phy_addr
,
addr
);
table
->
cmd_dep
=
0
;
table
->
xfer_status
=
0
;
table
->
res_count
=
0
;
addr
+=
tc
;
size
-=
tc
;
++
table
;
}
}
while
(
bh
!=
NULL
);
/* convert the last command to an input/output last command */
if
(
count
)
st_le16
(
&
table
[
-
1
].
command
,
wr
?
OUTPUT_LAST
:
INPUT_LAST
);
else
printk
(
KERN_DEBUG
"%s: empty DMA table?
\n
"
,
drive
->
name
);
/* add the stop command to the end of the list */
memset
(
table
,
0
,
sizeof
(
struct
dbdma_cmd
));
out_le16
(
&
table
->
command
,
DBDMA_STOP
);
out_le32
(
&
dma
->
cmdptr
,
virt_to_bus
(
tstart
));
return
1
;
}
int
pmac_ide_dmaproc
(
ide_dma_action_t
func
,
ide_drive_t
*
drive
)
{
ide_hwif_t
*
hwif
=
HWIF
(
drive
);
volatile
struct
dbdma_regs
*
dma
=
(
volatile
struct
dbdma_regs
*
)
hwif
->
dma_base
;
int
dstat
;
switch
(
func
)
{
case
ide_dma_on
:
/* ide-floppy DMA doesn't work yet... */
drive
->
using_dma
=
drive
->
media
!=
ide_floppy
;
break
;
case
ide_dma_off
:
printk
(
KERN_INFO
"%s: DMA disabled
\n
"
,
drive
->
name
);
case
ide_dma_off_quietly
:
drive
->
using_dma
=
0
;
break
;
case
ide_dma_check
:
/* ide-floppy DMA doesn't work yet... */
drive
->
using_dma
=
hwif
->
autodma
&&
drive
->
media
!=
ide_floppy
;
break
;
case
ide_dma_read
:
case
ide_dma_write
:
if
(
!
pmac_ide_build_dmatable
(
drive
,
func
==
ide_dma_write
))
return
1
;
drive
->
waiting_for_dma
=
1
;
if
(
drive
->
media
!=
ide_disk
)
return
0
;
ide_set_handler
(
drive
,
&
ide_dma_intr
,
WAIT_CMD
);
OUT_BYTE
(
func
==
ide_dma_write
?
WIN_WRITEDMA
:
WIN_READDMA
,
IDE_COMMAND_REG
);
case
ide_dma_begin
:
out_le32
(
&
dma
->
control
,
(
RUN
<<
16
)
|
RUN
);
break
;
case
ide_dma_end
:
drive
->
waiting_for_dma
=
0
;
dstat
=
in_le32
(
&
dma
->
status
);
out_le32
(
&
dma
->
control
,
((
RUN
|
WAKE
|
DEAD
)
<<
16
));
/* verify good dma status */
return
(
dstat
&
(
RUN
|
DEAD
|
ACTIVE
))
!=
RUN
;
case
ide_dma_test_irq
:
return
(
in_le32
(
&
dma
->
status
)
&
(
RUN
|
ACTIVE
))
==
RUN
;
default:
printk
(
KERN_ERR
"pmac_ide_dmaproc: bad func %d
\n
"
,
func
);
}
return
0
;
}
#endif
/* CONFIG_BLK_DEV_IDEDMA_PMAC */
drivers/block/ide.c
View file @
8b109aa9
...
...
@@ -2637,6 +2637,12 @@ __initfunc(static void probe_for_hwifs (void))
(
void
)
init_pdc4030
();
}
#endif
/* CONFIG_BLK_DEV_PDC4030 */
#ifdef CONFIG_BLK_DEV_IDE_PMAC
{
extern
void
pmac_ide_probe
(
void
);
pmac_ide_probe
();
}
#endif
/* CONFIG_BLK_DEV_IDE_PMAC */
}
__initfunc
(
void
ide_init_builtin_drivers
(
void
))
...
...
drivers/block/nbd.c
View file @
8b109aa9
...
...
@@ -81,9 +81,18 @@ static int nbd_xmit(int send, struct socket *sock, char *buf, int size)
int
result
;
struct
msghdr
msg
;
struct
iovec
iov
;
unsigned
long
flags
;
oldfs
=
get_fs
();
set_fs
(
get_ds
());
spin_lock_irqsave
(
&
current
->
sigmask_lock
,
flags
);
oldset
=
current
->
blocked
;
sigfillset
(
&
current
->
blocked
);
recalc_sigpending
(
current
);
spin_unlock_irqrestore
(
&
current
->
sigmask_lock
,
flags
);
do
{
sigset_t
oldset
;
...
...
@@ -98,22 +107,11 @@ static int nbd_xmit(int send, struct socket *sock, char *buf, int size)
msg
.
msg_namelen
=
0
;
msg
.
msg_flags
=
0
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
oldset
=
current
->
blocked
;
sigfillset
(
&
current
->
blocked
);
recalc_sigpending
(
current
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
send
)
result
=
sock_sendmsg
(
sock
,
&
msg
,
size
);
else
result
=
sock_recvmsg
(
sock
,
&
msg
,
size
,
0
);
spin_lock_irq
(
&
current
->
sigmask_lock
);
current
->
blocked
=
oldset
;
recalc_sigpending
(
current
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
result
<=
0
)
{
#ifdef PARANOIA
printk
(
KERN_ERR
"NBD: %s - sock=%ld at buf=%ld, size=%d returned %d.
\n
"
,
...
...
@@ -124,6 +122,12 @@ static int nbd_xmit(int send, struct socket *sock, char *buf, int size)
size
-=
result
;
buf
+=
result
;
}
while
(
size
>
0
);
spin_lock_irqsave
(
&
current
->
sigmask_lock
,
flags
);
current
->
blocked
=
oldset
;
recalc_sigpending
(
current
);
spin_unlock_irqrestore
(
&
current
->
sigmask_lock
,
flags
);
set_fs
(
oldfs
);
return
result
;
}
...
...
@@ -295,8 +299,6 @@ static void do_nbd_request(void)
requests_in
++
;
#endif
req
->
errors
=
0
;
nbd_send_req
(
lo
->
sock
,
req
);
/* Why does this block? */
CURRENT
=
CURRENT
->
next
;
req
->
next
=
NULL
;
if
(
lo
->
head
==
NULL
)
{
...
...
@@ -306,6 +308,10 @@ static void do_nbd_request(void)
lo
->
head
->
next
=
req
;
lo
->
head
=
req
;
}
spin_unlock_irq
(
&
io_request_lock
);
nbd_send_req
(
lo
->
sock
,
req
);
/* Why does this block? */
spin_lock_irq
(
&
io_request_lock
);
continue
;
error_out:
...
...
drivers/isdn/isdn_common.c
View file @
8b109aa9
...
...
@@ -1787,6 +1787,7 @@ static struct file_operations isdn_fops =
isdn_ioctl
,
/* isdn_ioctl */
NULL
,
/* isdn_mmap */
isdn_open
,
NULL
,
/* flush */
isdn_close
,
NULL
/* fsync */
};
...
...
drivers/scsi/hosts.c
View file @
8b109aa9
...
...
@@ -518,10 +518,18 @@ scsi_unregister(struct Scsi_Host * sh){
/* If we are removing the last host registered, it is safe to reuse
* its host number (this avoids "holes" at boot time) (DB)
* It is also safe to reuse those of numbers directly below which have
* been released earlier (to avoid some holes in numbering).
*/
if
(
max_scsi_hosts
==
next_scsi_host
)
max_scsi_hosts
--
;
if
(
sh
->
host_no
==
max_scsi_hosts
-
1
)
{
while
(
--
max_scsi_hosts
>=
next_scsi_host
)
{
shpnt
=
scsi_hostlist
;
while
(
shpnt
&&
shpnt
->
host_no
!=
max_scsi_hosts
-
1
)
shpnt
=
shpnt
->
next
;
if
(
shpnt
)
break
;
}
}
next_scsi_host
--
;
scsi_init_free
((
char
*
)
sh
,
sizeof
(
struct
Scsi_Host
)
+
sh
->
extra_bytes
);
}
...
...
fs/nfs/write.c
View file @
8b109aa9
...
...
@@ -56,18 +56,6 @@
#include <linux/nfs_fs.h>
#include <asm/uaccess.h>
/*
* NOTE! We must NOT default to soft-mounting: that breaks too many
* programs that depend on POSIX behaviour of uninterruptible reads
* and writes.
*
* Until we have a per-mount soft/hard mount policy that we can honour
* we must default to hard mounting!
*
* And yes, this should be "interruptible", not soft.
*/
#define IS_SOFT 0
#define NFS_PARANOIA 1
#define NFSDBG_FACILITY NFSDBG_PAGECACHE
...
...
@@ -730,29 +718,21 @@ int
nfs_flush_dirty_pages
(
struct
inode
*
inode
,
pid_t
pid
,
off_t
offset
,
off_t
len
)
{
struct
nfs_wreq
*
last
=
NULL
;
int
result
=
0
,
cancel
=
0
;
int
result
=
0
;
dprintk
(
"NFS: flush_dirty_pages(%x/%ld for pid %d %ld/%ld)
\n
"
,
inode
->
i_dev
,
inode
->
i_ino
,
current
->
pid
,
offset
,
len
);
if
(
IS_SOFT
&&
signalled
())
{
nfs_cancel_dirty
(
inode
,
pid
);
cancel
=
1
;
}
for
(;;)
{
if
(
IS_SOFT
&&
signalled
())
{
if
(
!
cancel
)
nfs_cancel_dirty
(
inode
,
pid
);
result
=
-
ERESTARTSYS
;
break
;
}
/* Flush all pending writes for the pid and file region */
last
=
nfs_flush_pages
(
inode
,
pid
,
offset
,
len
,
0
);
if
(
last
==
NULL
)
break
;
wait_on_write_request
(
last
);
result
=
wait_on_write_request
(
last
);
if
(
result
)
{
nfs_cancel_dirty
(
inode
,
pid
);
break
;
}
}
return
result
;
...
...
fs/smbfs/proc.c
View file @
8b109aa9
...
...
@@ -1961,11 +1961,13 @@ smb_proc_getattr(struct dentry *dir, struct smb_fattr *fattr)
smb_init_dirent
(
server
,
fattr
);
/*
* Win 95 is painfully slow at returning trans2 getattr info,
* so we provide the SMB_FIX_OLDATTR option switch.
* Select whether to use core or trans2 getattr.
*/
if
(
server
->
opt
.
protocol
>=
SMB_PROTOCOL_LANMAN2
)
{
if
(
server
->
mnt
->
version
&
SMB_FIX_OLDATTR
)
/*
* Win 95 appears to break with the trans2 getattr.
*/
if
(
server
->
mnt
->
version
&
(
SMB_FIX_OLDATTR
|
SMB_FIX_WIN95
))
goto
core_attr
;
if
(
server
->
mnt
->
version
&
SMB_FIX_DIRATTR
)
result
=
smb_proc_getattr_ff
(
server
,
dir
,
fattr
);
...
...
include/asm-ppc/ide.h
View file @
8b109aa9
...
...
@@ -95,8 +95,6 @@ static __inline__ int ide_default_irq(ide_ioreg_t base)
static
__inline__
ide_ioreg_t
ide_default_io_base
(
int
index
)
{
if
(
_machine
==
_MACH_Pmac
)
{
if
(
!
pmac_ide_ports_known
)
pmac_ide_probe
();
return
pmac_ide_regbase
[
index
];
}
if
(
_machine
==
_MACH_mbx
)
return
index
;
...
...
include/linux/smb_fs.h
View file @
8b109aa9
...
...
@@ -9,7 +9,6 @@
#ifndef _LINUX_SMB_FS_H
#define _LINUX_SMB_FS_H
#include <linux/dirent.h>
#include <linux/smb.h>
/*
...
...
include/linux/smb_mount.h
View file @
8b109aa9
...
...
@@ -15,12 +15,11 @@
struct
smb_mount_data
{
int
version
;
uid_t
mounted_uid
;
/* Who may umount() this filesystem? */
uid_t
uid
;
gid_t
gid
;
mode_t
file_mode
;
mode_t
dir_mode
;
__kernel_uid_t
mounted_uid
;
/* Who may umount() this filesystem? */
__kernel_uid_t
uid
;
__kernel_gid_t
gid
;
__kernel_mode_t
file_mode
;
__kernel_mode_t
dir_mode
;
};
#endif
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