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
5ade138f
Commit
5ade138f
authored
Jul 25, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/davem/sparc-2.5
into home.osdl.org:/home/torvalds/v2.5/linux
parents
bd519fce
c5a46f51
Changes
42
Show whitespace changes
Inline
Side-by-side
Showing
42 changed files
with
477 additions
and
617 deletions
+477
-617
arch/alpha/Makefile
arch/alpha/Makefile
+0
-1
arch/h8300/Makefile
arch/h8300/Makefile
+0
-1
arch/i386/Makefile
arch/i386/Makefile
+0
-1
arch/m68k/Makefile
arch/m68k/Makefile
+0
-1
arch/m68knommu/Makefile
arch/m68knommu/Makefile
+0
-2
arch/mips/Makefile
arch/mips/Makefile
+0
-2
arch/parisc/Makefile
arch/parisc/Makefile
+0
-2
arch/ppc/Makefile
arch/ppc/Makefile
+0
-1
arch/ppc64/Makefile
arch/ppc64/Makefile
+0
-1
arch/s390/Makefile
arch/s390/Makefile
+0
-2
arch/sh/Makefile
arch/sh/Makefile
+0
-2
arch/sparc/Makefile
arch/sparc/Makefile
+0
-2
arch/sparc64/Makefile
arch/sparc64/Makefile
+0
-1
arch/v850/Makefile
arch/v850/Makefile
+0
-1
arch/x86_64/Makefile
arch/x86_64/Makefile
+0
-1
drivers/block/ll_rw_blk.c
drivers/block/ll_rw_blk.c
+10
-5
drivers/ide/pci/via82cxxx.c
drivers/ide/pci/via82cxxx.c
+1
-1
drivers/net/sk_mca.c
drivers/net/sk_mca.c
+1
-0
drivers/scsi/scsi_lib.c
drivers/scsi/scsi_lib.c
+3
-3
fs/devpts/Makefile
fs/devpts/Makefile
+3
-9
fs/ext2/Makefile
fs/ext2/Makefile
+5
-13
fs/ext3/Makefile
fs/ext3/Makefile
+5
-13
fs/fat/cache.c
fs/fat/cache.c
+87
-45
fs/fat/dir.c
fs/fat/dir.c
+31
-24
fs/fat/file.c
fs/fat/file.c
+7
-4
fs/fat/inode.c
fs/fat/inode.c
+40
-47
fs/fat/misc.c
fs/fat/misc.c
+73
-265
fs/jfs/Makefile
fs/jfs/Makefile
+2
-4
fs/msdos/namei.c
fs/msdos/namei.c
+23
-23
fs/ncpfs/Makefile
fs/ncpfs/Makefile
+4
-7
fs/proc/Makefile
fs/proc/Makefile
+5
-10
fs/vfat/namei.c
fs/vfat/namei.c
+39
-57
include/linux/blkdev.h
include/linux/blkdev.h
+1
-1
include/linux/msdos_fs.h
include/linux/msdos_fs.h
+11
-8
include/linux/msdos_fs_sb.h
include/linux/msdos_fs_sb.h
+3
-2
kernel/suspend.c
kernel/suspend.c
+0
-1
net/sunrpc/svcsock.c
net/sunrpc/svcsock.c
+2
-1
scripts/kconfig/confdata.c
scripts/kconfig/confdata.c
+27
-21
scripts/kconfig/gconf.c
scripts/kconfig/gconf.c
+55
-27
scripts/kconfig/qconf.cc
scripts/kconfig/qconf.cc
+4
-1
usr/Makefile
usr/Makefile
+5
-4
usr/initramfs_data.S
usr/initramfs_data.S
+30
-0
No files found.
arch/alpha/Makefile
View file @
5ade138f
...
...
@@ -11,7 +11,6 @@
NM
:=
$(NM)
-B
LDFLAGS_vmlinux
:=
-static
-N
#-relax
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf64-alpha
cflags-y
:=
-pipe
-mno-fp-regs
-ffixed-8
# Determine if we can use the BWX instructions with GAS.
...
...
arch/h8300/Makefile
View file @
5ade138f
...
...
@@ -34,7 +34,6 @@ CFLAGS += -D__linux__
CFLAGS
+=
-DUTS_SYSNAME
=
\"
uClinux
\"
-DTARGET
=
$(BOARD)
AFLAGS
+=
-DPLATFORM
=
$(PLATFORM)
-DTARGET
=
$(BOARD)
-DMODEL
=
$(MODEL)
$
(
cflags-y
)
LDFLAGS
+=
$
(
ldflags-y
)
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-h8300
CROSS_COMPILE
=
h8300-elf-
#HEAD := arch/$(ARCH)/platform/$(platform-y)/$(board-y)/crt0_$(model-y).o
...
...
arch/i386/Makefile
View file @
5ade138f
...
...
@@ -18,7 +18,6 @@
LDFLAGS
:=
-m
elf_i386
OBJCOPYFLAGS
:=
-O
binary
-R
.note
-R
.comment
-S
LDFLAGS_vmlinux
:=
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-i386
CFLAGS
+=
-pipe
...
...
arch/m68k/Makefile
View file @
5ade138f
...
...
@@ -19,7 +19,6 @@ COMPILE_ARCH = $(shell uname -m)
# override top level makefile
AS
+=
-m68020
LDFLAGS
:=
-m
m68kelf
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-m68k
ifneq
($(COMPILE_ARCH),$(ARCH))
# prefix for cross-compiling binaries
CROSS_COMPILE
=
m68k-linux-
...
...
arch/m68knommu/Makefile
View file @
5ade138f
...
...
@@ -85,8 +85,6 @@ CFLAGS += -O2 -g
CFLAGS
+=
-D__linux__
CFLAGS
+=
-DUTS_SYSNAME
=
\"
uClinux
\"
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-m68k
head-y
:=
arch
/m68knommu/platform/
$
(
platform-y
)
/
$
(
board-y
)
/crt0_
$
(
model-y
)
.o
CLEAN_FILES
:=
include/asm-
$(ARCH)
/asm-offsets.h
\
...
...
arch/mips/Makefile
View file @
5ade138f
...
...
@@ -18,11 +18,9 @@
ifdef
CONFIG_CPU_LITTLE_ENDIAN
tool-prefix
=
mipsel-linux-
JIFFIES32
=
jiffies_64
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-tradlittlemips
else
tool-prefix
=
mips-linux-
JIFFIES32
=
jiffies_64 + 4
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-tradbigmips
endif
ifdef
CONFIG_CROSSCOMPILE
...
...
arch/parisc/Makefile
View file @
5ade138f
...
...
@@ -20,13 +20,11 @@
ifdef
CONFIG_PARISC64
CROSS_COMPILE
:=
hppa64-linux-
UTS_MACHINE
:=
parisc64
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf64-hppa-linux
else
MACHINE
:=
$(
subst
64,,
$(
shell
uname
-m
))
ifneq
($(MACHINE),parisc)
CROSS_COMPILE
:=
hppa-linux-
endif
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-hppa-linux
endif
FINAL_LD
=
$(CROSS_COMPILE)
ld
--warn-common
--warn-section-align
...
...
arch/ppc/Makefile
View file @
5ade138f
...
...
@@ -13,7 +13,6 @@
# This must match PAGE_OFFSET in include/asm-ppc/page.h.
KERNELLOAD
:=
$(CONFIG_KERNEL_START)
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-powerpc
LDFLAGS_vmlinux
:=
-Ttext
$(KERNELLOAD)
-Bstatic
CPPFLAGS
+=
-Iarch
/
$(ARCH)
AFLAGS
+=
-Iarch
/
$(ARCH)
...
...
arch/ppc64/Makefile
View file @
5ade138f
...
...
@@ -17,7 +17,6 @@ KERNELLOAD := 0xc000000000000000
LDFLAGS
:=
-m
elf64ppc
LDFLAGS_vmlinux
:=
-Bstatic
-e
$(KERNELLOAD)
-Ttext
$(KERNELLOAD)
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf64-powerpc
CFLAGS
+=
-msoft-float
-pipe
-Wno-uninitialized
-mminimal-toc
\
-mtraceback
=
full
-mcpu
=
power4
...
...
arch/s390/Makefile
View file @
5ade138f
...
...
@@ -17,7 +17,6 @@ check_gcc = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null > /dev
ifdef
CONFIG_ARCH_S390_31
LDFLAGS
:=
-m
elf_s390
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-s390
CFLAGS
+=
-m31
AFLAGS
+=
-m31
UTS_MACHINE
:=
s390
...
...
@@ -26,7 +25,6 @@ endif
ifdef
CONFIG_ARCH_S390X
LDFLAGS
:=
-m
elf64_s390
MODFLAGS
+=
-fpic
-D__PIC__
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf64-s390
CFLAGS
+=
-m64
AFLAGS
+=
-m64
UTS_MACHINE
:=
s390x
...
...
arch/sh/Makefile
View file @
5ade138f
...
...
@@ -50,10 +50,8 @@ LDFLAGS_vmlinux += -e _stext
ifdef
CONFIG_CPU_LITTLE_ENDIAN
LDFLAGS_vmlinux
+=
--defsym
'jiffies=jiffies_64'
-EL
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-sh-linux
else
LDFLAGS_vmlinux
+=
--defsym
'jiffies=jiffies_64+4'
-EB
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-shbig-linux
endif
CFLAGS
+=
-pipe
$
(
cpu-y
)
...
...
arch/sparc/Makefile
View file @
5ade138f
...
...
@@ -23,8 +23,6 @@ AS := $(AS) -32
LDFLAGS
:=
-m
elf32_sparc
endif
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-sparc
#CFLAGS := $(CFLAGS) -g -pipe -fcall-used-g5 -fcall-used-g7
ifneq
($(IS_EGCS),y)
CFLAGS
:=
$(CFLAGS)
-pipe
-mno-fpu
-fcall-used-g5
-fcall-used-g7
...
...
arch/sparc64/Makefile
View file @
5ade138f
...
...
@@ -32,7 +32,6 @@ RANLIB = sparc64-linux-ranlib
else
AS
:=
$(AS)
-64
LDFLAGS
:=
-m
elf64_sparc
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf64-sparc
endif
ifneq
($(UNDECLARED_REGS),y)
...
...
arch/v850/Makefile
View file @
5ade138f
...
...
@@ -27,7 +27,6 @@ CFLAGS += -D__linux__ -DUTS_SYSNAME=\"uClinux\"
# some reason)
LDFLAGS_MODULE
+=
--unique
=
.gnu.linkonce.this_module
LDFLAGS_BLOB
:=
-b
binary
--oformat
elf32-little
OBJCOPY_FLAGS_BLOB
:=
-I
binary
-O
elf32-little
-B
v850e
...
...
arch/x86_64/Makefile
View file @
5ade138f
...
...
@@ -36,7 +36,6 @@ export IA32_CC IA32_LD IA32_AS IA32_OBJCOPY IA32_CPP
LDFLAGS
:=
-m
elf_x86_64
OBJCOPYFLAGS
:=
-O
binary
-R
.note
-R
.comment
-S
LDFLAGS_vmlinux
:=
-e
stext
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf64-x86-64
CFLAGS
+=
-mno-red-zone
CFLAGS
+=
-mcmodel
=
kernel
...
...
drivers/block/ll_rw_blk.c
View file @
5ade138f
...
...
@@ -1522,6 +1522,7 @@ void blk_requeue_request(request_queue_t *q, struct request *rq)
* @rq: request to be inserted
* @at_head: insert request at head or tail of queue
* @data: private data
* @reinsert: true if request it a reinsertion of previously processed one
*
* Description:
* Many block devices need to execute commands asynchronously, so they don't
...
...
@@ -1536,7 +1537,7 @@ void blk_requeue_request(request_queue_t *q, struct request *rq)
* host that is unable to accept a particular command.
*/
void
blk_insert_request
(
request_queue_t
*
q
,
struct
request
*
rq
,
int
at_head
,
void
*
data
)
int
at_head
,
void
*
data
,
int
reinsert
)
{
unsigned
long
flags
;
...
...
@@ -1554,11 +1555,15 @@ void blk_insert_request(request_queue_t *q, struct request *rq,
/*
* If command is tagged, release the tag
*/
if
(
reinsert
)
{
blk_requeue_request
(
q
,
rq
);
}
else
{
if
(
blk_rq_tagged
(
rq
))
blk_queue_end_tag
(
q
,
rq
);
drive_stat_acct
(
rq
,
rq
->
nr_sectors
,
1
);
__elv_add_request
(
q
,
rq
,
!
at_head
,
0
);
}
q
->
request_fn
(
q
);
spin_unlock_irqrestore
(
q
->
queue_lock
,
flags
);
}
...
...
drivers/ide/pci/via82cxxx.c
View file @
5ade138f
...
...
@@ -484,7 +484,7 @@ static unsigned int __init init_chipset_via82cxxx(struct pci_dev *dev, const cha
for
(
i
=
24
;
i
>=
0
;
i
-=
8
)
if
(((
u
>>
i
)
&
0x10
)
||
(((
u
>>
i
)
&
0x20
)
&&
(((
u
>>
i
)
&
7
)
<
8
)))
{
(((
u
>>
i
)
&
7
)
<
6
)))
{
/* BIOS 80-wire bit or
* UDMA w/ < 60ns/cycle
*/
...
...
drivers/net/sk_mca.c
View file @
5ade138f
...
...
@@ -1155,6 +1155,7 @@ int __init skmca_probe(struct SKMCA_NETDEV *dev)
priv
->
cmdaddr
=
base
+
0x3ff3
;
priv
->
medium
=
medium
;
memset
(
&
(
priv
->
stat
),
0
,
sizeof
(
struct
net_device_stats
));
spin_lock_init
(
&
priv
->
lock
);
/* set base + irq for this device (irq not allocated so far) */
dev
->
irq
=
0
;
...
...
drivers/scsi/scsi_lib.c
View file @
5ade138f
...
...
@@ -69,7 +69,7 @@ int scsi_insert_special_req(struct scsi_request *sreq, int at_head)
*/
sreq
->
sr_request
->
flags
&=
~
REQ_DONTPREP
;
blk_insert_request
(
sreq
->
sr_device
->
request_queue
,
sreq
->
sr_request
,
at_head
,
sreq
);
at_head
,
sreq
,
0
);
return
0
;
}
...
...
@@ -147,7 +147,7 @@ int scsi_queue_insert(struct scsi_cmnd *cmd, int reason)
* function. The SCSI request function detects the blocked condition
* and plugs the queue appropriately.
*/
blk_insert_request
(
device
->
request_queue
,
cmd
->
request
,
1
,
cmd
);
blk_insert_request
(
device
->
request_queue
,
cmd
->
request
,
1
,
cmd
,
1
);
return
0
;
}
...
...
@@ -445,7 +445,7 @@ static void scsi_run_queue(struct request_queue *q)
static
void
scsi_requeue_command
(
struct
request_queue
*
q
,
struct
scsi_cmnd
*
cmd
)
{
cmd
->
request
->
flags
&=
~
REQ_DONTPREP
;
blk_insert_request
(
q
,
cmd
->
request
,
1
,
cmd
);
blk_insert_request
(
q
,
cmd
->
request
,
1
,
cmd
,
1
);
scsi_run_queue
(
q
);
}
...
...
fs/devpts/Makefile
View file @
5ade138f
...
...
@@ -4,12 +4,6 @@
obj-$(CONFIG_DEVPTS_FS)
+=
devpts.o
devpts-objs
:=
inode.o
ifeq
($(CONFIG_DEVPTS_FS_XATTR),y)
devpts-objs
+=
xattr.o
endif
ifeq
($(CONFIG_DEVPTS_FS_SECURITY),y)
devpts-objs
+=
xattr_security.o
endif
devpts-y
:=
inode.o
devpts-$(CONFIG_DEVPTS_FS_XATTR)
+=
xattr.o
devpts-$(CONFIG_DEVPTS_FS_SECURITY)
+=
xattr_security.o
fs/ext2/Makefile
View file @
5ade138f
...
...
@@ -4,17 +4,9 @@
obj-$(CONFIG_EXT2_FS)
+=
ext2.o
ext2-
objs
:=
balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o
\
ext2-
y
:=
balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o
\
ioctl.o namei.o super.o symlink.o
ifeq
($(CONFIG_EXT2_FS_XATTR),y)
ext2-objs
+=
xattr.o xattr_user.o xattr_trusted.o
endif
ifeq
($(CONFIG_EXT2_FS_POSIX_ACL),y)
ext2-objs
+=
acl.o
endif
ifeq
($(CONFIG_EXT2_FS_SECURITY),y)
ext2-objs
+=
xattr_security.o
endif
ext2-$(CONFIG_EXT2_FS_XATTR)
+=
xattr.o xattr_user.o xattr_trusted.o
ext2-$(CONFIG_EXT2_FS_POSIX_ACL)
+=
acl.o
ext2-$(CONFIG_EXT2_FS_SECURITY)
+=
xattr_security.o
fs/ext3/Makefile
View file @
5ade138f
...
...
@@ -4,17 +4,9 @@
obj-$(CONFIG_EXT3_FS)
+=
ext3.o
ext3-
objs
:=
balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o
\
ext3-
y
:=
balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o
\
ioctl.o namei.o super.o symlink.o hash.o
ifeq
($(CONFIG_EXT3_FS_XATTR),y)
ext3-objs
+=
xattr.o xattr_user.o xattr_trusted.o
endif
ifeq
($(CONFIG_EXT3_FS_POSIX_ACL),y)
ext3-objs
+=
acl.o
endif
ifeq
($(CONFIG_EXT3_FS_SECURITY),y)
ext3-objs
+=
xattr_security.o
endif
ext3-$(CONFIG_EXT3_FS_XATTR)
+=
xattr.o xattr_user.o xattr_trusted.o
ext3-$(CONFIG_EXT3_FS_POSIX_ACL)
+=
acl.o
ext3-$(CONFIG_EXT3_FS_SECURITY)
+=
xattr_security.o
fs/fat/cache.c
View file @
5ade138f
...
...
@@ -232,6 +232,8 @@ void fat_cache_add(struct inode *inode, int f_clu, int d_clu)
struct
fat_cache
*
walk
,
*
last
;
int
first
,
prev_f_clu
,
prev_d_clu
;
if
(
f_clu
==
0
)
return
;
first
=
MSDOS_I
(
inode
)
->
i_start
;
if
(
!
first
)
return
;
...
...
@@ -287,31 +289,65 @@ void fat_cache_add(struct inode *inode, int f_clu, int d_clu)
spin_unlock
(
&
sbi
->
cache_lock
);
}
static
int
fat_get_cluster
(
struct
inode
*
inode
,
int
cluster
)
int
fat_get_cluster
(
struct
inode
*
inode
,
int
cluster
,
int
*
fclus
,
int
*
dclus
)
{
struct
super_block
*
sb
=
inode
->
i_sb
;
int
nr
,
count
;
if
(
!
(
nr
=
MSDOS_I
(
inode
)
->
i_start
))
return
0
;
if
(
!
cluster
)
return
nr
;
count
=
0
;
for
(
fat_cache_lookup
(
inode
,
cluster
,
&
count
,
&
nr
);
count
<
cluster
;
count
++
)
{
nr
=
fat_access
(
sb
,
nr
,
-
1
);
if
(
nr
==
FAT_ENT_EOF
)
{
fat_fs_panic
(
sb
,
"%s: request beyond EOF (ino %lu)"
,
__FUNCTION__
,
inode
->
i_ino
);
return
-
EIO
;
}
else
if
(
nr
==
FAT_ENT_FREE
)
{
fat_fs_panic
(
sb
,
"%s: invalid cluster chain (ino %lu)"
,
__FUNCTION__
,
inode
->
i_ino
);
const
int
limit
=
sb
->
s_maxbytes
>>
MSDOS_SB
(
sb
)
->
cluster_bits
;
int
nr
;
BUG_ON
(
MSDOS_I
(
inode
)
->
i_start
==
0
);
*
fclus
=
0
;
*
dclus
=
MSDOS_I
(
inode
)
->
i_start
;
if
(
cluster
==
0
)
return
0
;
fat_cache_lookup
(
inode
,
cluster
,
fclus
,
dclus
);
while
(
*
fclus
<
cluster
)
{
/* prevent the infinite loop of cluster chain */
if
(
*
fclus
>
limit
)
{
fat_fs_panic
(
sb
,
"%s: detected the cluster chain loop"
" (i_pos %llu)"
,
__FUNCTION__
,
MSDOS_I
(
inode
)
->
i_pos
);
return
-
EIO
;
}
else
if
(
nr
<
0
)
return
nr
;
}
fat_cache_add
(
inode
,
cluster
,
nr
);
nr
=
fat_access
(
sb
,
*
dclus
,
-
1
);
if
(
nr
<
0
)
return
nr
;
else
if
(
nr
==
FAT_ENT_FREE
)
{
fat_fs_panic
(
sb
,
"%s: invalid cluster chain"
" (i_pos %llu)"
,
__FUNCTION__
,
MSDOS_I
(
inode
)
->
i_pos
);
return
-
EIO
;
}
else
if
(
nr
==
FAT_ENT_EOF
)
{
fat_cache_add
(
inode
,
*
fclus
,
*
dclus
);
return
FAT_ENT_EOF
;
}
(
*
fclus
)
++
;
*
dclus
=
nr
;
}
fat_cache_add
(
inode
,
*
fclus
,
*
dclus
);
return
0
;
}
static
int
fat_bmap_cluster
(
struct
inode
*
inode
,
int
cluster
)
{
struct
super_block
*
sb
=
inode
->
i_sb
;
int
ret
,
fclus
,
dclus
;
if
(
MSDOS_I
(
inode
)
->
i_start
==
0
)
return
0
;
ret
=
fat_get_cluster
(
inode
,
cluster
,
&
fclus
,
&
dclus
);
if
(
ret
<
0
)
return
ret
;
else
if
(
ret
==
FAT_ENT_EOF
)
{
fat_fs_panic
(
sb
,
"%s: request beyond EOF (i_pos %llu)"
,
__FUNCTION__
,
MSDOS_I
(
inode
)
->
i_pos
);
return
-
EIO
;
}
return
dclus
;
}
int
fat_bmap
(
struct
inode
*
inode
,
sector_t
sector
,
sector_t
*
phys
)
...
...
@@ -335,52 +371,58 @@ int fat_bmap(struct inode *inode, sector_t sector, sector_t *phys)
return
0
;
cluster
=
sector
>>
(
sbi
->
cluster_bits
-
sb
->
s_blocksize_bits
);
offset
=
sector
&
(
sbi
->
cluster_size
-
1
);
cluster
=
fat_
get
_cluster
(
inode
,
cluster
);
offset
=
sector
&
(
sbi
->
sec_per_clus
-
1
);
cluster
=
fat_
bmap
_cluster
(
inode
,
cluster
);
if
(
cluster
<
0
)
return
cluster
;
else
if
(
cluster
)
{
*
phys
=
((
sector_t
)
cluster
-
2
)
*
sbi
->
cluster_size
*
phys
=
((
sector_t
)
cluster
-
2
)
*
sbi
->
sec_per_clus
+
sbi
->
data_start
+
offset
;
}
return
0
;
}
/* Free all clusters after the skip'th cluster. Doesn't use the cache,
because this way we get an additional sanity check. */
int
fat_free
(
struct
inode
*
inode
,
int
skip
)
/* Free all clusters after the skip'th cluster. */
int
fat_free
(
struct
inode
*
inode
,
int
skip
)
{
struct
super_block
*
sb
=
inode
->
i_sb
;
int
nr
,
last
;
int
nr
,
ret
,
fclus
,
dclus
;
if
(
MSDOS_I
(
inode
)
->
i_start
==
0
)
return
0
;
if
(
skip
)
{
ret
=
fat_get_cluster
(
inode
,
skip
-
1
,
&
fclus
,
&
dclus
);
if
(
ret
<
0
)
return
ret
;
else
if
(
ret
==
FAT_ENT_EOF
)
return
0
;
if
(
!
(
nr
=
MSDOS_I
(
inode
)
->
i_start
))
return
0
;
last
=
0
;
while
(
skip
--
)
{
last
=
nr
;
nr
=
fat_access
(
sb
,
nr
,
-
1
);
nr
=
fat_access
(
sb
,
dclus
,
-
1
);
if
(
nr
==
FAT_ENT_EOF
)
return
0
;
else
if
(
nr
==
FAT_ENT_FREE
)
{
fat_fs_panic
(
sb
,
"%s: invalid cluster chain (ino %lu)"
,
__FUNCTION__
,
inode
->
i_ino
);
return
-
EIO
;
}
else
if
(
nr
<
0
)
return
nr
;
else
if
(
nr
>
0
)
{
/*
* write a new EOF, and get the remaining cluster
* chain for freeing.
*/
nr
=
fat_access
(
sb
,
dclus
,
FAT_ENT_EOF
)
;
}
if
(
last
)
{
fat_access
(
sb
,
last
,
FAT_ENT_EOF
);
if
(
nr
<
0
)
return
nr
;
fat_cache_inval_inode
(
inode
);
}
else
{
fat_cache_inval_inode
(
inode
);
nr
=
MSDOS_I
(
inode
)
->
i_start
;
MSDOS_I
(
inode
)
->
i_start
=
0
;
MSDOS_I
(
inode
)
->
i_logstart
=
0
;
mark_inode_dirty
(
inode
);
}
lock_fat
(
sb
);
while
(
nr
!=
FAT_ENT_EOF
)
{
do
{
nr
=
fat_access
(
sb
,
nr
,
FAT_ENT_FREE
);
if
(
nr
<
0
)
goto
error
;
...
...
@@ -392,8 +434,8 @@ int fat_free(struct inode *inode,int skip)
}
if
(
MSDOS_SB
(
sb
)
->
free_clusters
!=
-
1
)
MSDOS_SB
(
sb
)
->
free_clusters
++
;
inode
->
i_blocks
-=
(
1
<<
MSDOS_SB
(
sb
)
->
cluster_bits
)
>>
9
;
}
inode
->
i_blocks
-=
MSDOS_SB
(
sb
)
->
cluster_size
>>
9
;
}
while
(
nr
!=
FAT_ENT_EOF
);
fat_clusters_flush
(
sb
);
nr
=
0
;
error:
...
...
fs/fat/dir.c
View file @
5ade138f
...
...
@@ -152,7 +152,7 @@ fat_strnicmp(struct nls_table *t, const unsigned char *s1,
}
static
inline
int
fat_shortname2uni
(
struct
nls_table
*
nls
,
char
*
buf
,
int
buf_size
,
fat_shortname2uni
(
struct
nls_table
*
nls
,
unsigned
char
*
buf
,
int
buf_size
,
wchar_t
*
uni_buf
,
unsigned
short
opt
,
int
lower
)
{
int
len
=
0
;
...
...
@@ -176,8 +176,8 @@ fat_shortname2uni(struct nls_table *nls, char *buf, int buf_size,
* Return values: negative -> error, 0 -> not found, positive -> found,
* value is the total amount of slots, including the shortname entry.
*/
int
fat_search_long
(
struct
inode
*
inode
,
const
char
*
name
,
int
name_len
,
int
anycase
,
loff_t
*
spos
,
loff_t
*
lpos
)
int
fat_search_long
(
struct
inode
*
inode
,
const
unsigned
char
*
name
,
int
name_len
,
int
anycase
,
loff_t
*
spos
,
loff_t
*
lpos
)
{
struct
super_block
*
sb
=
inode
->
i_sb
;
struct
buffer_head
*
bh
=
NULL
;
...
...
@@ -187,7 +187,7 @@ int fat_search_long(struct inode *inode, const char *name, int name_len,
wchar_t
bufuname
[
14
];
unsigned
char
xlate_len
,
long_slots
;
wchar_t
*
unicode
=
NULL
;
char
work
[
8
],
bufname
[
260
];
/* 256 + 4 */
unsigned
char
work
[
8
],
bufname
[
260
];
/* 256 + 4 */
int
uni_xlate
=
MSDOS_SB
(
sb
)
->
options
.
unicode_xlate
;
int
utf8
=
MSDOS_SB
(
sb
)
->
options
.
utf8
;
unsigned
short
opt_shortname
=
MSDOS_SB
(
sb
)
->
options
.
shortname
;
...
...
@@ -199,7 +199,7 @@ int fat_search_long(struct inode *inode, const char *name, int name_len,
goto
EODir
;
parse_record:
long_slots
=
0
;
if
(
de
->
name
[
0
]
==
(
__s8
)
DELETED_FLAG
)
if
(
de
->
name
[
0
]
==
DELETED_FLAG
)
continue
;
if
(
de
->
attr
!=
ATTR_EXT
&&
(
de
->
attr
&
ATTR_VOLUME
))
continue
;
...
...
@@ -258,7 +258,7 @@ int fat_search_long(struct inode *inode, const char *name, int name_len,
if
(
ds
->
alias_checksum
!=
alias_checksum
)
goto
parse_long
;
}
if
(
de
->
name
[
0
]
==
(
__s8
)
DELETED_FLAG
)
if
(
de
->
name
[
0
]
==
DELETED_FLAG
)
continue
;
if
(
de
->
attr
==
ATTR_EXT
)
goto
parse_long
;
...
...
@@ -351,7 +351,7 @@ static int fat_readdirx(struct inode *inode, struct file *filp, void *dirent,
wchar_t
bufuname
[
14
];
unsigned
char
long_slots
;
wchar_t
*
unicode
=
NULL
;
char
c
,
work
[
8
],
bufname
[
56
],
*
ptname
=
bufname
;
unsigned
char
c
,
work
[
8
],
bufname
[
56
],
*
ptname
=
bufname
;
unsigned
long
lpos
,
dummy
,
*
furrfu
=
&
lpos
;
int
uni_xlate
=
MSDOS_SB
(
sb
)
->
options
.
unicode_xlate
;
int
isvfat
=
MSDOS_SB
(
sb
)
->
options
.
isvfat
;
...
...
@@ -392,7 +392,7 @@ static int fat_readdirx(struct inode *inode, struct file *filp, void *dirent,
goto
EODir
;
/* Check for long filename entry */
if
(
isvfat
)
{
if
(
de
->
name
[
0
]
==
(
__s8
)
DELETED_FLAG
)
if
(
de
->
name
[
0
]
==
DELETED_FLAG
)
goto
RecEnd
;
if
(
de
->
attr
!=
ATTR_EXT
&&
(
de
->
attr
&
ATTR_VOLUME
))
goto
RecEnd
;
...
...
@@ -458,7 +458,7 @@ static int fat_readdirx(struct inode *inode, struct file *filp, void *dirent,
if
(
ds
->
alias_checksum
!=
alias_checksum
)
goto
ParseLong
;
}
if
(
de
->
name
[
0
]
==
(
__s8
)
DELETED_FLAG
)
if
(
de
->
name
[
0
]
==
DELETED_FLAG
)
goto
RecEnd
;
if
(
de
->
attr
==
ATTR_EXT
)
goto
ParseLong
;
...
...
@@ -555,7 +555,7 @@ static int fat_readdirx(struct inode *inode, struct file *filp, void *dirent,
(
de
->
attr
&
ATTR_DIR
)
?
DT_DIR
:
DT_REG
)
<
0
)
goto
FillFailed
;
}
else
{
char
longname
[
275
];
unsigned
char
longname
[
275
];
int
long_len
=
utf8
?
utf8_wcstombs
(
longname
,
unicode
,
sizeof
(
longname
))
:
uni16_to_x8
(
longname
,
unicode
,
uni_xlate
,
...
...
@@ -647,21 +647,9 @@ int fat_dir_ioctl(struct inode * inode, struct file * filp,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
fat_ioctl_filldir_callback
buf
;
struct
dirent
__user
*
d1
=
(
struct
dirent
*
)
arg
;
struct
dirent
__user
*
d1
;
int
ret
,
shortname
,
both
;
if
(
!
access_ok
(
VERIFY_WRITE
,
d1
,
sizeof
(
struct
dirent
[
2
])))
return
-
EFAULT
;
/*
* Yes, we don't need this put_user() absolutely. However old
* code didn't return the right value. So, app use this value,
* in order to check whether it is EOF.
*/
if
(
put_user
(
0
,
&
d1
->
d_reclen
))
return
-
EFAULT
;
buf
.
dirent
=
d1
;
buf
.
result
=
0
;
switch
(
cmd
)
{
case
VFAT_IOCTL_READDIR_SHORT
:
shortname
=
1
;
...
...
@@ -674,8 +662,27 @@ int fat_dir_ioctl(struct inode * inode, struct file * filp,
default:
return
-
EINVAL
;
}
d1
=
(
struct
dirent
*
)
arg
;
if
(
!
access_ok
(
VERIFY_WRITE
,
d1
,
sizeof
(
struct
dirent
[
2
])))
return
-
EFAULT
;
/*
* Yes, we don't need this put_user() absolutely. However old
* code didn't return the right value. So, app use this value,
* in order to check whether it is EOF.
*/
if
(
put_user
(
0
,
&
d1
->
d_reclen
))
return
-
EFAULT
;
buf
.
dirent
=
d1
;
buf
.
result
=
0
;
down
(
&
inode
->
i_sem
);
ret
=
-
ENOENT
;
if
(
!
IS_DEADDIR
(
inode
))
{
ret
=
fat_readdirx
(
inode
,
filp
,
&
buf
,
fat_ioctl_filldir
,
shortname
,
both
);
}
up
(
&
inode
->
i_sem
);
if
(
ret
>=
0
)
ret
=
buf
.
result
;
return
ret
;
...
...
fs/fat/file.c
View file @
5ade138f
...
...
@@ -48,7 +48,7 @@ int fat_get_block(struct inode *inode, sector_t iblock,
BUG
();
return
-
EIO
;
}
if
(
!
((
unsigned
long
)
iblock
%
MSDOS_SB
(
sb
)
->
cluster_size
))
{
if
(
!
((
unsigned
long
)
iblock
%
MSDOS_SB
(
sb
)
->
sec_per_clus
))
{
int
error
;
error
=
fat_add_cluster
(
inode
);
...
...
@@ -84,14 +84,15 @@ static ssize_t fat_file_write(struct file *filp, const char *buf, size_t count,
void
fat_truncate
(
struct
inode
*
inode
)
{
struct
msdos_sb_info
*
sbi
=
MSDOS_SB
(
inode
->
i_sb
);
int
cluster
;
const
unsigned
int
cluster_size
=
sbi
->
cluster_size
;
int
nr_clusters
;
/* Why no return value? Surely the disk could fail... */
if
(
IS_RDONLY
(
inode
))
return
/* -EPERM */
;
if
(
IS_IMMUTABLE
(
inode
))
return
/* -EPERM */
;
cluster
=
1
<<
sbi
->
cluster_bits
;
/*
* This protects against truncating a file bigger than it was then
* trying to write into the hole.
...
...
@@ -99,8 +100,10 @@ void fat_truncate(struct inode *inode)
if
(
MSDOS_I
(
inode
)
->
mmu_private
>
inode
->
i_size
)
MSDOS_I
(
inode
)
->
mmu_private
=
inode
->
i_size
;
nr_clusters
=
(
inode
->
i_size
+
(
cluster_size
-
1
))
>>
sbi
->
cluster_bits
;
lock_kernel
();
fat_free
(
inode
,
(
inode
->
i_size
+
(
cluster
-
1
))
>>
sbi
->
cluster_bit
s
);
fat_free
(
inode
,
nr_cluster
s
);
MSDOS_I
(
inode
)
->
i_attrs
|=
ATTR_ARCH
;
unlock_kernel
();
inode
->
i_ctime
=
inode
->
i_mtime
=
CURRENT_TIME
;
...
...
fs/fat/inode.c
View file @
5ade138f
...
...
@@ -159,7 +159,9 @@ void fat_put_super(struct super_block *sb)
{
struct
msdos_sb_info
*
sbi
=
MSDOS_SB
(
sb
);
if
(
!
(
sb
->
s_flags
&
MS_RDONLY
))
fat_clusters_flush
(
sb
);
if
(
sbi
->
nls_disk
)
{
unload_nls
(
sbi
->
nls_disk
);
sbi
->
nls_disk
=
NULL
;
...
...
@@ -463,32 +465,17 @@ static int parse_options(char *options, int is_vfat, int *debug,
static
int
fat_calc_dir_size
(
struct
inode
*
inode
)
{
struct
super_block
*
sb
=
inode
->
i_sb
;
int
nr
;
struct
msdos_sb_info
*
sbi
=
MSDOS_SB
(
inode
->
i_sb
)
;
int
ret
,
fclus
,
dclus
;
inode
->
i_size
=
0
;
if
(
MSDOS_I
(
inode
)
->
i_start
==
0
)
return
0
;
nr
=
MSDOS_I
(
inode
)
->
i_start
;
do
{
inode
->
i_size
+=
1
<<
MSDOS_SB
(
sb
)
->
cluster_bits
;
nr
=
fat_access
(
sb
,
nr
,
-
1
);
if
(
nr
<
0
)
return
nr
;
else
if
(
nr
==
FAT_ENT_FREE
)
{
fat_fs_panic
(
sb
,
"Directory %lu: invalid cluster chain"
,
inode
->
i_ino
);
return
-
EIO
;
}
if
(
inode
->
i_size
>
FAT_MAX_DIR_SIZE
)
{
fat_fs_panic
(
sb
,
"Directory %lu: "
"exceeded the maximum size of directory"
,
inode
->
i_ino
);
inode
->
i_size
=
FAT_MAX_DIR_SIZE
;
break
;
}
}
while
(
nr
!=
FAT_ENT_EOF
);
ret
=
fat_get_cluster
(
inode
,
FAT_ENT_EOF
,
&
fclus
,
&
dclus
);
if
(
ret
<
0
)
return
ret
;
inode
->
i_size
=
(
fclus
+
1
)
<<
sbi
->
cluster_bits
;
return
0
;
}
...
...
@@ -499,6 +486,7 @@ static int fat_read_root(struct inode *inode)
struct
msdos_sb_info
*
sbi
=
MSDOS_SB
(
sb
);
int
error
;
MSDOS_I
(
inode
)
->
file_cluster
=
MSDOS_I
(
inode
)
->
disk_cluster
=
0
;
MSDOS_I
(
inode
)
->
i_pos
=
0
;
inode
->
i_uid
=
sbi
->
options
.
fs_uid
;
inode
->
i_gid
=
sbi
->
options
.
fs_gid
;
...
...
@@ -516,9 +504,9 @@ static int fat_read_root(struct inode *inode)
MSDOS_I
(
inode
)
->
i_start
=
0
;
inode
->
i_size
=
sbi
->
dir_entries
*
sizeof
(
struct
msdos_dir_entry
);
}
inode
->
i_blksize
=
1
<<
sbi
->
cluster_bits
;
inode
->
i_blocks
=
((
inode
->
i_size
+
inode
->
i_blksize
-
1
)
&
~
((
loff_t
)
inode
->
i_blk
size
-
1
))
>>
9
;
inode
->
i_blksize
=
sbi
->
cluster_size
;
inode
->
i_blocks
=
((
inode
->
i_size
+
(
sbi
->
cluster_size
-
1
)
)
&
~
((
loff_t
)
sbi
->
cluster_
size
-
1
))
>>
9
;
MSDOS_I
(
inode
)
->
i_logstart
=
0
;
MSDOS_I
(
inode
)
->
mmu_private
=
inode
->
i_size
;
...
...
@@ -746,7 +734,7 @@ int fat_fill_super(struct super_block *sb, void *data, int silent,
struct
msdos_sb_info
*
sbi
;
int
logical_sector_size
,
fat_clusters
,
debug
,
cp
,
first
;
unsigned
int
total_sectors
,
rootdir_sectors
;
unsigned
char
media
;
unsigned
int
media
;
long
error
;
char
buf
[
50
];
...
...
@@ -822,12 +810,12 @@ int fat_fill_super(struct super_block *sb, void *data, int silent,
brelse
(
bh
);
goto
out_invalid
;
}
sbi
->
cluster_size
=
b
->
cluster_size
;
if
(
!
sbi
->
cluster_size
||
(
sbi
->
cluster_size
&
(
sbi
->
cluster_size
-
1
)))
{
sbi
->
sec_per_clus
=
b
->
sec_per_clus
;
if
(
!
sbi
->
sec_per_clus
||
(
sbi
->
sec_per_clus
&
(
sbi
->
sec_per_clus
-
1
)))
{
if
(
!
silent
)
printk
(
KERN_ERR
"FAT: bogus
cluster size
%d
\n
"
,
sbi
->
cluster_size
);
printk
(
KERN_ERR
"FAT: bogus
sectors per cluster
%d
\n
"
,
sbi
->
sec_per_clus
);
brelse
(
bh
);
goto
out_invalid
;
}
...
...
@@ -856,7 +844,8 @@ int fat_fill_super(struct super_block *sb, void *data, int silent,
b
=
(
struct
fat_boot_sector
*
)
bh
->
b_data
;
}
sbi
->
cluster_bits
=
ffs
(
sb
->
s_blocksize
*
sbi
->
cluster_size
)
-
1
;
sbi
->
cluster_size
=
sb
->
s_blocksize
*
sbi
->
sec_per_clus
;
sbi
->
cluster_bits
=
ffs
(
sbi
->
cluster_size
)
-
1
;
sbi
->
fats
=
b
->
fats
;
sbi
->
fat_bits
=
0
;
/* Don't know yet */
sbi
->
fat_start
=
CF_LE_W
(
b
->
reserved
);
...
...
@@ -924,7 +913,7 @@ int fat_fill_super(struct super_block *sb, void *data, int silent,
total_sectors
=
CF_LE_W
(
get_unaligned
((
unsigned
short
*
)
&
b
->
sectors
));
if
(
total_sectors
==
0
)
total_sectors
=
CF_LE_L
(
b
->
total_sect
);
sbi
->
clusters
=
(
total_sectors
-
sbi
->
data_start
)
/
sbi
->
cluster_size
;
sbi
->
clusters
=
(
total_sectors
-
sbi
->
data_start
)
/
sbi
->
sec_per_clus
;
if
(
sbi
->
fat_bits
!=
32
)
sbi
->
fat_bits
=
(
sbi
->
clusters
>
MSDOS_FAT12
)
?
16
:
12
;
...
...
@@ -1021,8 +1010,11 @@ int fat_fill_super(struct super_block *sb, void *data, int silent,
int
fat_statfs
(
struct
super_block
*
sb
,
struct
kstatfs
*
buf
)
{
int
free
,
nr
;
int
free
,
nr
;
if
(
MSDOS_SB
(
sb
)
->
free_clusters
!=
-
1
)
free
=
MSDOS_SB
(
sb
)
->
free_clusters
;
else
{
lock_fat
(
sb
);
if
(
MSDOS_SB
(
sb
)
->
free_clusters
!=
-
1
)
free
=
MSDOS_SB
(
sb
)
->
free_clusters
;
...
...
@@ -1034,9 +1026,10 @@ int fat_statfs(struct super_block *sb, struct kstatfs *buf)
MSDOS_SB
(
sb
)
->
free_clusters
=
free
;
}
unlock_fat
(
sb
);
}
buf
->
f_type
=
sb
->
s_magic
;
buf
->
f_bsize
=
1
<<
MSDOS_SB
(
sb
)
->
cluster_bits
;
buf
->
f_bsize
=
MSDOS_SB
(
sb
)
->
cluster_size
;
buf
->
f_blocks
=
MSDOS_SB
(
sb
)
->
clusters
;
buf
->
f_bfree
=
free
;
buf
->
f_bavail
=
free
;
...
...
@@ -1045,9 +1038,9 @@ int fat_statfs(struct super_block *sb, struct kstatfs *buf)
return
0
;
}
static
int
is_exec
(
char
*
extension
)
static
int
is_exec
(
unsigned
char
*
extension
)
{
char
*
exe_extensions
=
"EXECOMBAT"
,
*
walk
;
unsigned
char
*
exe_extensions
=
"EXECOMBAT"
,
*
walk
;
for
(
walk
=
exe_extensions
;
*
walk
;
walk
+=
3
)
if
(
!
strncmp
(
extension
,
walk
,
3
))
...
...
@@ -1149,9 +1142,9 @@ static int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de)
inode
->
i_flags
|=
S_IMMUTABLE
;
MSDOS_I
(
inode
)
->
i_attrs
=
de
->
attr
&
ATTR_UNUSED
;
/* this is as close to the truth as we can get ... */
inode
->
i_blksize
=
1
<<
sbi
->
cluster_bits
;
inode
->
i_blocks
=
((
inode
->
i_size
+
inode
->
i_blksize
-
1
)
&
~
((
loff_t
)
inode
->
i_blk
size
-
1
))
>>
9
;
inode
->
i_blksize
=
sbi
->
cluster_size
;
inode
->
i_blocks
=
((
inode
->
i_size
+
(
sbi
->
cluster_size
-
1
)
)
&
~
((
loff_t
)
sbi
->
cluster_
size
-
1
))
>>
9
;
inode
->
i_mtime
.
tv_sec
=
inode
->
i_atime
.
tv_sec
=
date_dos2unix
(
CF_LE_W
(
de
->
time
),
CF_LE_W
(
de
->
date
));
inode
->
i_mtime
.
tv_nsec
=
inode
->
i_atime
.
tv_nsec
=
0
;
...
...
fs/fat/misc.c
View file @
5ade138f
...
...
@@ -50,15 +50,14 @@ void unlock_fat(struct super_block *sb)
/* XXX: Need to write one per FSINFO block. Currently only writes 1 */
void
fat_clusters_flush
(
struct
super_block
*
sb
)
{
struct
msdos_sb_info
*
sbi
=
MSDOS_SB
(
sb
);
struct
buffer_head
*
bh
;
struct
fat_boot_fsinfo
*
fsinfo
;
if
(
MSDOS_SB
(
sb
)
->
fat_bits
!=
32
)
return
;
if
(
MSDOS_SB
(
sb
)
->
free_clusters
==
-
1
)
if
(
sbi
->
fat_bits
!=
32
)
return
;
bh
=
sb_bread
(
sb
,
MSDOS_SB
(
sb
)
->
fsinfo_sector
);
bh
=
sb_bread
(
sb
,
sbi
->
fsinfo_sector
);
if
(
bh
==
NULL
)
{
printk
(
KERN_ERR
"FAT bread failed in fat_clusters_flush
\n
"
);
return
;
...
...
@@ -71,10 +70,12 @@ void fat_clusters_flush(struct super_block *sb)
" Found signature1 0x%08x signature2 0x%08x"
" (sector = %lu)
\n
"
,
CF_LE_L
(
fsinfo
->
signature1
),
CF_LE_L
(
fsinfo
->
signature2
),
MSDOS_SB
(
sb
)
->
fsinfo_sector
);
sbi
->
fsinfo_sector
);
}
else
{
fsinfo
->
free_clusters
=
CF_LE_L
(
MSDOS_SB
(
sb
)
->
free_clusters
);
fsinfo
->
next_cluster
=
CF_LE_L
(
MSDOS_SB
(
sb
)
->
prev_free
);
if
(
sbi
->
free_clusters
!=
-
1
)
fsinfo
->
free_clusters
=
CF_LE_L
(
sbi
->
free_clusters
);
if
(
sbi
->
prev_free
)
fsinfo
->
next_cluster
=
CF_LE_L
(
sbi
->
prev_free
);
mark_buffer_dirty
(
bh
);
}
brelse
(
bh
);
...
...
@@ -87,41 +88,25 @@ void fat_clusters_flush(struct super_block *sb)
int
fat_add_cluster
(
struct
inode
*
inode
)
{
struct
super_block
*
sb
=
inode
->
i_sb
;
int
count
,
nr
,
limit
,
last
,
curr
,
file_cluster
;
int
count
,
limit
,
new_dclus
,
new_fclus
,
last
;
int
cluster_bits
=
MSDOS_SB
(
sb
)
->
cluster_bits
;
/*
* We must locate the last cluster of the file to add this new
* one (n
r
) to the end of the link list (the FAT).
* one (n
ew_dclus
) to the end of the link list (the FAT).
*
* In order to confirm that the cluster chain is valid, we
* find out EOF first.
*/
nr
=
-
EIO
;
last
=
file_cluster
=
0
;
if
((
curr
=
MSDOS_I
(
inode
)
->
i_start
)
!=
0
)
{
int
max_cluster
=
MSDOS_I
(
inode
)
->
mmu_private
>>
cluster_bits
;
fat_cache_lookup
(
inode
,
INT_MAX
,
&
last
,
&
curr
);
file_cluster
=
last
;
while
(
curr
&&
curr
!=
FAT_ENT_EOF
)
{
file_cluster
++
;
curr
=
fat_access
(
sb
,
last
=
curr
,
-
1
);
if
(
curr
<
0
)
return
curr
;
else
if
(
curr
==
FAT_ENT_FREE
)
{
fat_fs_panic
(
sb
,
"%s: invalid cluster chain"
" (ino %lu)"
,
__FUNCTION__
,
inode
->
i_ino
);
goto
out
;
}
if
(
file_cluster
>
max_cluster
)
{
fat_fs_panic
(
sb
,
"%s: bad cluster counts"
" (ino %lu)"
,
__FUNCTION__
,
inode
->
i_ino
);
goto
out
;
}
}
last
=
new_fclus
=
0
;
if
(
MSDOS_I
(
inode
)
->
i_start
)
{
int
ret
,
fclus
,
dclus
;
ret
=
fat_get_cluster
(
inode
,
FAT_ENT_EOF
,
&
fclus
,
&
dclus
);
if
(
ret
<
0
)
return
ret
;
new_fclus
=
fclus
+
1
;
last
=
dclus
;
}
/* find free FAT entry */
...
...
@@ -133,12 +118,12 @@ int fat_add_cluster(struct inode *inode)
}
limit
=
MSDOS_SB
(
sb
)
->
clusters
+
2
;
n
r
=
MSDOS_SB
(
sb
)
->
prev_free
+
1
;
for
(
count
=
0
;
count
<
MSDOS_SB
(
sb
)
->
clusters
;
count
++
,
n
r
++
)
{
n
r
=
nr
%
limit
;
if
(
n
r
<
2
)
n
r
=
2
;
if
(
fat_access
(
sb
,
n
r
,
-
1
)
==
FAT_ENT_FREE
)
n
ew_dclus
=
MSDOS_SB
(
sb
)
->
prev_free
+
1
;
for
(
count
=
0
;
count
<
MSDOS_SB
(
sb
)
->
clusters
;
count
++
,
n
ew_dclus
++
)
{
n
ew_dclus
=
new_dclus
%
limit
;
if
(
n
ew_dclus
<
2
)
n
ew_dclus
=
2
;
if
(
fat_access
(
sb
,
n
ew_dclus
,
-
1
)
==
FAT_ENT_FREE
)
break
;
}
if
(
count
>=
MSDOS_SB
(
sb
)
->
clusters
)
{
...
...
@@ -146,9 +131,9 @@ int fat_add_cluster(struct inode *inode)
unlock_fat
(
sb
);
return
-
ENOSPC
;
}
MSDOS_SB
(
sb
)
->
prev_free
=
n
r
;
MSDOS_SB
(
sb
)
->
prev_free
=
n
ew_dclus
;
fat_access
(
sb
,
n
r
,
FAT_ENT_EOF
);
fat_access
(
sb
,
n
ew_dclus
,
FAT_ENT_EOF
);
if
(
MSDOS_SB
(
sb
)
->
free_clusters
!=
-
1
)
MSDOS_SB
(
sb
)
->
free_clusters
--
;
fat_clusters_flush
(
sb
);
...
...
@@ -157,29 +142,28 @@ int fat_add_cluster(struct inode *inode)
/* add new one to the last of the cluster chain */
if
(
last
)
{
fat_access
(
sb
,
last
,
n
r
);
fat_cache_add
(
inode
,
file_cluster
,
nr
);
fat_access
(
sb
,
last
,
n
ew_dclus
);
fat_cache_add
(
inode
,
new_fclus
,
new_dclus
);
}
else
{
MSDOS_I
(
inode
)
->
i_start
=
n
r
;
MSDOS_I
(
inode
)
->
i_logstart
=
n
r
;
MSDOS_I
(
inode
)
->
i_start
=
n
ew_dclus
;
MSDOS_I
(
inode
)
->
i_logstart
=
n
ew_dclus
;
mark_inode_dirty
(
inode
);
}
if
(
file_cluster
!=
(
inode
->
i_blocks
>>
(
cluster_bits
-
9
)))
{
printk
(
KERN_ERR
"file_cluster badly computed!!! %d <> %ld
\n
"
,
file_cluster
,
inode
->
i_blocks
>>
(
cluster_bits
-
9
));
if
(
new_fclus
!=
(
inode
->
i_blocks
>>
(
cluster_bits
-
9
)))
{
fat_fs_panic
(
sb
,
"clusters badly computed (%d != %ld)
"
,
new_fclus
,
inode
->
i_blocks
>>
(
cluster_bits
-
9
));
fat_cache_inval_inode
(
inode
);
}
inode
->
i_blocks
+=
(
1
<<
cluster_bits
)
>>
9
;
inode
->
i_blocks
+=
MSDOS_SB
(
sb
)
->
cluster_size
>>
9
;
out:
return
nr
;
return
new_dclus
;
}
struct
buffer_head
*
fat_extend_dir
(
struct
inode
*
inode
)
{
struct
super_block
*
sb
=
inode
->
i_sb
;
struct
buffer_head
*
bh
,
*
res
=
NULL
;
int
nr
,
cluster_size
=
MSDOS_SB
(
sb
)
->
cluster_size
;
int
nr
,
sec_per_clus
=
MSDOS_SB
(
sb
)
->
sec_per_clus
;
sector_t
sector
,
last_sector
;
if
(
MSDOS_SB
(
sb
)
->
fat_bits
!=
32
)
{
...
...
@@ -191,8 +175,8 @@ struct buffer_head *fat_extend_dir(struct inode *inode)
if
(
nr
<
0
)
return
ERR_PTR
(
nr
);
sector
=
((
sector_t
)
nr
-
2
)
*
cluster_size
+
MSDOS_SB
(
sb
)
->
data_start
;
last_sector
=
sector
+
cluster_size
;
sector
=
((
sector_t
)
nr
-
2
)
*
sec_per_clus
+
MSDOS_SB
(
sb
)
->
data_start
;
last_sector
=
sector
+
sec_per_clus
;
for
(
;
sector
<
last_sector
;
sector
++
)
{
if
((
bh
=
sb_getblk
(
sb
,
sector
)))
{
memset
(
bh
->
b_data
,
0
,
sb
->
s_blocksize
);
...
...
@@ -211,8 +195,8 @@ struct buffer_head *fat_extend_dir(struct inode *inode)
inode
->
i_size
=
(
inode
->
i_size
+
sb
->
s_blocksize
)
&
~
(
sb
->
s_blocksize
-
1
);
}
inode
->
i_size
+=
1
<<
MSDOS_SB
(
sb
)
->
cluster_bits
;
MSDOS_I
(
inode
)
->
mmu_private
+=
1
<<
MSDOS_SB
(
sb
)
->
cluster_bits
;
inode
->
i_size
+=
MSDOS_SB
(
sb
)
->
cluster_size
;
MSDOS_I
(
inode
)
->
mmu_private
+=
MSDOS_SB
(
sb
)
->
cluster_size
;
return
res
;
}
...
...
@@ -325,230 +309,54 @@ int fat__get_entry(struct inode *dir, loff_t *pos,struct buffer_head **bh,
return
0
;
}
/*
* Now an ugly part: this set of directory scan routines works on clusters
* rather than on inodes and sectors. They are necessary to locate the '..'
* directory "inode". raw_scan_sector operates in four modes:
*
* name number ino action
* -------- -------- -------- -------------------------------------------------
* non-NULL - X Find an entry with that name
* NULL non-NULL non-NULL Find an entry whose data starts at *number
* NULL non-NULL NULL Count subdirectories in *number. (*)
* NULL NULL non-NULL Find an empty entry
*
* (*) The return code should be ignored. It DOES NOT indicate success or
* failure. *number has to be initialized to zero.
*
* - = not used, X = a value is returned unless NULL
*
* If res_bh is non-NULL, the buffer is not deallocated but returned to the
* caller on success. res_de is set accordingly.
*
* If cont is non-zero, raw_found continues with the entry after the one
* res_bh/res_de point to.
*/
#define RSS_NAME
/* search for name */
\
done = !strncmp(data[entry].name,name,MSDOS_NAME) && \
!(data[entry].attr & ATTR_VOLUME);
#define RSS_START
/* search for start cluster */
\
done = !IS_FREE(data[entry].name) \
&& ( \
( \
(sbi->fat_bits != 32) ? 0 : (CF_LE_W(data[entry].starthi) << 16) \
) \
| CF_LE_W(data[entry].start) \
) == *number;
#define RSS_FREE
/* search for free entry */
\
{ \
done = IS_FREE(data[entry].name); \
}
#define RSS_COUNT
/* count subdirectories */
\
{ \
done = 0; \
if (!IS_FREE(data[entry].name) && (data[entry].attr & ATTR_DIR)) \
(*number)++; \
}
static
int
raw_scan_sector
(
struct
super_block
*
sb
,
sector_t
sector
,
const
char
*
name
,
int
*
number
,
loff_t
*
i_pos
,
struct
buffer_head
**
res_bh
,
struct
msdos_dir_entry
**
res_de
)
{
struct
msdos_sb_info
*
sbi
=
MSDOS_SB
(
sb
);
struct
buffer_head
*
bh
;
struct
msdos_dir_entry
*
data
;
int
entry
,
start
,
done
;
if
(
!
(
bh
=
sb_bread
(
sb
,
sector
)))
return
-
EIO
;
data
=
(
struct
msdos_dir_entry
*
)
bh
->
b_data
;
for
(
entry
=
0
;
entry
<
sbi
->
dir_per_block
;
entry
++
)
{
/* RSS_COUNT: if (data[entry].name == name) done=true else done=false. */
if
(
name
)
{
RSS_NAME
}
else
{
if
(
!
i_pos
)
RSS_COUNT
else
{
if
(
number
)
RSS_START
else
RSS_FREE
}
}
if
(
done
)
{
if
(
i_pos
)
{
*
i_pos
=
((
loff_t
)
sector
<<
sbi
->
dir_per_block_bits
)
+
entry
;
}
start
=
CF_LE_W
(
data
[
entry
].
start
);
if
(
sbi
->
fat_bits
==
32
)
start
|=
(
CF_LE_W
(
data
[
entry
].
starthi
)
<<
16
);
if
(
!
res_bh
)
brelse
(
bh
);
else
{
*
res_bh
=
bh
;
*
res_de
=
&
data
[
entry
];
}
return
start
;
}
}
brelse
(
bh
);
return
-
ENOENT
;
}
/*
* raw_scan_root performs raw_scan_sector on the root directory until the
* requested entry is found or the end of the directory is reached.
*/
static
int
raw_scan_root
(
struct
super_block
*
sb
,
const
char
*
name
,
int
*
number
,
loff_t
*
i_pos
,
struct
buffer_head
**
res_bh
,
struct
msdos_dir_entry
**
res_de
)
{
int
count
,
cluster
;
for
(
count
=
0
;
count
<
MSDOS_SB
(
sb
)
->
dir_entries
/
MSDOS_SB
(
sb
)
->
dir_per_block
;
count
++
)
{
cluster
=
raw_scan_sector
(
sb
,
MSDOS_SB
(
sb
)
->
dir_start
+
count
,
name
,
number
,
i_pos
,
res_bh
,
res_de
);
if
(
cluster
>=
0
)
return
cluster
;
}
return
-
ENOENT
;
}
/*
* raw_scan_nonroot performs raw_scan_sector on a non-root directory until the
* requested entry is found or the end of the directory is reached.
*/
static
int
raw_scan_nonroot
(
struct
super_block
*
sb
,
int
start
,
const
char
*
name
,
int
*
number
,
loff_t
*
i_pos
,
struct
buffer_head
**
res_bh
,
struct
msdos_dir_entry
**
res_de
)
static
int
fat_get_short_entry
(
struct
inode
*
dir
,
loff_t
*
pos
,
struct
buffer_head
**
bh
,
struct
msdos_dir_entry
**
de
,
loff_t
*
i_pos
)
{
struct
msdos_sb_info
*
sbi
=
MSDOS_SB
(
sb
);
int
count
,
cluster
;
unsigned
long
dir_size
=
0
;
sector_t
sector
;
#ifdef DEBUG
printk
(
"raw_scan_nonroot: start=%d
\n
"
,
start
);
#endif
do
{
for
(
count
=
0
;
count
<
sbi
->
cluster_size
;
count
++
)
{
sector
=
((
sector_t
)
start
-
2
)
*
sbi
->
cluster_size
+
count
+
sbi
->
data_start
;
cluster
=
raw_scan_sector
(
sb
,
sector
,
name
,
number
,
i_pos
,
res_bh
,
res_de
);
if
(
cluster
>=
0
)
return
cluster
;
}
dir_size
+=
1
<<
sbi
->
cluster_bits
;
if
(
dir_size
>
FAT_MAX_DIR_SIZE
)
{
fat_fs_panic
(
sb
,
"Directory %d: "
"exceeded the maximum size of directory"
,
start
);
break
;
}
start
=
fat_access
(
sb
,
start
,
-
1
);
if
(
start
<
0
)
return
start
;
else
if
(
start
==
FAT_ENT_FREE
)
{
fat_fs_panic
(
sb
,
"%s: invalid cluster chain"
,
__FUNCTION__
);
break
;
while
(
fat_get_entry
(
dir
,
pos
,
bh
,
de
,
i_pos
)
>=
0
)
{
/* free entry or long name entry or volume label */
if
(
!
IS_FREE
((
*
de
)
->
name
)
&&
!
((
*
de
)
->
attr
&
ATTR_VOLUME
))
return
0
;
}
#ifdef DEBUG
printk
(
"next start: %d
\n
"
,
start
);
#endif
}
while
(
start
!=
FAT_ENT_EOF
);
return
-
ENOENT
;
}
/*
* raw_scan performs raw_scan_sector on any sector.
*
* NOTE: raw_scan must not be used on a directory that is is the process of
* being created.
*/
static
int
raw_scan
(
struct
super_block
*
sb
,
int
start
,
const
char
*
name
,
loff_t
*
i_pos
,
struct
buffer_head
**
res_bh
,
struct
msdos_dir_entry
**
res_de
)
{
if
(
start
)
return
raw_scan_nonroot
(
sb
,
start
,
name
,
NULL
,
i_pos
,
res_bh
,
res_de
);
else
return
raw_scan_root
(
sb
,
name
,
NULL
,
i_pos
,
res_bh
,
res_de
);
}
/*
* fat_subdirs counts the number of sub-directories of dir. It can be run
* on directories being created.
*/
int
fat_subdirs
(
struct
inode
*
dir
)
{
struct
msdos_sb_info
*
sbi
=
MSDOS_SB
(
dir
->
i_sb
);
int
number
;
struct
buffer_head
*
bh
;
struct
msdos_dir_entry
*
de
;
loff_t
cpos
,
i_pos
;
int
count
=
0
;
number
=
0
;
if
((
dir
->
i_ino
==
MSDOS_ROOT_INO
)
&&
(
sbi
->
fat_bits
!=
32
))
raw_scan_root
(
dir
->
i_sb
,
NULL
,
&
number
,
NULL
,
NULL
,
NULL
);
else
{
if
((
dir
->
i_ino
!=
MSDOS_ROOT_INO
)
&&
!
MSDOS_I
(
dir
)
->
i_start
)
return
0
;
/* in mkdir */
else
{
raw_scan_nonroot
(
dir
->
i_sb
,
MSDOS_I
(
dir
)
->
i_start
,
NULL
,
&
number
,
NULL
,
NULL
,
NULL
);
}
bh
=
NULL
;
cpos
=
0
;
while
(
fat_get_short_entry
(
dir
,
&
cpos
,
&
bh
,
&
de
,
&
i_pos
)
>=
0
)
{
if
(
de
->
attr
&
ATTR_DIR
)
count
++
;
}
return
number
;
brelse
(
bh
);
return
count
;
}
/*
* Scans a directory for a given file (name points to its formatted name)
or
*
for an empty directory slot (name is NULL).
Returns an error code or zero.
* Scans a directory for a given file (name points to its formatted name)
.
* Returns an error code or zero.
*/
int
fat_scan
(
struct
inode
*
dir
,
const
char
*
name
,
struct
buffer_head
**
res_bh
,
struct
msdos_dir_entry
**
res_de
,
loff_t
*
i_pos
)
int
fat_scan
(
struct
inode
*
dir
,
const
unsigned
char
*
name
,
struct
buffer_head
**
bh
,
struct
msdos_dir_entry
**
de
,
loff_t
*
i_pos
)
{
int
re
s
;
loff_t
cpo
s
;
res
=
raw_scan
(
dir
->
i_sb
,
MSDOS_I
(
dir
)
->
i_start
,
name
,
i_pos
,
res_bh
,
res_de
);
return
(
res
<
0
)
?
res
:
0
;
*
bh
=
NULL
;
cpos
=
0
;
while
(
fat_get_short_entry
(
dir
,
&
cpos
,
bh
,
de
,
i_pos
)
>=
0
)
{
if
(
!
strncmp
((
*
de
)
->
name
,
name
,
MSDOS_NAME
))
return
0
;
}
return
-
ENOENT
;
}
fs/jfs/Makefile
View file @
5ade138f
...
...
@@ -4,14 +4,12 @@
obj-$(CONFIG_JFS_FS)
+=
jfs.o
jfs-
objs
:=
super.o file.o inode.o namei.o jfs_mount.o jfs_umount.o
\
jfs-
y
:=
super.o file.o inode.o namei.o jfs_mount.o jfs_umount.o
\
jfs_xtree.o jfs_imap.o jfs_debug.o jfs_dmap.o
\
jfs_unicode.o jfs_dtree.o jfs_inode.o
\
jfs_extent.o symlink.o jfs_metapage.o
\
jfs_logmgr.o jfs_txnmgr.o jfs_uniupr.o resize.o xattr.o
ifeq
($(CONFIG_JFS_POSIX_ACL),y)
jfs-objs
+=
acl.o
endif
jfs-$(CONFIG_JFS_POSIX_ACL)
+=
acl.o
EXTRA_CFLAGS
+=
-D_JFS_4K
fs/msdos/namei.c
View file @
5ade138f
...
...
@@ -14,7 +14,7 @@
/* MS-DOS "device special files" */
static
const
char
*
reserved_names
[]
=
{
static
const
unsigned
char
*
reserved_names
[]
=
{
"CON "
,
"PRN "
,
"NUL "
,
"AUX "
,
"LPT1 "
,
"LPT2 "
,
"LPT3 "
,
"LPT4 "
,
"COM1 "
,
"COM2 "
,
"COM3 "
,
"COM4 "
,
...
...
@@ -22,22 +22,22 @@ static const char *reserved_names[] = {
};
/* Characters that are undesirable in an MS-DOS file name */
static
char
bad_chars
[]
=
"*?<>|
\"
"
;
static
char
bad_if_strict_pc
[]
=
"+=,; "
;
static
char
bad_if_strict_atari
[]
=
" "
;
/* GEMDOS is less restrictive */
static
unsigned
char
bad_chars
[]
=
"*?<>|
\"
"
;
static
unsigned
char
bad_if_strict_pc
[]
=
"+=,; "
;
static
unsigned
char
bad_if_strict_atari
[]
=
" "
;
/* GEMDOS is less restrictive */
#define bad_if_strict(opts) ((opts)->atari ? bad_if_strict_atari : bad_if_strict_pc)
/***** Formats an MS-DOS file name. Rejects invalid names. */
static
int
msdos_format_name
(
const
char
*
name
,
int
len
,
char
*
res
,
struct
fat_mount_options
*
opts
)
static
int
msdos_format_name
(
const
unsigned
char
*
name
,
int
len
,
unsigned
char
*
res
,
struct
fat_mount_options
*
opts
)
/* name is the proposed name, len is its length, res is
* the resulting name, opts->name_check is either (r)elaxed,
* (n)ormal or (s)trict, opts->dotsOK allows dots at the
* beginning of name (for hidden files)
*/
{
char
*
walk
;
const
char
**
reserved
;
unsigned
char
*
walk
;
const
unsigned
char
**
reserved
;
unsigned
char
c
;
int
space
;
...
...
@@ -112,13 +112,13 @@ static int msdos_format_name(const char *name,int len,
}
/***** Locates a directory entry. Uses unformatted name. */
static
int
msdos_find
(
struct
inode
*
dir
,
const
char
*
name
,
int
len
,
static
int
msdos_find
(
struct
inode
*
dir
,
const
unsigned
char
*
name
,
int
len
,
struct
buffer_head
**
bh
,
struct
msdos_dir_entry
**
de
,
loff_t
*
i_pos
)
{
int
res
;
unsigned
char
msdos_name
[
MSDOS_NAME
]
;
char
dotsOK
;
char
msdos_name
[
MSDOS_NAME
]
;
int
res
;
dotsOK
=
MSDOS_SB
(
dir
->
i_sb
)
->
options
.
dotsOK
;
res
=
msdos_format_name
(
name
,
len
,
msdos_name
,
&
MSDOS_SB
(
dir
->
i_sb
)
->
options
);
...
...
@@ -146,8 +146,8 @@ static int msdos_find(struct inode *dir, const char *name, int len,
static
int
msdos_hash
(
struct
dentry
*
dentry
,
struct
qstr
*
qstr
)
{
struct
fat_mount_options
*
options
=
&
(
MSDOS_SB
(
dentry
->
d_sb
)
->
options
);
unsigned
char
msdos_name
[
MSDOS_NAME
];
int
error
;
char
msdos_name
[
MSDOS_NAME
];
error
=
msdos_format_name
(
qstr
->
name
,
qstr
->
len
,
msdos_name
,
options
);
if
(
!
error
)
...
...
@@ -162,8 +162,8 @@ static int msdos_hash(struct dentry *dentry, struct qstr *qstr)
static
int
msdos_cmp
(
struct
dentry
*
dentry
,
struct
qstr
*
a
,
struct
qstr
*
b
)
{
struct
fat_mount_options
*
options
=
&
(
MSDOS_SB
(
dentry
->
d_sb
)
->
options
);
unsigned
char
a_msdos_name
[
MSDOS_NAME
],
b_msdos_name
[
MSDOS_NAME
];
int
error
;
char
a_msdos_name
[
MSDOS_NAME
],
b_msdos_name
[
MSDOS_NAME
];
error
=
msdos_format_name
(
a
->
name
,
a
->
len
,
a_msdos_name
,
options
);
if
(
error
)
...
...
@@ -228,7 +228,7 @@ struct dentry *msdos_lookup(struct inode *dir,struct dentry *dentry, struct name
}
/***** Creates a directory entry (name is already formatted). */
static
int
msdos_add_entry
(
struct
inode
*
dir
,
const
char
*
name
,
static
int
msdos_add_entry
(
struct
inode
*
dir
,
const
unsigned
char
*
name
,
struct
buffer_head
**
bh
,
struct
msdos_dir_entry
**
de
,
loff_t
*
i_pos
,
int
is_dir
,
int
is_hid
)
...
...
@@ -270,7 +270,7 @@ int msdos_create(struct inode *dir,struct dentry *dentry,int mode,
struct
inode
*
inode
;
loff_t
i_pos
;
int
res
,
is_hid
;
char
msdos_name
[
MSDOS_NAME
];
unsigned
char
msdos_name
[
MSDOS_NAME
];
lock_kernel
();
res
=
msdos_format_name
(
dentry
->
d_name
.
name
,
dentry
->
d_name
.
len
,
...
...
@@ -352,7 +352,7 @@ int msdos_mkdir(struct inode *dir,struct dentry *dentry,int mode)
struct
msdos_dir_entry
*
de
;
struct
inode
*
inode
;
int
res
,
is_hid
;
char
msdos_name
[
MSDOS_NAME
];
unsigned
char
msdos_name
[
MSDOS_NAME
];
loff_t
i_pos
;
lock_kernel
();
...
...
@@ -442,9 +442,9 @@ int msdos_unlink( struct inode *dir, struct dentry *dentry)
return
res
;
}
static
int
do_msdos_rename
(
struct
inode
*
old_dir
,
char
*
old_name
,
static
int
do_msdos_rename
(
struct
inode
*
old_dir
,
unsigned
char
*
old_name
,
struct
dentry
*
old_dentry
,
struct
inode
*
new_dir
,
char
*
new_name
,
struct
dentry
*
new_dentry
,
struct
inode
*
new_dir
,
unsigned
char
*
new_name
,
struct
dentry
*
new_dentry
,
struct
buffer_head
*
old_bh
,
struct
msdos_dir_entry
*
old_de
,
loff_t
old_i_pos
,
int
is_hid
)
{
...
...
@@ -550,7 +550,7 @@ int msdos_rename(struct inode *old_dir,struct dentry *old_dentry,
struct
msdos_dir_entry
*
old_de
;
loff_t
old_i_pos
;
int
error
,
is_hid
,
old_hid
;
/* if new file and old file are hidden */
char
old_msdos_name
[
MSDOS_NAME
],
new_msdos_name
[
MSDOS_NAME
];
unsigned
char
old_msdos_name
[
MSDOS_NAME
],
new_msdos_name
[
MSDOS_NAME
];
lock_kernel
();
error
=
msdos_format_name
(
old_dentry
->
d_name
.
name
,
...
...
fs/ncpfs/Makefile
View file @
5ade138f
...
...
@@ -4,14 +4,11 @@
obj-$(CONFIG_NCP_FS)
+=
ncpfs.o
ncpfs-
objs
:=
dir.o file.o inode.o ioctl.o mmap.o ncplib_kernel.o sock.o
\
ncpfs-
y
:=
dir.o file.o inode.o ioctl.o mmap.o ncplib_kernel.o sock.o
\
ncpsign_kernel.o getopt.o
ifeq
($(CONFIG_NCPFS_EXTRAS),y)
ncpfs-objs
+=
symlink.o
endif
ifeq
($(CONFIG_NCPFS_NFS_NS),y)
ncpfs-objs
+=
symlink.o
endif
ncpfs-$(CONFIG_NCPFS_EXTRAS)
+=
symlink.o
ncpfs-$(CONFIG_NCPFS_NFS_NS)
+=
symlink.o
# If you want debugging output, please uncomment the following line
# EXTRA_CFLAGS += -DDEBUG_NCP=1
...
...
fs/proc/Makefile
View file @
5ade138f
...
...
@@ -4,15 +4,10 @@
obj-$(CONFIG_PROC_FS)
+=
proc.o
proc-
objs
:=
inode.o root.o base.o generic.o array.o
\
kmsg.o proc_tty.o proc_misc.o kcore
.o
proc-
y
:=
task_nommu.o
proc-$(CONFIG_MMU)
:=
task_mmu
.o
ifeq
($(CONFIG_MMU),y)
proc-objs
+=
task_mmu.o
else
proc-objs
+=
task_nommu.o
endif
proc-y
+=
inode.o root.o base.o generic.o array.o
\
kmsg.o proc_tty.o proc_misc.o kcore.o
ifeq
($(CONFIG_PROC_DEVICETREE),y)
proc-objs
+=
proc_devtree.o
endif
proc-$(CONFIG_PROC_DEVICETREE)
+=
proc_devtree.o
fs/vfat/namei.c
View file @
5ade138f
...
...
@@ -23,6 +23,7 @@
#include <linux/slab.h>
#include <linux/smp_lock.h>
#include <linux/buffer_head.h>
#include <linux/namei.h>
#define DEBUG_LEVEL 0
#if (DEBUG_LEVEL >= 1)
...
...
@@ -70,14 +71,20 @@ static struct dentry_operations vfat_dentry_ops[4] = {
static
int
vfat_revalidate
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
int
ret
=
1
;
PRINTK1
((
"vfat_revalidate: %s
\n
"
,
dentry
->
d_name
.
name
));
spin_lock
(
&
dcache_lock
);
if
(
dentry
->
d_time
==
dentry
->
d_parent
->
d_inode
->
i_version
)
{
spin_unlock
(
&
dcache_lock
);
return
1
;
}
if
(
nd
&&
!
(
nd
->
flags
&
LOOKUP_CONTINUE
)
&&
(
nd
->
flags
&
LOOKUP_CREATE
))
/*
* negative dentry is dropped, in order to make sure
* to use the name which a user desires if this is
* create path.
*/
ret
=
0
;
else
if
(
dentry
->
d_time
!=
dentry
->
d_parent
->
d_inode
->
i_version
)
ret
=
0
;
spin_unlock
(
&
dcache_lock
);
return
0
;
return
ret
;
}
static
inline
unsigned
char
...
...
@@ -115,7 +122,7 @@ vfat_strnicmp(struct nls_table *t, const unsigned char *s1,
*/
static
int
vfat_hash
(
struct
dentry
*
dentry
,
struct
qstr
*
qstr
)
{
const
char
*
name
;
const
unsigned
char
*
name
;
int
len
;
len
=
qstr
->
len
;
...
...
@@ -137,7 +144,7 @@ static int vfat_hash(struct dentry *dentry, struct qstr *qstr)
static
int
vfat_hashi
(
struct
dentry
*
dentry
,
struct
qstr
*
qstr
)
{
struct
nls_table
*
t
=
MSDOS_SB
(
dentry
->
d_inode
->
i_sb
)
->
nls_io
;
const
char
*
name
;
const
unsigned
char
*
name
;
int
len
;
unsigned
long
hash
;
...
...
@@ -197,44 +204,13 @@ static int vfat_cmp(struct dentry *dentry, struct qstr *a, struct qstr *b)
return
1
;
}
#ifdef DEBUG
static
void
dump_fat
(
struct
super_block
*
sb
,
int
start
)
{
printk
(
"["
);
while
(
start
)
{
printk
(
"%d "
,
start
);
start
=
fat_access
(
sb
,
start
,
-
1
);
if
(
!
start
)
{
printk
(
"ERROR"
);
break
;
}
if
(
start
==
-
1
)
break
;
}
printk
(
"]
\n
"
);
}
static
void
dump_de
(
struct
msdos_dir_entry
*
de
)
{
int
i
;
unsigned
char
*
p
=
(
unsigned
char
*
)
de
;
printk
(
"["
);
for
(
i
=
0
;
i
<
32
;
i
++
,
p
++
)
{
printk
(
"%02x "
,
*
p
);
}
printk
(
"]
\n
"
);
}
#endif
/* MS-DOS "device special files" */
static
const
char
*
reserved3_names
[]
=
{
static
const
unsigned
char
*
reserved3_names
[]
=
{
"con "
,
"prn "
,
"nul "
,
"aux "
,
NULL
};
static
const
char
*
reserved4_names
[]
=
{
static
const
unsigned
char
*
reserved4_names
[]
=
{
"com1 "
,
"com2 "
,
"com3 "
,
"com4 "
,
"com5 "
,
"com6 "
,
"com7 "
,
"com8 "
,
"com9 "
,
"lpt1 "
,
"lpt2 "
,
"lpt3 "
,
"lpt4 "
,
"lpt5 "
,
...
...
@@ -287,16 +263,20 @@ static inline int vfat_is_used_badchars(const wchar_t *s, int len)
/* Returns negative number on error, 0 for a normal
* return, and 1 for . or .. */
static
int
vfat_valid_longname
(
const
char
*
name
,
int
len
,
int
xlate
)
static
int
vfat_valid_longname
(
const
unsigned
char
*
name
,
int
len
,
int
xlate
)
{
const
char
**
reserved
,
*
walk
;
const
unsigned
char
**
reserved
,
*
walk
;
int
baselen
;
if
(
len
&&
name
[
len
-
1
]
==
' '
)
return
-
EINVAL
;
if
(
len
>=
256
)
return
-
EINVAL
;
if
(
len
<
3
)
return
0
;
if
(
len
&&
name
[
len
-
1
]
==
' '
)
return
-
EINVAL
;
if
(
len
>=
256
)
return
-
EINVAL
;
if
(
len
<
3
)
return
0
;
for
(
walk
=
name
;
*
walk
!=
0
&&
*
walk
!=
'.'
;
walk
++
);
for
(
walk
=
name
;
*
walk
!=
0
&&
*
walk
!=
'.'
;
walk
++
)
;
baselen
=
walk
-
name
;
if
(
baselen
==
3
)
{
...
...
@@ -313,7 +293,7 @@ static int vfat_valid_longname(const char *name, int len, int xlate)
return
0
;
}
static
int
vfat_find_form
(
struct
inode
*
dir
,
char
*
name
)
static
int
vfat_find_form
(
struct
inode
*
dir
,
unsigned
char
*
name
)
{
struct
msdos_dir_entry
*
de
;
struct
buffer_head
*
bh
=
NULL
;
...
...
@@ -426,7 +406,7 @@ static inline int to_shortname_char(struct nls_table *nls,
*/
static
int
vfat_create_shortname
(
struct
inode
*
dir
,
struct
nls_table
*
nls
,
wchar_t
*
uname
,
int
ulen
,
char
*
name_res
,
unsigned
char
*
lcase
)
unsigned
char
*
name_res
,
unsigned
char
*
lcase
)
{
wchar_t
*
ip
,
*
ext_start
,
*
end
,
*
name_start
;
unsigned
char
base
[
9
],
ext
[
4
],
buf
[
8
],
*
p
;
...
...
@@ -606,21 +586,22 @@ static int vfat_create_shortname(struct inode *dir, struct nls_table *nls,
/* Translate a string, including coded sequences into Unicode */
static
int
xlate_to_uni
(
const
char
*
name
,
int
len
,
char
*
outname
,
int
*
longlen
,
int
*
outlen
,
int
escape
,
int
utf8
,
struct
nls_table
*
nls
)
xlate_to_uni
(
const
unsigned
char
*
name
,
int
len
,
unsigned
char
*
outname
,
int
*
longlen
,
int
*
outlen
,
int
escape
,
int
utf8
,
struct
nls_table
*
nls
)
{
const
unsigned
char
*
ip
;
unsigned
char
nc
;
char
*
op
;
unsigned
char
*
op
;
unsigned
int
ec
;
int
i
,
k
,
fill
;
int
charlen
;
if
(
utf8
)
{
*
outlen
=
utf8_mbstowcs
((
__u16
*
)
outname
,
name
,
PAGE_SIZE
);
*
outlen
=
utf8_mbstowcs
((
wchar_t
*
)
outname
,
name
,
PAGE_SIZE
);
if
(
name
[
len
-
1
]
==
'.'
)
*
outlen
-=
2
;
op
=
&
outname
[
*
outlen
*
sizeof
(
__u16
)];
op
=
&
outname
[
*
outlen
*
sizeof
(
wchar_t
)];
}
else
{
if
(
name
[
len
-
1
]
==
'.'
)
len
--
;
...
...
@@ -691,8 +672,9 @@ xlate_to_uni(const char *name, int len, char *outname, int *longlen, int *outlen
return
0
;
}
static
int
vfat_build_slots
(
struct
inode
*
dir
,
const
char
*
name
,
int
len
,
struct
msdos_dir_slot
*
ds
,
int
*
slots
,
int
is_dir
)
static
int
vfat_build_slots
(
struct
inode
*
dir
,
const
unsigned
char
*
name
,
int
len
,
struct
msdos_dir_slot
*
ds
,
int
*
slots
,
int
is_dir
)
{
struct
msdos_sb_info
*
sbi
=
MSDOS_SB
(
dir
->
i_sb
);
struct
fat_mount_options
*
opts
=
&
sbi
->
options
;
...
...
@@ -700,7 +682,7 @@ static int vfat_build_slots(struct inode *dir, const char *name, int len,
struct
msdos_dir_entry
*
de
;
unsigned
long
page
;
unsigned
char
cksum
,
lcase
;
char
msdos_name
[
MSDOS_NAME
];
unsigned
char
msdos_name
[
MSDOS_NAME
];
wchar_t
*
uname
;
int
res
,
slot
,
ulen
,
usize
,
i
;
loff_t
offset
;
...
...
@@ -714,7 +696,7 @@ static int vfat_build_slots(struct inode *dir, const char *name, int len,
return
-
ENOMEM
;
uname
=
(
wchar_t
*
)
page
;
res
=
xlate_to_uni
(
name
,
len
,
(
char
*
)
uname
,
&
ulen
,
&
usize
,
res
=
xlate_to_uni
(
name
,
len
,
(
unsigned
char
*
)
uname
,
&
ulen
,
&
usize
,
opts
->
unicode_xlate
,
opts
->
utf8
,
sbi
->
nls_io
);
if
(
res
<
0
)
goto
out_free
;
...
...
include/linux/blkdev.h
View file @
5ade138f
...
...
@@ -491,7 +491,7 @@ extern void blk_attempt_remerge(request_queue_t *, struct request *);
extern
void
__blk_attempt_remerge
(
request_queue_t
*
,
struct
request
*
);
extern
struct
request
*
blk_get_request
(
request_queue_t
*
,
int
,
int
);
extern
void
blk_put_request
(
struct
request
*
);
extern
void
blk_insert_request
(
request_queue_t
*
,
struct
request
*
,
int
,
void
*
);
extern
void
blk_insert_request
(
request_queue_t
*
,
struct
request
*
,
int
,
void
*
,
int
);
extern
void
blk_requeue_request
(
request_queue_t
*
,
struct
request
*
);
extern
void
blk_plug_device
(
request_queue_t
*
);
extern
int
blk_remove_plug
(
request_queue_t
*
);
...
...
include/linux/msdos_fs.h
View file @
5ade138f
...
...
@@ -44,7 +44,7 @@ struct statfs;
#define CASE_LOWER_EXT 16
/* extension is lower case */
#define DELETED_FLAG 0xe5
/* marks file as deleted when in name[0] */
#define IS_FREE(n) (!*(n) || *(
const unsigned char *) (
n) == DELETED_FLAG)
#define IS_FREE(n) (!*(n) || *(n) == DELETED_FLAG)
#define MSDOS_VALID_MODE (S_IFREG | S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO)
/* valid file mode bits */
...
...
@@ -113,11 +113,11 @@ struct statfs;
#define CT_LE_L(v) cpu_to_le32(v)
struct
fat_boot_sector
{
__
s
8
ignored
[
3
];
/* Boot strap short or near jump */
__
s
8
system_id
[
8
];
/* Name - can be used to special case
__
u
8
ignored
[
3
];
/* Boot strap short or near jump */
__
u
8
system_id
[
8
];
/* Name - can be used to special case
partition manager volumes */
__u8
sector_size
[
2
];
/* bytes per logical sector */
__u8
cluster_size
;
/* sectors/cluster */
__u8
sec_per_clus
;
/* sectors/cluster */
__u16
reserved
;
/* reserved sectors */
__u8
fats
;
/* number of FATs */
__u8
dir_entries
[
2
];
/* root directory entries */
...
...
@@ -149,7 +149,7 @@ struct fat_boot_fsinfo {
};
struct
msdos_dir_entry
{
__
s
8
name
[
8
],
ext
[
3
];
/* name and extension */
__
u
8
name
[
8
],
ext
[
3
];
/* name and extension */
__u8
attr
;
/* attribute bits */
__u8
lcase
;
/* Case for base and extension */
__u8
ctime_ms
;
/* Creation time, milliseconds */
...
...
@@ -237,12 +237,15 @@ extern void fat_cache_lookup(struct inode *inode, int cluster, int *f_clu,
int
*
d_clu
);
extern
void
fat_cache_add
(
struct
inode
*
inode
,
int
f_clu
,
int
d_clu
);
extern
void
fat_cache_inval_inode
(
struct
inode
*
inode
);
extern
int
fat_get_cluster
(
struct
inode
*
inode
,
int
cluster
,
int
*
fclus
,
int
*
dclus
);
extern
int
fat_free
(
struct
inode
*
inode
,
int
skip
);
/* fat/dir.c */
extern
struct
file_operations
fat_dir_operations
;
extern
int
fat_search_long
(
struct
inode
*
inode
,
const
char
*
name
,
int
name_len
,
int
anycase
,
loff_t
*
spos
,
loff_t
*
lpos
);
extern
int
fat_search_long
(
struct
inode
*
inode
,
const
unsigned
char
*
name
,
int
name_len
,
int
anycase
,
loff_t
*
spos
,
loff_t
*
lpos
);
extern
int
fat_readdir
(
struct
file
*
filp
,
void
*
dirent
,
filldir_t
filldir
);
extern
int
fat_dir_ioctl
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
...
...
@@ -302,7 +305,7 @@ static __inline__ int fat_get_entry(struct inode *dir, loff_t *pos,
return
fat__get_entry
(
dir
,
pos
,
bh
,
de
,
i_pos
);
}
extern
int
fat_subdirs
(
struct
inode
*
dir
);
extern
int
fat_scan
(
struct
inode
*
dir
,
const
char
*
name
,
extern
int
fat_scan
(
struct
inode
*
dir
,
const
unsigned
char
*
name
,
struct
buffer_head
**
res_bh
,
struct
msdos_dir_entry
**
res_de
,
loff_t
*
i_pos
);
...
...
include/linux/msdos_fs_sb.h
View file @
5ade138f
...
...
@@ -36,8 +36,9 @@ struct fat_cache {
};
struct
msdos_sb_info
{
unsigned
short
cluster_size
;
/* sectors/cluster */
unsigned
short
cluster_bits
;
/* sectors/cluster */
unsigned
short
sec_per_clus
;
/* sectors/cluster */
unsigned
short
cluster_bits
;
/* log2(cluster_size) */
unsigned
int
cluster_size
;
/* cluster size */
unsigned
char
fats
,
fat_bits
;
/* number of FATs, FAT bits (12 or 16) */
unsigned
short
fat_start
;
unsigned
long
fat_length
;
/* FAT start & length (sec.) */
...
...
kernel/suspend.c
View file @
5ade138f
...
...
@@ -83,7 +83,6 @@ unsigned char software_suspend_enabled = 0;
#define ADDRESS2(x) __ADDRESS(__pa(x))
/* Needed for x86-64 where some pages are in memory twice */
/* References to section boundaries */
extern
char
_text
,
_etext
,
_edata
,
__bss_start
,
_end
;
extern
char
__nosave_begin
,
__nosave_end
;
extern
int
is_head_of_free_region
(
struct
page
*
);
...
...
net/sunrpc/svcsock.c
View file @
5ade138f
...
...
@@ -1377,6 +1377,7 @@ svc_create_socket(struct svc_serv *serv, int protocol, struct sockaddr_in *sin)
return
error
;
if
(
sin
!=
NULL
)
{
if
(
type
==
SOCK_STREAM
)
sock
->
sk
->
sk_reuse
=
1
;
/* allow address reuse */
error
=
sock
->
ops
->
bind
(
sock
,
(
struct
sockaddr
*
)
sin
,
sizeof
(
*
sin
));
...
...
scripts/kconfig/confdata.c
View file @
5ade138f
...
...
@@ -115,6 +115,7 @@ int conf_read(const char *name)
while
(
fgets
(
line
,
sizeof
(
line
),
in
))
{
lineno
++
;
sym
=
NULL
;
switch
(
line
[
0
])
{
case
'#'
:
if
(
memcmp
(
line
+
2
,
"CONFIG_"
,
7
))
...
...
@@ -125,11 +126,15 @@ int conf_read(const char *name)
*
p
++
=
0
;
if
(
strncmp
(
p
,
"is not set"
,
10
))
continue
;
sym
=
sym_lookup
(
line
+
9
,
0
);
sym
=
sym_find
(
line
+
9
);
if
(
!
sym
)
{
fprintf
(
stderr
,
"%s:%d: trying to assign nonexistent symbol %s
\n
"
,
name
,
lineno
,
line
+
9
);
break
;
}
switch
(
sym
->
type
)
{
case
S_BOOLEAN
:
case
S_TRISTATE
:
sym
->
user
=
symbol_no
.
curr
;
sym
->
user
.
tri
=
no
;
sym
->
flags
&=
~
SYMBOL_NEW
;
break
;
default:
...
...
@@ -197,9 +202,17 @@ int conf_read(const char *name)
default:
;
}
if
(
sym_is_choice_value
(
sym
))
{
break
;
case
'\n'
:
break
;
default:
continue
;
}
if
(
sym
&&
sym_is_choice_value
(
sym
))
{
struct
symbol
*
cs
=
prop_get_symbol
(
sym_get_choice_prop
(
sym
));
switch
(
sym
->
user
.
tri
)
{
case
no
:
break
;
case
mod
:
if
(
cs
->
user
.
tri
==
yes
)
/* warn? */
;
...
...
@@ -209,23 +222,16 @@ int conf_read(const char *name)
/* warn? */
;
cs
->
user
.
val
=
sym
;
break
;
case
no
:
break
;
}
cs
->
user
.
tri
=
sym
->
user
.
tri
;
}
break
;
case
'\n'
:
break
;
default:
continue
;
cs
->
user
.
tri
=
E_OR
(
cs
->
user
.
tri
,
sym
->
user
.
tri
);
cs
->
flags
&=
~
SYMBOL_NEW
;
}
}
fclose
(
in
);
for_all_symbols
(
i
,
sym
)
{
sym_calc_value
(
sym
);
if
(
sym_has_value
(
sym
))
{
if
(
sym_has_value
(
sym
)
&&
!
sym_is_choice_value
(
sym
)
)
{
if
(
sym
->
visible
==
no
)
sym
->
flags
|=
SYMBOL_NEW
;
switch
(
sym
->
type
)
{
...
...
@@ -241,7 +247,6 @@ int conf_read(const char *name)
if
(
!
sym_is_choice
(
sym
))
continue
;
prop
=
sym_get_choice_prop
(
sym
);
sym
->
flags
&=
~
SYMBOL_NEW
;
for
(
e
=
prop
->
expr
;
e
;
e
=
e
->
left
.
expr
)
if
(
e
->
right
.
sym
->
visible
!=
no
)
sym
->
flags
|=
e
->
right
.
sym
->
flags
&
SYMBOL_NEW
;
...
...
@@ -408,6 +413,7 @@ int conf_write(const char *name)
if
(
out_h
)
{
fclose
(
out_h
);
rename
(
".tmpconfig.h"
,
"include/linux/autoconf.h"
);
file_write_dep
(
NULL
);
}
if
(
!
name
||
basename
!=
conf_def_filename
)
{
if
(
!
name
)
...
...
scripts/kconfig/gconf.c
View file @
5ade138f
...
...
@@ -30,7 +30,7 @@ enum {
SINGLE_VIEW
,
SPLIT_VIEW
,
FULL_VIEW
};
static
gint
view_mode
=
SPLIT
_VIEW
;
static
gint
view_mode
=
FULL
_VIEW
;
static
gboolean
show_name
=
TRUE
;
static
gboolean
show_range
=
TRUE
;
static
gboolean
show_value
=
TRUE
;
...
...
@@ -59,7 +59,8 @@ GtkTreeModel *model1, *model2;
static
GtkTreeIter
*
parents
[
256
]
=
{
0
};
static
gint
indent
;
static
struct
menu
*
current
;
static
struct
menu
*
current
;
// current node for SINGLE view
static
struct
menu
*
browsed
;
// browsed node for SPLIT view
enum
{
COL_OPTION
,
COL_NAME
,
COL_NO
,
COL_MOD
,
COL_YES
,
COL_VALUE
,
...
...
@@ -317,14 +318,30 @@ void init_left_tree(void)
GtkTreeView
*
view
=
GTK_TREE_VIEW
(
tree1_w
);
GtkCellRenderer
*
renderer
;
GtkTreeSelection
*
sel
;
GtkTreeViewColumn
*
column
;
gtk_tree_view_set_model
(
view
,
model1
);
gtk_tree_view_set_headers_visible
(
view
,
TRUE
);
gtk_tree_view_set_rules_hint
(
view
,
FALSE
);
column
=
gtk_tree_view_column_new
();
gtk_tree_view_append_column
(
view
,
column
);
gtk_tree_view_column_set_title
(
column
,
"Options"
);
renderer
=
gtk_cell_renderer_toggle_new
();
gtk_tree_view_column_pack_start
(
GTK_TREE_VIEW_COLUMN
(
column
),
renderer
,
FALSE
);
gtk_tree_view_column_set_attributes
(
GTK_TREE_VIEW_COLUMN
(
column
),
renderer
,
"active"
,
COL_BTNACT
,
"inconsistent"
,
COL_BTNINC
,
"visible"
,
COL_BTNVIS
,
"radio"
,
COL_BTNRAD
,
NULL
);
renderer
=
gtk_cell_renderer_text_new
();
gtk_tree_view_insert_column_with_attributes
(
view
,
-
1
,
"Options"
,
renderer
,
gtk_tree_view_column_pack_start
(
GTK_TREE_VIEW_COLUMN
(
column
),
renderer
,
FALSE
);
gtk_tree_view_column_set_attributes
(
GTK_TREE_VIEW_COLUMN
(
column
),
renderer
,
"text"
,
COL_OPTION
,
"foreground-gdk"
,
COL_COLOR
,
NULL
);
...
...
@@ -709,7 +726,7 @@ on_show_all_options1_activate(GtkMenuItem * menuitem, gpointer user_data)
show_all
=
GTK_CHECK_MENU_ITEM
(
menuitem
)
->
active
;
gtk_tree_store_clear
(
tree2
);
display_tree
(
&
rootmenu
);
// instead of update_tree
for speed reasons
display_tree
(
&
rootmenu
);
// instead of update_tree
to speed-up
}
...
...
@@ -923,7 +940,7 @@ static void change_sym_value(struct menu *menu, gint col)
if
(
view_mode
==
FULL_VIEW
)
update_tree
(
&
rootmenu
,
NULL
);
else
if
(
view_mode
==
SPLIT_VIEW
)
{
update_tree
(
current
,
NULL
);
update_tree
(
browsed
,
NULL
);
display_list
();
}
else
if
(
view_mode
==
SINGLE_VIEW
)
...
...
@@ -952,7 +969,7 @@ static void toggle_sym_value(struct menu *menu)
if
(
view_mode
==
FULL_VIEW
)
update_tree
(
&
rootmenu
,
NULL
);
else
if
(
view_mode
==
SPLIT_VIEW
)
{
update_tree
(
current
,
NULL
);
update_tree
(
browsed
,
NULL
);
display_list
();
}
else
if
(
view_mode
==
SINGLE_VIEW
)
...
...
@@ -1004,8 +1021,6 @@ static gint column2index(GtkTreeViewColumn * column)
}
//#define GTK_BUG_FIXED // uncomment it for GTK+ >= 2.1.4 (2.2)
/* User click: update choice (full) or goes down (single) */
gboolean
on_treeview2_button_press_event
(
GtkWidget
*
widget
,
...
...
@@ -1018,7 +1033,7 @@ on_treeview2_button_press_event(GtkWidget * widget,
struct
menu
*
menu
;
gint
col
;
#if
def GTK_BUG_FIXED
#if
GTK_CHECK_VERSION(2,1,4) // bug in ctree with earlier version of GTK
gint
tx
=
(
gint
)
event
->
x
;
gint
ty
=
(
gint
)
event
->
y
;
gint
cx
,
cy
;
...
...
@@ -1151,7 +1166,7 @@ on_treeview1_button_press_event(GtkWidget * widget,
current
=
menu
;
display_tree_part
();
}
else
{
current
=
menu
;
browsed
=
menu
;
display_tree_part
();
}
...
...
@@ -1196,7 +1211,7 @@ static gchar **fill_row(struct menu *menu)
switch
(
ptype
)
{
case
P_MENU
:
row
[
COL_PIXBUF
]
=
(
gchar
*
)
xpm_menu
;
if
(
view_mode
!=
FULL
_VIEW
)
if
(
view_mode
==
SINGLE
_VIEW
)
row
[
COL_PIXVIS
]
=
GINT_TO_POINTER
(
TRUE
);
row
[
COL_BTNVIS
]
=
GINT_TO_POINTER
(
FALSE
);
break
;
...
...
@@ -1242,6 +1257,8 @@ static gchar **fill_row(struct menu *menu)
stype
=
sym_get_type
(
sym
);
switch
(
stype
)
{
case
S_BOOLEAN
:
if
(
GPOINTER_TO_INT
(
row
[
COL_PIXVIS
])
==
FALSE
)
row
[
COL_BTNVIS
]
=
GINT_TO_POINTER
(
TRUE
);
if
(
sym_is_choice
(
sym
))
break
;
case
S_TRISTATE
:
...
...
@@ -1491,6 +1508,7 @@ static void display_tree(struct menu *menu)
place_node
(
child
,
fill_row
(
child
));
#ifdef DEBUG
printf
(
"%*c%s: "
,
indent
,
' '
,
menu_get_prompt
(
child
));
printf
(
"%s"
,
child
->
flags
&
MENU_ROOT
?
"rootmenu | "
:
""
);
dbg_print_ptype
(
ptype
);
printf
(
" | "
);
if
(
sym
)
{
...
...
@@ -1504,10 +1522,12 @@ static void display_tree(struct menu *menu)
if
((
view_mode
!=
FULL_VIEW
)
&&
(
ptype
==
P_MENU
)
&&
(
tree
==
tree2
))
continue
;
/*
if (((menu != &rootmenu) && !(menu->flags & MENU_ROOT)) ||
(view_mode == FULL_VIEW)
||
(
view_mode
==
SPLIT_VIEW
))
{
|| (view_mode == SPLIT_VIEW))*/
if
((
view_mode
==
SINGLE_VIEW
)
&&
(
menu
->
flags
&
MENU_ROOT
)
||
(
view_mode
==
FULL_VIEW
)
||
(
view_mode
==
SPLIT_VIEW
))
{
indent
++
;
display_tree
(
child
);
indent
--
;
...
...
@@ -1520,7 +1540,10 @@ static void display_tree_part(void)
{
if
(
tree2
)
gtk_tree_store_clear
(
tree2
);
if
(
view_mode
==
SINGLE_VIEW
)
display_tree
(
current
);
else
if
(
view_mode
==
SPLIT_VIEW
)
display_tree
(
browsed
);
gtk_tree_view_expand_all
(
GTK_TREE_VIEW
(
tree2_w
));
}
...
...
@@ -1531,20 +1554,25 @@ static void display_list(void)
gtk_tree_store_clear
(
tree1
);
tree
=
tree1
;
display_tree
(
current
=
&
rootmenu
);
display_tree
(
&
rootmenu
);
gtk_tree_view_expand_all
(
GTK_TREE_VIEW
(
tree1_w
));
tree
=
tree2
;
}
static
void
fixup_rootmenu
(
struct
menu
*
menu
)
void
fixup_rootmenu
(
struct
menu
*
menu
)
{
struct
menu
*
child
;
static
int
menu_cnt
=
0
;
if
(
!
menu
->
prompt
||
menu
->
prompt
->
type
!=
P_MENU
)
return
;
menu
->
flags
|=
MENU_ROOT
;
for
(
child
=
menu
->
list
;
child
;
child
=
child
->
next
)
for
(
child
=
menu
->
list
;
child
;
child
=
child
->
next
)
{
if
(
child
->
prompt
&&
child
->
prompt
->
type
==
P_MENU
)
{
menu_cnt
++
;
fixup_rootmenu
(
child
);
menu_cnt
--
;
}
else
if
(
!
menu_cnt
)
fixup_rootmenu
(
child
);
}
}
...
...
scripts/kconfig/qconf.cc
View file @
5ade138f
...
...
@@ -409,10 +409,13 @@ void ConfigList::updateList(ConfigItem* item)
item
=
new
ConfigItem
(
this
,
0
,
true
);
last
=
item
;
}
if
(
mode
==
singleMode
&&
rootEntry
->
sym
&&
rootEntry
->
prompt
)
{
if
((
mode
==
singleMode
||
mode
==
symbolMode
)
&&
rootEntry
->
sym
&&
rootEntry
->
prompt
)
{
item
=
last
?
last
->
nextSibling
()
:
firstChild
();
if
(
!
item
)
item
=
new
ConfigItem
(
this
,
last
,
rootEntry
,
true
);
else
item
->
testUpdateMenu
(
true
);
updateMenuList
(
item
,
rootEntry
);
triggerUpdate
();
...
...
usr/Makefile
View file @
5ade138f
...
...
@@ -3,11 +3,12 @@ obj-y := initramfs_data.o
host-progs
:=
gen_init_cpio
clean-files
:=
initramfs_data.cpio.gz
initramfs_data.S
clean-files
:=
initramfs_data.cpio.gz
$(src)/initramfs_data.S
:
$(obj)/initramfs_data.cpio.gz
echo
" .section .init.ramfs,
\"
a
\"
"
>
$(src)
/initramfs_data.S
echo
".incbin
\"
usr/initramfs_data.cpio.gz
\"
"
>>
$(src)
/initramfs_data.S
# initramfs_data.o contains the initramfs_data.cpio.gz image.
# The image is included using .incbin, a dependency which is not
# tracked automatically.
$(obj)/initramfs_data.o
:
$(obj)/initramfs_data.cpio.gz FORCE
# initramfs-y are the programs which will be copied into the CPIO
# archive. Currently, the filenames are hardcoded in gen_init_cpio,
...
...
usr/initramfs_data.S
0 → 100644
View file @
5ade138f
/*
initramfs_data
includes
the
compressed
binary
that
is
the
filesystem
used
for
early
user
space
.
Note
:
Older
versions
of
"as"
(
prior
to
binutils
2
.11.90.0.23
released
on
2001
-
07
-
14
)
dit
not
support
.
incbin
.
If
you
are
forced
to
use
older
binutils
than
that
then
the
following
trick
can
be
applied
to
create
the
resulting
binary
:
ld
-
m
elf_i386
--
format
binary
--
oformat
elf32
-
i386
-
r
\
-
T
initramfs_data
.
scr
initramfs_data
.
cpio
.
gz
-
o
initramfs_data
.
o
ld
-
m
elf_i386
-
r
-
o
built
-
in
.
o
initramfs_data
.
o
initramfs_data
.
scr
looks
like
this
:
SECTIONS
{
.
init.ramfs
:
{
*(
.
data
)
}
}
The
above
example
is
for
i386
-
the
parameters
vary
from
architectures
.
Eventually
look
up
LDFLAGS_BLOB
in
an
older
version
of
the
arch
/$(
ARCH
)/
Makefile
to
see
the
flags
used
before
.
incbin
was
introduced
.
Using
.
incbin
has
the
advantage
over
ld
that
the
correct
flags
are
set
in
the
ELF
header
,
as
required
by
certain
architectures
.
*/
.
section
.
init.ramfs
,"
a
"
.
incbin
"
usr
/
initramfs_data
.
cpio.gz
"
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