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
40f51070
Commit
40f51070
authored
Oct 04, 2002
by
Brian Gerst
Committed by
Russell King
Oct 04, 2002
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] struct super_block cleanup - hpfs
Remove hpfs_sb from struct super_block.
parent
9709ae9f
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
209 additions
and
215 deletions
+209
-215
fs/hpfs/alloc.c
fs/hpfs/alloc.c
+28
-26
fs/hpfs/anode.c
fs/hpfs/anode.c
+9
-9
fs/hpfs/buffer.c
fs/hpfs/buffer.c
+6
-6
fs/hpfs/dentry.c
fs/hpfs/dentry.c
+1
-1
fs/hpfs/dir.c
fs/hpfs/dir.c
+6
-6
fs/hpfs/dnode.c
fs/hpfs/dnode.c
+17
-17
fs/hpfs/hpfs_fn.h
fs/hpfs/hpfs_fn.h
+23
-16
fs/hpfs/inode.c
fs/hpfs/inode.c
+19
-19
fs/hpfs/map.c
fs/hpfs/map.c
+12
-12
fs/hpfs/name.c
fs/hpfs/name.c
+4
-4
fs/hpfs/namei.c
fs/hpfs/namei.c
+3
-3
fs/hpfs/super.c
fs/hpfs/super.c
+81
-67
include/linux/fs.h
include/linux/fs.h
+0
-2
include/linux/hpfs_fs_sb.h
include/linux/hpfs_fs_sb.h
+0
-27
No files found.
fs/hpfs/alloc.c
View file @
40f51070
...
...
@@ -24,8 +24,8 @@ static int chk_if_allocated(struct super_block *s, secno sec, char *msg)
goto
fail1
;
}
hpfs_brelse4
(
&
qbh
);
if
(
sec
>=
s
->
s_hpfs_dirband_start
&&
sec
<
s
->
s_hpfs_dirband_start
+
s
->
s_hpfs
_dirband_size
)
{
unsigned
ssec
=
(
sec
-
s
->
s_hpfs
_dirband_start
)
/
4
;
if
(
sec
>=
hpfs_sb
(
s
)
->
sb_dirband_start
&&
sec
<
hpfs_sb
(
s
)
->
sb_dirband_start
+
hpfs_sb
(
s
)
->
sb
_dirband_size
)
{
unsigned
ssec
=
(
sec
-
hpfs_sb
(
s
)
->
sb
_dirband_start
)
/
4
;
if
(
!
(
bmp
=
hpfs_map_dnode_bitmap
(
s
,
&
qbh
)))
goto
fail
;
if
((
bmp
[
ssec
>>
5
]
>>
(
ssec
&
0x1f
))
&
1
)
{
hpfs_error
(
s
,
"sector '%s' - %08x not allocated in directory bitmap"
,
msg
,
sec
);
...
...
@@ -48,11 +48,11 @@ static int chk_if_allocated(struct super_block *s, secno sec, char *msg)
int
hpfs_chk_sectors
(
struct
super_block
*
s
,
secno
start
,
int
len
,
char
*
msg
)
{
if
(
start
+
len
<
start
||
start
<
0x12
||
start
+
len
>
s
->
s_hpfs
_fs_size
)
{
start
+
len
>
hpfs_sb
(
s
)
->
sb
_fs_size
)
{
hpfs_error
(
s
,
"sector(s) '%s' badly placed at %08x"
,
msg
,
start
);
return
1
;
}
if
(
s
->
s_hpfs
_chk
>=
2
)
{
if
(
hpfs_sb
(
s
)
->
sb
_chk
>=
2
)
{
int
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
if
(
chk_if_allocated
(
s
,
start
+
i
,
msg
))
return
1
;
...
...
@@ -127,7 +127,7 @@ static secno alloc_in_bmp(struct super_block *s, secno near, unsigned n, unsigne
}
rt:
if
(
ret
)
{
if
(
s
->
s_hpfs
_chk
&&
((
ret
>>
14
)
!=
(
bs
>>
14
)
||
(
bmp
[(
ret
&
0x3fff
)
>>
5
]
|
~
(((
1
<<
n
)
-
1
)
<<
(
ret
&
0x1f
)))
!=
0xffffffff
))
{
if
(
hpfs_sb
(
s
)
->
sb
_chk
&&
((
ret
>>
14
)
!=
(
bs
>>
14
)
||
(
bmp
[(
ret
&
0x3fff
)
>>
5
]
|
~
(((
1
<<
n
)
-
1
)
<<
(
ret
&
0x1f
)))
!=
0xffffffff
))
{
hpfs_error
(
s
,
"Allocation doesn't work! Wanted %d, allocated at %08x"
,
n
,
ret
);
ret
=
0
;
goto
b
;
...
...
@@ -155,14 +155,15 @@ secno hpfs_alloc_sector(struct super_block *s, secno near, unsigned n, int forwa
secno
sec
;
unsigned
i
;
unsigned
n_bmps
;
int
b
=
s
->
s_hpfs_c_bitmap
;
struct
hpfs_sb_info
*
sbi
=
hpfs_sb
(
s
);
int
b
=
sbi
->
sb_c_bitmap
;
int
f_p
=
0
;
if
(
forward
<
0
)
{
forward
=
-
forward
;
f_p
=
1
;
}
if
(
lock
)
hpfs_lock_creation
(
s
);
if
(
near
&&
near
<
s
->
s_hpfs
_fs_size
)
if
(
near
&&
near
<
s
bi
->
sb
_fs_size
)
if
((
sec
=
alloc_in_bmp
(
s
,
near
,
n
,
f_p
?
forward
:
forward
/
4
)))
goto
ret
;
if
(
b
!=
-
1
)
{
if
((
sec
=
alloc_in_bmp
(
s
,
b
<<
14
,
n
,
f_p
?
forward
:
forward
/
2
)))
{
...
...
@@ -171,25 +172,25 @@ secno hpfs_alloc_sector(struct super_block *s, secno near, unsigned n, int forwa
}
if
(
b
>
0x10000000
)
if
((
sec
=
alloc_in_bmp
(
s
,
(
b
&
0xfffffff
)
<<
14
,
n
,
f_p
?
forward
:
0
)))
goto
ret
;
}
n_bmps
=
(
s
->
s_hpfs
_fs_size
+
0x4000
-
1
)
>>
14
;
n_bmps
=
(
s
bi
->
sb
_fs_size
+
0x4000
-
1
)
>>
14
;
for
(
i
=
0
;
i
<
n_bmps
/
2
;
i
++
)
{
if
((
sec
=
alloc_in_bmp
(
s
,
(
n_bmps
/
2
+
i
)
<<
14
,
n
,
forward
)))
{
s
->
s_hpfs
_c_bitmap
=
n_bmps
/
2
+
i
;
s
bi
->
sb
_c_bitmap
=
n_bmps
/
2
+
i
;
goto
ret
;
}
if
((
sec
=
alloc_in_bmp
(
s
,
(
n_bmps
/
2
-
i
-
1
)
<<
14
,
n
,
forward
)))
{
s
->
s_hpfs
_c_bitmap
=
n_bmps
/
2
-
i
-
1
;
s
bi
->
sb
_c_bitmap
=
n_bmps
/
2
-
i
-
1
;
goto
ret
;
}
}
if
((
sec
=
alloc_in_bmp
(
s
,
(
n_bmps
-
1
)
<<
14
,
n
,
forward
)))
{
s
->
s_hpfs
_c_bitmap
=
n_bmps
-
1
;
s
bi
->
sb
_c_bitmap
=
n_bmps
-
1
;
goto
ret
;
}
if
(
!
f_p
)
{
for
(
i
=
0
;
i
<
n_bmps
;
i
++
)
if
((
sec
=
alloc_in_bmp
(
s
,
i
<<
14
,
n
,
0
)))
{
s
->
s_hpfs
_c_bitmap
=
0x10000000
+
i
;
s
bi
->
sb
_c_bitmap
=
0x10000000
+
i
;
goto
ret
;
}
}
...
...
@@ -212,17 +213,18 @@ static secno alloc_in_dirband(struct super_block *s, secno near, int lock)
{
unsigned
nr
=
near
;
secno
sec
;
if
(
nr
<
s
->
s_hpfs_dirband_start
)
nr
=
s
->
s_hpfs_dirband_start
;
if
(
nr
>=
s
->
s_hpfs_dirband_start
+
s
->
s_hpfs_dirband_size
)
nr
=
s
->
s_hpfs_dirband_start
+
s
->
s_hpfs_dirband_size
-
4
;
nr
-=
s
->
s_hpfs_dirband_start
;
struct
hpfs_sb_info
*
sbi
=
hpfs_sb
(
s
);
if
(
nr
<
sbi
->
sb_dirband_start
)
nr
=
sbi
->
sb_dirband_start
;
if
(
nr
>=
sbi
->
sb_dirband_start
+
sbi
->
sb_dirband_size
)
nr
=
sbi
->
sb_dirband_start
+
sbi
->
sb_dirband_size
-
4
;
nr
-=
sbi
->
sb_dirband_start
;
nr
>>=
2
;
if
(
lock
)
hpfs_lock_creation
(
s
);
sec
=
alloc_in_bmp
(
s
,
(
~
0x3fff
)
|
nr
,
1
,
0
);
if
(
lock
)
hpfs_unlock_creation
(
s
);
if
(
!
sec
)
return
0
;
return
((
sec
&
0x3fff
)
<<
2
)
+
s
->
s_hpfs
_dirband_start
;
return
((
sec
&
0x3fff
)
<<
2
)
+
s
bi
->
sb
_dirband_start
;
}
/* Alloc sector if it's free */
...
...
@@ -303,8 +305,8 @@ void hpfs_free_sectors(struct super_block *s, secno sec, unsigned n)
int
hpfs_check_free_dnodes
(
struct
super_block
*
s
,
int
n
)
{
int
n_bmps
=
(
s
->
s_hpfs
_fs_size
+
0x4000
-
1
)
>>
14
;
int
b
=
s
->
s_hpfs
_c_bitmap
&
0x0fffffff
;
int
n_bmps
=
(
hpfs_sb
(
s
)
->
sb
_fs_size
+
0x4000
-
1
)
>>
14
;
int
b
=
hpfs_sb
(
s
)
->
sb
_c_bitmap
&
0x0fffffff
;
int
i
,
j
;
unsigned
*
bmp
;
struct
quad_buffer_head
qbh
;
...
...
@@ -320,7 +322,7 @@ int hpfs_check_free_dnodes(struct super_block *s, int n)
}
hpfs_brelse4
(
&
qbh
);
i
=
0
;
if
(
s
->
s_hpfs
_c_bitmap
!=
-
1
)
{
if
(
hpfs_sb
(
s
)
->
sb
_c_bitmap
!=
-
1
)
{
bmp
=
hpfs_map_bitmap
(
s
,
b
,
&
qbh
,
"chkdn1"
);
goto
chk_bmp
;
}
...
...
@@ -349,17 +351,17 @@ int hpfs_check_free_dnodes(struct super_block *s, int n)
void
hpfs_free_dnode
(
struct
super_block
*
s
,
dnode_secno
dno
)
{
if
(
s
->
s_hpfs
_chk
)
if
(
dno
&
3
)
{
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
dno
&
3
)
{
hpfs_error
(
s
,
"hpfs_free_dnode: dnode %08x not aligned"
,
dno
);
return
;
}
if
(
dno
<
s
->
s_hpfs
_dirband_start
||
dno
>=
s
->
s_hpfs_dirband_start
+
s
->
s_hpfs
_dirband_size
)
{
if
(
dno
<
hpfs_sb
(
s
)
->
sb
_dirband_start
||
dno
>=
hpfs_sb
(
s
)
->
sb_dirband_start
+
hpfs_sb
(
s
)
->
sb
_dirband_size
)
{
hpfs_free_sectors
(
s
,
dno
,
4
);
}
else
{
struct
quad_buffer_head
qbh
;
unsigned
*
bmp
;
unsigned
ssec
=
(
dno
-
s
->
s_hpfs
_dirband_start
)
/
4
;
unsigned
ssec
=
(
dno
-
hpfs_sb
(
s
)
->
sb
_dirband_start
)
/
4
;
lock_super
(
s
);
if
(
!
(
bmp
=
hpfs_map_dnode_bitmap
(
s
,
&
qbh
)))
{
unlock_super
(
s
);
...
...
@@ -377,7 +379,7 @@ struct dnode *hpfs_alloc_dnode(struct super_block *s, secno near,
int
lock
)
{
struct
dnode
*
d
;
if
(
hpfs_count_one_bitmap
(
s
,
s
->
s_hpfs
_dmap
)
>
FREE_DNODES_ADD
)
{
if
(
hpfs_count_one_bitmap
(
s
,
hpfs_sb
(
s
)
->
sb
_dmap
)
>
FREE_DNODES_ADD
)
{
if
(
!
(
*
dno
=
alloc_in_dirband
(
s
,
near
,
lock
)))
if
(
!
(
*
dno
=
hpfs_alloc_sector
(
s
,
near
,
4
,
0
,
lock
)))
return
NULL
;
}
else
{
...
...
fs/hpfs/anode.c
View file @
40f51070
...
...
@@ -20,7 +20,7 @@ secno hpfs_bplus_lookup(struct super_block *s, struct inode *inode,
int
i
;
int
c1
,
c2
=
0
;
go_down:
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_stop_cycles
(
s
,
a
,
&
c1
,
&
c2
,
"hpfs_bplus_lookup"
))
return
-
1
;
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
s
,
a
,
&
c1
,
&
c2
,
"hpfs_bplus_lookup"
))
return
-
1
;
if
(
btree
->
internal
)
{
for
(
i
=
0
;
i
<
btree
->
n_used_nodes
;
i
++
)
if
(
btree
->
u
.
internal
[
i
].
file_secno
>
sec
)
{
...
...
@@ -38,7 +38,7 @@ secno hpfs_bplus_lookup(struct super_block *s, struct inode *inode,
if
(
btree
->
u
.
external
[
i
].
file_secno
<=
sec
&&
btree
->
u
.
external
[
i
].
file_secno
+
btree
->
u
.
external
[
i
].
length
>
sec
)
{
a
=
btree
->
u
.
external
[
i
].
disk_secno
+
sec
-
btree
->
u
.
external
[
i
].
file_secno
;
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_chk_sectors
(
s
,
a
,
1
,
"data"
))
{
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_chk_sectors
(
s
,
a
,
1
,
"data"
))
{
brelse
(
bh
);
return
-
1
;
}
...
...
@@ -88,7 +88,7 @@ secno hpfs_add_sector_to_btree(struct super_block *s, secno node, int fnod, unsi
btree
->
u
.
internal
[
n
].
file_secno
=
-
1
;
mark_buffer_dirty
(
bh
);
brelse
(
bh
);
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
s
,
a
,
&
c1
,
&
c2
,
"hpfs_add_sector_to_btree #1"
))
return
-
1
;
if
(
!
(
anode
=
hpfs_map_anode
(
s
,
a
,
&
bh
)))
return
-
1
;
btree
=
&
anode
->
btree
;
...
...
@@ -164,7 +164,7 @@ secno hpfs_add_sector_to_btree(struct super_block *s, secno node, int fnod, unsi
c2
=
0
;
while
(
up
!=
-
1
)
{
struct
anode
*
new_anode
;
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
s
,
up
,
&
c1
,
&
c2
,
"hpfs_add_sector_to_btree #2"
))
return
-
1
;
if
(
up
!=
node
||
!
fnod
)
{
if
(
!
(
anode
=
hpfs_map_anode
(
s
,
up
,
&
bh
)))
return
-
1
;
...
...
@@ -283,7 +283,7 @@ void hpfs_remove_btree(struct super_block *s, struct bplus_header *btree)
while
(
btree1
->
internal
)
{
ano
=
btree1
->
u
.
internal
[
pos
].
down
;
if
(
level
)
brelse
(
bh
);
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
s
,
ano
,
&
d1
,
&
d2
,
"hpfs_remove_btree #1"
))
return
;
if
(
!
(
anode
=
hpfs_map_anode
(
s
,
ano
,
&
bh
)))
return
;
...
...
@@ -296,7 +296,7 @@ void hpfs_remove_btree(struct super_block *s, struct bplus_header *btree)
go_up:
if
(
!
level
)
return
;
brelse
(
bh
);
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
s
,
ano
,
&
c1
,
&
c2
,
"hpfs_remove_btree #2"
))
return
;
hpfs_free_sectors
(
s
,
ano
,
1
);
oano
=
ano
;
...
...
@@ -343,7 +343,7 @@ int hpfs_ea_read(struct super_block *s, secno a, int ano, unsigned pos,
if
((
sec
=
anode_lookup
(
s
,
a
,
pos
>>
9
))
==
-
1
)
return
-
1
;
}
else
sec
=
a
+
(
pos
>>
9
);
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_chk_sectors
(
s
,
sec
,
1
,
"ea #1"
))
return
-
1
;
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_chk_sectors
(
s
,
sec
,
1
,
"ea #1"
))
return
-
1
;
if
(
!
(
data
=
hpfs_map_sector
(
s
,
sec
,
&
bh
,
(
len
-
1
)
>>
9
)))
return
-
1
;
l
=
0x200
-
(
pos
&
0x1ff
);
if
(
l
>
len
)
l
=
len
;
...
...
@@ -366,7 +366,7 @@ int hpfs_ea_write(struct super_block *s, secno a, int ano, unsigned pos,
if
((
sec
=
anode_lookup
(
s
,
a
,
pos
>>
9
))
==
-
1
)
return
-
1
;
}
else
sec
=
a
+
(
pos
>>
9
);
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_chk_sectors
(
s
,
sec
,
1
,
"ea #2"
))
return
-
1
;
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_chk_sectors
(
s
,
sec
,
1
,
"ea #2"
))
return
-
1
;
if
(
!
(
data
=
hpfs_map_sector
(
s
,
sec
,
&
bh
,
(
len
-
1
)
>>
9
)))
return
-
1
;
l
=
0x200
-
(
pos
&
0x1ff
);
if
(
l
>
len
)
l
=
len
;
...
...
@@ -440,7 +440,7 @@ void hpfs_truncate_btree(struct super_block *s, secno f, int fno, unsigned secs)
}
node
=
btree
->
u
.
internal
[
i
].
down
;
brelse
(
bh
);
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
s
,
node
,
&
c1
,
&
c2
,
"hpfs_truncate_btree"
))
return
;
if
(
!
(
anode
=
hpfs_map_anode
(
s
,
node
,
&
bh
)))
return
;
...
...
fs/hpfs/buffer.c
View file @
40f51070
...
...
@@ -15,7 +15,7 @@ void hpfs_lock_creation(struct super_block *s)
#ifdef DEBUG_LOCKS
printk
(
"lock creation
\n
"
);
#endif
down
(
&
s
->
u
.
hpfs_sb
.
hpfs_creation_de
);
down
(
&
hpfs_sb
(
s
)
->
hpfs_creation_de
);
}
void
hpfs_unlock_creation
(
struct
super_block
*
s
)
...
...
@@ -23,7 +23,7 @@ void hpfs_unlock_creation(struct super_block *s)
#ifdef DEBUG_LOCKS
printk
(
"unlock creation
\n
"
);
#endif
up
(
&
s
->
u
.
hpfs_sb
.
hpfs_creation_de
);
up
(
&
hpfs_sb
(
s
)
->
hpfs_creation_de
);
}
void
hpfs_lock_iget
(
struct
super_block
*
s
,
int
mode
)
...
...
@@ -31,8 +31,8 @@ void hpfs_lock_iget(struct super_block *s, int mode)
#ifdef DEBUG_LOCKS
printk
(
"lock iget
\n
"
);
#endif
while
(
s
->
s_hpfs_rd_inode
)
sleep_on
(
&
s
->
s_hpfs
_iget_q
);
s
->
s_hpfs
_rd_inode
=
mode
;
while
(
hpfs_sb
(
s
)
->
sb_rd_inode
)
sleep_on
(
&
hpfs_sb
(
s
)
->
sb
_iget_q
);
hpfs_sb
(
s
)
->
sb
_rd_inode
=
mode
;
}
void
hpfs_unlock_iget
(
struct
super_block
*
s
)
...
...
@@ -40,8 +40,8 @@ void hpfs_unlock_iget(struct super_block *s)
#ifdef DEBUG_LOCKS
printk
(
"unlock iget
\n
"
);
#endif
s
->
s_hpfs
_rd_inode
=
0
;
wake_up
(
&
s
->
s_hpfs
_iget_q
);
hpfs_sb
(
s
)
->
sb
_rd_inode
=
0
;
wake_up
(
&
hpfs_sb
(
s
)
->
sb
_iget_q
);
}
void
hpfs_lock_inode
(
struct
inode
*
i
)
...
...
fs/hpfs/dentry.c
View file @
40f51070
...
...
@@ -28,7 +28,7 @@ int hpfs_hash_dentry(struct dentry *dentry, struct qstr *qstr)
hash
=
init_name_hash
();
for
(
i
=
0
;
i
<
l
;
i
++
)
hash
=
partial_name_hash
(
hpfs_upcase
(
dentry
->
d_sb
->
s_hpfs
_cp_table
,
qstr
->
name
[
i
]),
hash
);
hash
=
partial_name_hash
(
hpfs_upcase
(
hpfs_sb
(
dentry
->
d_sb
)
->
sb
_cp_table
,
qstr
->
name
[
i
]),
hash
);
qstr
->
hash
=
end_name_hash
(
hash
);
return
0
;
...
...
fs/hpfs/dir.c
View file @
40f51070
...
...
@@ -65,7 +65,7 @@ int hpfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
int
c1
,
c2
=
0
;
int
ret
=
0
;
if
(
inode
->
i_sb
->
s_hpfs
_chk
)
{
if
(
hpfs_sb
(
inode
->
i_sb
)
->
sb
_chk
)
{
if
(
hpfs_chk_sectors
(
inode
->
i_sb
,
inode
->
i_ino
,
1
,
"dir_fnode"
))
{
ret
=
-
EFSERROR
;
goto
out
;
...
...
@@ -75,7 +75,7 @@ int hpfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
goto
out
;
}
}
if
(
inode
->
i_sb
->
s_hpfs
_chk
>=
2
)
{
if
(
hpfs_sb
(
inode
->
i_sb
)
->
sb
_chk
>=
2
)
{
struct
buffer_head
*
bh
;
struct
fnode
*
fno
;
int
e
=
0
;
...
...
@@ -97,7 +97,7 @@ int hpfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
goto
out
;
}
}
lc
=
inode
->
i_sb
->
s_hpfs
_lowercase
;
lc
=
hpfs_sb
(
inode
->
i_sb
)
->
sb
_lowercase
;
if
(
filp
->
f_pos
==
12
)
{
/* diff -r requires this (note, that diff -r */
filp
->
f_pos
=
13
;
/* also fails on msdos filesystem in 2.0) */
goto
out
;
...
...
@@ -114,7 +114,7 @@ int hpfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
/* This won't work when cycle is longer than number of dirents
accepted by filldir, but what can I do?
maybe killall -9 ls helps */
if
(
inode
->
i_sb
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
inode
->
i_sb
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
inode
->
i_sb
,
filp
->
f_pos
,
&
c1
,
&
c2
,
"hpfs_readdir"
))
{
hpfs_unlock_inode
(
inode
);
ret
=
-
EFSERROR
;
...
...
@@ -160,7 +160,7 @@ int hpfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
goto
out
;
}
if
(
de
->
first
||
de
->
last
)
{
if
(
inode
->
i_sb
->
s_hpfs
_chk
)
{
if
(
hpfs_sb
(
inode
->
i_sb
)
->
sb
_chk
)
{
if
(
de
->
first
&&
!
de
->
last
&&
(
de
->
namelen
!=
2
||
de
->
name
[
0
]
!=
1
||
de
->
name
[
1
]
!=
1
))
hpfs_error
(
inode
->
i_sb
,
"hpfs_readdir: bad ^A^A entry; pos = %08x"
,
old_pos
);
if
(
de
->
last
&&
(
de
->
namelen
!=
1
||
de
->
name
[
0
]
!=
255
))
hpfs_error
(
inode
->
i_sb
,
"hpfs_readdir: bad
\\
377 entry; pos = %08x"
,
old_pos
);
}
...
...
@@ -241,7 +241,7 @@ struct dentry *hpfs_lookup(struct inode *dir, struct dentry *dentry)
* Go find or make an inode.
*/
hpfs_lock_iget
(
dir
->
i_sb
,
de
->
directory
||
(
de
->
ea_size
&&
dir
->
i_sb
->
s_hpfs
_eas
)
?
1
:
2
);
hpfs_lock_iget
(
dir
->
i_sb
,
de
->
directory
||
(
de
->
ea_size
&&
hpfs_sb
(
dir
->
i_sb
)
->
sb
_eas
)
?
1
:
2
);
if
(
!
(
result
=
iget
(
dir
->
i_sb
,
ino
)))
{
hpfs_unlock_iget
(
dir
->
i_sb
);
hpfs_error
(
dir
->
i_sb
,
"hpfs_lookup: can't get inode"
);
...
...
fs/hpfs/dnode.c
View file @
40f51070
...
...
@@ -134,7 +134,7 @@ static void set_last_pointer(struct super_block *s, struct dnode *d, dnode_secno
hpfs_error
(
s
,
"set_last_pointer: empty dnode %08x"
,
d
->
self
);
return
;
}
if
(
s
->
s_hpfs
_chk
)
{
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
{
if
(
de
->
down
)
{
hpfs_error
(
s
,
"set_last_pointer: dnode %08x has already last pointer %08x"
,
d
->
self
,
de_down_pointer
(
de
));
...
...
@@ -253,7 +253,7 @@ int hpfs_add_to_dnode(struct inode *i, dnode_secno dno, unsigned char *name, uns
return
1
;
}
go_up_a:
if
(
i
->
i_sb
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
i
->
i_sb
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
i
->
i_sb
,
dno
,
&
c1
,
&
c2
,
"hpfs_add_to_dnode"
))
{
hpfs_brelse4
(
&
qbh
);
if
(
nd
)
kfree
(
nd
);
...
...
@@ -379,7 +379,7 @@ int hpfs_add_dirent(struct inode *i, unsigned char *name, unsigned namelen,
int
c1
,
c2
=
0
;
dno
=
hpfs_inode
->
i_dno
;
down:
if
(
i
->
i_sb
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
i
->
i_sb
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
i
->
i_sb
,
dno
,
&
c1
,
&
c2
,
"hpfs_add_dirent"
))
return
1
;
if
(
!
(
d
=
hpfs_map_dnode
(
i
->
i_sb
,
dno
,
&
qbh
)))
return
1
;
de_end
=
dnode_end_de
(
d
);
...
...
@@ -427,11 +427,11 @@ static secno move_to_top(struct inode *i, dnode_secno from, dnode_secno to)
int
c1
,
c2
=
0
;
dno
=
from
;
while
(
1
)
{
if
(
i
->
i_sb
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
i
->
i_sb
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
i
->
i_sb
,
dno
,
&
c1
,
&
c2
,
"move_to_top"
))
return
0
;
if
(
!
(
dnode
=
hpfs_map_dnode
(
i
->
i_sb
,
dno
,
&
qbh
)))
return
0
;
if
(
i
->
i_sb
->
s_hpfs
_chk
)
{
if
(
hpfs_sb
(
i
->
i_sb
)
->
sb
_chk
)
{
if
(
dnode
->
up
!=
chk_up
)
{
hpfs_error
(
i
->
i_sb
,
"move_to_top: up pointer from %08x should be %08x, is %08x"
,
dno
,
chk_up
,
dnode
->
up
);
...
...
@@ -519,7 +519,7 @@ static void delete_empty_dnode(struct inode *i, dnode_secno dno)
up
=
dnode
->
up
;
de
=
dnode_first_de
(
dnode
);
down
=
de
->
down
?
de_down_pointer
(
de
)
:
0
;
if
(
i
->
i_sb
->
s_hpfs
_chk
)
if
(
root
&&
!
down
)
{
if
(
hpfs_sb
(
i
->
i_sb
)
->
sb
_chk
)
if
(
root
&&
!
down
)
{
hpfs_error
(
i
->
i_sb
,
"delete_empty_dnode: root dnode %08x is empty"
,
dno
);
goto
end
;
}
...
...
@@ -532,7 +532,7 @@ static void delete_empty_dnode(struct inode *i, dnode_secno dno)
struct
buffer_head
*
bh
;
struct
dnode
*
d1
;
struct
quad_buffer_head
qbh1
;
if
(
i
->
i_sb
->
s_hpfs
_chk
)
if
(
up
!=
i
->
i_ino
)
{
if
(
hpfs_sb
(
i
->
i_sb
)
->
sb
_chk
)
if
(
up
!=
i
->
i_ino
)
{
hpfs_error
(
i
->
i_sb
,
"bad pointer to fnode, dnode %08x, pointing to %08x, should be %08x"
,
dno
,
up
,
i
->
i_ino
);
return
;
}
...
...
@@ -628,14 +628,14 @@ static void delete_empty_dnode(struct inode *i, dnode_secno dno)
dlp
=
del
->
down
?
de_down_pointer
(
del
)
:
0
;
if
(
!
dlp
&&
down
)
{
if
(
d1
->
first_free
>
2044
)
{
if
(
i
->
i_sb
->
s_hpfs
_chk
>=
2
)
{
if
(
hpfs_sb
(
i
->
i_sb
)
->
sb
_chk
>=
2
)
{
printk
(
"HPFS: warning: unbalanced dnode tree, see hpfs.txt 4 more info
\n
"
);
printk
(
"HPFS: warning: terminating balancing operation
\n
"
);
}
hpfs_brelse4
(
&
qbh1
);
goto
endm
;
}
if
(
i
->
i_sb
->
s_hpfs
_chk
>=
2
)
{
if
(
hpfs_sb
(
i
->
i_sb
)
->
sb
_chk
>=
2
)
{
printk
(
"HPFS: warning: unbalanced dnode tree, see hpfs.txt 4 more info
\n
"
);
printk
(
"HPFS: warning: goin'on
\n
"
);
}
...
...
@@ -738,12 +738,12 @@ void hpfs_count_dnodes(struct super_block *s, dnode_secno dno, int *n_dnodes,
int
d1
,
d2
=
0
;
go_down:
if
(
n_dnodes
)
(
*
n_dnodes
)
++
;
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
s
,
dno
,
&
c1
,
&
c2
,
"hpfs_count_dnodes #1"
))
return
;
ptr
=
0
;
go_up:
if
(
!
(
dnode
=
hpfs_map_dnode
(
s
,
dno
,
&
qbh
)))
return
;
if
(
s
->
s_hpfs
_chk
)
if
(
odno
&&
odno
!=
-
1
&&
dnode
->
up
!=
odno
)
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
odno
&&
odno
!=
-
1
&&
dnode
->
up
!=
odno
)
hpfs_error
(
s
,
"hpfs_count_dnodes: bad up pointer; dnode %08x, down %08x points to %08x"
,
odno
,
dno
,
dnode
->
up
);
de
=
dnode_first_de
(
dnode
);
if
(
ptr
)
while
(
1
)
{
...
...
@@ -774,7 +774,7 @@ void hpfs_count_dnodes(struct super_block *s, dnode_secno dno, int *n_dnodes,
return
;
}
hpfs_brelse4
(
&
qbh
);
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
s
,
ptr
,
&
d1
,
&
d2
,
"hpfs_count_dnodes #2"
))
return
;
odno
=
-
1
;
goto
go_up
;
...
...
@@ -811,11 +811,11 @@ dnode_secno hpfs_de_as_down_as_possible(struct super_block *s, dnode_secno dno)
int
c1
,
c2
=
0
;
again:
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
s
,
d
,
&
c1
,
&
c2
,
"hpfs_de_as_down_as_possible"
))
return
d
;
if
(
!
(
de
=
map_nth_dirent
(
s
,
d
,
1
,
&
qbh
,
NULL
)))
return
dno
;
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
up
&&
((
struct
dnode
*
)
qbh
.
data
)
->
up
!=
up
)
hpfs_error
(
s
,
"hpfs_de_as_down_as_possible: bad up pointer; dnode %08x, down %08x points to %08x"
,
up
,
d
,
((
struct
dnode
*
)
qbh
.
data
)
->
up
);
if
(
!
de
->
down
)
{
...
...
@@ -901,7 +901,7 @@ struct hpfs_dirent *map_dirent(struct inode *inode, dnode_secno dno, char *name,
if
(
!
S_ISDIR
(
inode
->
i_mode
))
hpfs_error
(
inode
->
i_sb
,
"map_dirent: not a directory
\n
"
);
again:
if
(
inode
->
i_sb
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
inode
->
i_sb
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
inode
->
i_sb
,
dno
,
&
c1
,
&
c2
,
"map_dirent"
))
return
NULL
;
if
(
!
(
dnode
=
hpfs_map_dnode
(
inode
->
i_sb
,
dno
,
qbh
)))
return
NULL
;
...
...
@@ -1046,7 +1046,7 @@ struct hpfs_dirent *map_fnode_dirent(struct super_block *s, fnode_secno fno,
if
(
c
<
0
&&
de
->
down
)
{
dno
=
de_down_pointer
(
de
);
hpfs_brelse4
(
qbh
);
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
s
,
dno
,
&
c1
,
&
c2
,
"map_fnode_dirent #1"
))
{
kfree
(
name2
);
return
NULL
;
...
...
@@ -1065,7 +1065,7 @@ struct hpfs_dirent *map_fnode_dirent(struct super_block *s, fnode_secno fno,
downd
=
dno
;
dno
=
d
->
up
;
hpfs_brelse4
(
qbh
);
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_stop_cycles
(
s
,
downd
,
&
d1
,
&
d2
,
"map_fnode_dirent #2"
))
{
kfree
(
name2
);
return
NULL
;
...
...
fs/hpfs/hpfs_fn.h
View file @
40f51070
...
...
@@ -13,6 +13,7 @@
#include <linux/fs.h>
#include <linux/hpfs_fs.h>
#include <linux/hpfs_fs_i.h>
#include <linux/hpfs_fs_sb.h>
#include <linux/errno.h>
#include <linux/slab.h>
#include <linux/kernel.h>
...
...
@@ -57,22 +58,6 @@
typedef
void
nonconst
;
/* What this is for ? */
/*
* local time (HPFS) to GMT (Unix)
*/
extern
inline
time_t
local_to_gmt
(
struct
super_block
*
s
,
time_t
t
)
{
extern
struct
timezone
sys_tz
;
return
t
+
sys_tz
.
tz_minuteswest
*
60
+
s
->
s_hpfs_timeshift
;
}
extern
inline
time_t
gmt_to_local
(
struct
super_block
*
s
,
time_t
t
)
{
extern
struct
timezone
sys_tz
;
return
t
-
sys_tz
.
tz_minuteswest
*
60
-
s
->
s_hpfs_timeshift
;
}
/*
* conv= options
*/
...
...
@@ -309,6 +294,11 @@ static inline struct hpfs_inode_info *hpfs_i(struct inode *inode)
return
list_entry
(
inode
,
struct
hpfs_inode_info
,
vfs_inode
);
}
static
inline
struct
hpfs_sb_info
*
hpfs_sb
(
struct
super_block
*
sb
)
{
return
sb
->
u
.
generic_sbp
;
}
/* super.c */
void
hpfs_error
(
struct
super_block
*
,
char
*
,
...);
...
...
@@ -319,3 +309,20 @@ unsigned hpfs_count_one_bitmap(struct super_block *, secno);
int
hpfs_statfs
(
struct
super_block
*
,
struct
statfs
*
);
extern
struct
address_space_operations
hpfs_aops
;
/*
* local time (HPFS) to GMT (Unix)
*/
extern
inline
time_t
local_to_gmt
(
struct
super_block
*
s
,
time_t
t
)
{
extern
struct
timezone
sys_tz
;
return
t
+
sys_tz
.
tz_minuteswest
*
60
+
hpfs_sb
(
s
)
->
sb_timeshift
;
}
extern
inline
time_t
gmt_to_local
(
struct
super_block
*
s
,
time_t
t
)
{
extern
struct
timezone
sys_tz
;
return
t
-
sys_tz
.
tz_minuteswest
*
60
-
hpfs_sb
(
s
)
->
sb_timeshift
;
}
fs/hpfs/inode.c
View file @
40f51070
...
...
@@ -66,10 +66,10 @@ void hpfs_read_inode(struct inode *i)
unsigned
char
*
ea
;
int
ea_size
;
i
->
i_uid
=
sb
->
s_hpfs
_uid
;
i
->
i_gid
=
sb
->
s_hpfs
_gid
;
i
->
i_mode
=
sb
->
s_hpfs
_mode
;
hpfs_inode
->
i_conv
=
sb
->
s_hpfs
_conv
;
i
->
i_uid
=
hpfs_sb
(
sb
)
->
sb
_uid
;
i
->
i_gid
=
hpfs_sb
(
sb
)
->
sb
_gid
;
i
->
i_mode
=
hpfs_sb
(
sb
)
->
sb
_mode
;
hpfs_inode
->
i_conv
=
hpfs_sb
(
sb
)
->
sb
_conv
;
i
->
i_blksize
=
512
;
i
->
i_size
=
-
1
;
i
->
i_blocks
=
-
1
;
...
...
@@ -93,9 +93,9 @@ void hpfs_read_inode(struct inode *i)
i
->
i_mtime
=
0
;
i
->
i_ctime
=
0
;
if
(
!
i
->
i_sb
->
s_hpfs
_rd_inode
)
hpfs_error
(
i
->
i_sb
,
"read_inode: s
_hpfs
_rd_inode == 0"
);
if
(
i
->
i_sb
->
s_hpfs
_rd_inode
==
2
)
{
if
(
!
hpfs_sb
(
i
->
i_sb
)
->
sb
_rd_inode
)
hpfs_error
(
i
->
i_sb
,
"read_inode: s
b
_rd_inode == 0"
);
if
(
hpfs_sb
(
i
->
i_sb
)
->
sb
_rd_inode
==
2
)
{
i
->
i_mode
|=
S_IFREG
;
i
->
i_mode
&=
~
0111
;
i
->
i_op
=
&
hpfs_file_iops
;
...
...
@@ -112,7 +112,7 @@ void hpfs_read_inode(struct inode *i)
make_bad_inode
(
i
);
return
;
}
if
(
i
->
i_sb
->
s_hpfs
_eas
)
{
if
(
hpfs_sb
(
i
->
i_sb
)
->
sb
_eas
)
{
if
((
ea
=
hpfs_get_ea
(
i
->
i_sb
,
fnode
,
"UID"
,
&
ea_size
)))
{
if
(
ea_size
==
2
)
{
i
->
i_uid
=
ea
[
0
]
+
(
ea
[
1
]
<<
8
);
...
...
@@ -140,7 +140,7 @@ void hpfs_read_inode(struct inode *i)
}
if
((
ea
=
hpfs_get_ea
(
i
->
i_sb
,
fnode
,
"MODE"
,
&
ea_size
)))
{
int
rdev
=
0
;
umode_t
mode
=
sb
->
s_hpfs
_mode
;
umode_t
mode
=
hpfs_sb
(
sb
)
->
sb
_mode
;
if
(
ea_size
==
2
)
{
mode
=
ea
[
0
]
+
(
ea
[
1
]
<<
8
);
hpfs_inode
->
i_ea_mode
=
1
;
...
...
@@ -171,7 +171,7 @@ void hpfs_read_inode(struct inode *i)
i
->
i_fop
=
&
hpfs_dir_ops
;
hpfs_inode
->
i_parent_dir
=
fnode
->
up
;
hpfs_inode
->
i_dno
=
fnode
->
u
.
external
[
0
].
disk_secno
;
if
(
sb
->
s_hpfs
_chk
>=
2
)
{
if
(
hpfs_sb
(
sb
)
->
sb
_chk
>=
2
)
{
struct
buffer_head
*
bh0
;
if
(
hpfs_map_fnode
(
sb
,
hpfs_inode
->
i_parent_dir
,
&
bh0
))
brelse
(
bh0
);
}
...
...
@@ -201,24 +201,24 @@ void hpfs_write_inode_ea(struct inode *i, struct fnode *fnode)
/* Some unknown structures like ACL may be in fnode,
we'd better not overwrite them */
hpfs_error
(
i
->
i_sb
,
"fnode %08x has some unknown HPFS386 stuctures"
,
i
->
i_ino
);
}
else
if
(
i
->
i_sb
->
s_hpfs
_eas
>=
2
)
{
}
else
if
(
hpfs_sb
(
i
->
i_sb
)
->
sb
_eas
>=
2
)
{
unsigned
char
ea
[
4
];
if
((
i
->
i_uid
!=
i
->
i_sb
->
s_hpfs
_uid
)
||
hpfs_inode
->
i_ea_uid
)
{
if
((
i
->
i_uid
!=
hpfs_sb
(
i
->
i_sb
)
->
sb
_uid
)
||
hpfs_inode
->
i_ea_uid
)
{
ea
[
0
]
=
i
->
i_uid
&
0xff
;
ea
[
1
]
=
i
->
i_uid
>>
8
;
hpfs_set_ea
(
i
,
fnode
,
"UID"
,
ea
,
2
);
hpfs_inode
->
i_ea_uid
=
1
;
}
if
((
i
->
i_gid
!=
i
->
i_sb
->
s_hpfs
_gid
)
||
hpfs_inode
->
i_ea_gid
)
{
if
((
i
->
i_gid
!=
hpfs_sb
(
i
->
i_sb
)
->
sb
_gid
)
||
hpfs_inode
->
i_ea_gid
)
{
ea
[
0
]
=
i
->
i_gid
&
0xff
;
ea
[
1
]
=
i
->
i_gid
>>
8
;
hpfs_set_ea
(
i
,
fnode
,
"GID"
,
ea
,
2
);
hpfs_inode
->
i_ea_gid
=
1
;
}
if
(
!
S_ISLNK
(
i
->
i_mode
))
if
((
i
->
i_mode
!=
((
i
->
i_sb
->
s_hpfs
_mode
&
~
(
S_ISDIR
(
i
->
i_mode
)
?
0
:
0111
))
if
((
i
->
i_mode
!=
((
hpfs_sb
(
i
->
i_sb
)
->
sb
_mode
&
~
(
S_ISDIR
(
i
->
i_mode
)
?
0
:
0111
))
|
(
S_ISDIR
(
i
->
i_mode
)
?
S_IFDIR
:
S_IFREG
))
&&
i
->
i_mode
!=
((
i
->
i_sb
->
s_hpfs
_mode
&
~
(
S_ISDIR
(
i
->
i_mode
)
?
0222
:
0333
))
&&
i
->
i_mode
!=
((
hpfs_sb
(
i
->
i_sb
)
->
sb
_mode
&
~
(
S_ISDIR
(
i
->
i_mode
)
?
0222
:
0333
))
|
(
S_ISDIR
(
i
->
i_mode
)
?
S_IFDIR
:
S_IFREG
)))
||
hpfs_inode
->
i_ea_mode
)
{
ea
[
0
]
=
i
->
i_mode
&
0xff
;
ea
[
1
]
=
i
->
i_mode
>>
8
;
...
...
@@ -241,7 +241,7 @@ void hpfs_write_inode(struct inode *i)
struct
hpfs_inode_info
*
hpfs_inode
=
hpfs_i
(
i
);
struct
inode
*
parent
;
if
(
!
i
->
i_nlink
)
return
;
if
(
i
->
i_ino
==
i
->
i_sb
->
s_hpfs
_root
)
return
;
if
(
i
->
i_ino
==
hpfs_sb
(
i
->
i_sb
)
->
sb
_root
)
return
;
if
(
hpfs_inode
->
i_rddir_off
&&
!
atomic_read
(
&
i
->
i_count
))
{
if
(
*
hpfs_inode
->
i_rddir_off
)
printk
(
"HPFS: write_inode: some position still there
\n
"
);
kfree
(
hpfs_inode
->
i_rddir_off
);
...
...
@@ -264,9 +264,9 @@ void hpfs_write_inode_nolock(struct inode *i)
struct
fnode
*
fnode
;
struct
quad_buffer_head
qbh
;
struct
hpfs_dirent
*
de
;
if
(
i
->
i_ino
==
i
->
i_sb
->
s_hpfs
_root
)
return
;
if
(
i
->
i_ino
==
hpfs_sb
(
i
->
i_sb
)
->
sb
_root
)
return
;
if
(
!
(
fnode
=
hpfs_map_fnode
(
i
->
i_sb
,
i
->
i_ino
,
&
bh
)))
return
;
if
(
i
->
i_ino
!=
i
->
i_sb
->
s_hpfs
_root
)
{
if
(
i
->
i_ino
!=
hpfs_sb
(
i
->
i_sb
)
->
sb
_root
)
{
if
(
!
(
de
=
map_fnode_dirent
(
i
->
i_sb
,
i
->
i_ino
,
fnode
,
&
qbh
)))
{
brelse
(
bh
);
return
;
...
...
@@ -309,7 +309,7 @@ int hpfs_notify_change(struct dentry *dentry, struct iattr *attr)
int
error
=
0
;
lock_kernel
();
if
(
((
attr
->
ia_valid
&
ATTR_SIZE
)
&&
attr
->
ia_size
>
inode
->
i_size
)
||
(
inode
->
i_sb
->
s_hpfs
_root
==
inode
->
i_ino
)
)
{
(
hpfs_sb
(
inode
->
i_sb
)
->
sb
_root
==
inode
->
i_ino
)
)
{
error
=
-
EINVAL
;
}
else
if
((
error
=
inode_change_ok
(
inode
,
attr
)))
{
}
else
if
((
error
=
inode_setattr
(
inode
,
attr
)))
{
...
...
fs/hpfs/map.c
View file @
40f51070
...
...
@@ -11,19 +11,19 @@
unsigned
*
hpfs_map_dnode_bitmap
(
struct
super_block
*
s
,
struct
quad_buffer_head
*
qbh
)
{
return
hpfs_map_4sectors
(
s
,
s
->
s_hpfs
_dmap
,
qbh
,
0
);
return
hpfs_map_4sectors
(
s
,
hpfs_sb
(
s
)
->
sb
_dmap
,
qbh
,
0
);
}
unsigned
int
*
hpfs_map_bitmap
(
struct
super_block
*
s
,
unsigned
bmp_block
,
struct
quad_buffer_head
*
qbh
,
char
*
id
)
{
secno
sec
;
if
(
s
->
s_hpfs_chk
)
if
(
bmp_block
*
16384
>
s
->
s_hpfs
_fs_size
)
{
if
(
hpfs_sb
(
s
)
->
sb_chk
)
if
(
bmp_block
*
16384
>
hpfs_sb
(
s
)
->
sb
_fs_size
)
{
hpfs_error
(
s
,
"hpfs_map_bitmap called with bad parameter: %08x at %s"
,
bmp_block
,
id
);
return
NULL
;
}
sec
=
s
->
s_hpfs
_bmp_dir
[
bmp_block
];
if
(
!
sec
||
sec
>
s
->
s_hpfs
_fs_size
-
4
)
{
sec
=
hpfs_sb
(
s
)
->
sb
_bmp_dir
[
bmp_block
];
if
(
!
sec
||
sec
>
hpfs_sb
(
s
)
->
sb
_fs_size
-
4
)
{
hpfs_error
(
s
,
"invalid bitmap block pointer %08x -> %08x at %s"
,
bmp_block
,
sec
,
id
);
return
NULL
;
}
...
...
@@ -93,7 +93,7 @@ char *hpfs_load_code_page(struct super_block *s, secno cps)
secno
*
hpfs_load_bitmap_directory
(
struct
super_block
*
s
,
secno
bmp
)
{
struct
buffer_head
*
bh
;
int
n
=
(
s
->
s_hpfs
_fs_size
+
0x200000
-
1
)
>>
21
;
int
n
=
(
hpfs_sb
(
s
)
->
sb
_fs_size
+
0x200000
-
1
)
>>
21
;
int
i
;
secno
*
b
;
if
(
!
(
b
=
kmalloc
(
n
*
512
,
GFP_KERNEL
)))
{
...
...
@@ -119,11 +119,11 @@ secno *hpfs_load_bitmap_directory(struct super_block *s, secno bmp)
struct
fnode
*
hpfs_map_fnode
(
struct
super_block
*
s
,
ino_t
ino
,
struct
buffer_head
**
bhp
)
{
struct
fnode
*
fnode
;
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_chk_sectors
(
s
,
ino
,
1
,
"fnode"
))
{
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_chk_sectors
(
s
,
ino
,
1
,
"fnode"
))
{
return
NULL
;
}
if
((
fnode
=
hpfs_map_sector
(
s
,
ino
,
bhp
,
FNODE_RD_AHEAD
)))
{
if
(
s
->
s_hpfs
_chk
)
{
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
{
struct
extended_attribute
*
ea
;
struct
extended_attribute
*
ea_end
;
if
(
fnode
->
magic
!=
FNODE_MAGIC
)
{
...
...
@@ -168,9 +168,9 @@ struct fnode *hpfs_map_fnode(struct super_block *s, ino_t ino, struct buffer_hea
struct
anode
*
hpfs_map_anode
(
struct
super_block
*
s
,
anode_secno
ano
,
struct
buffer_head
**
bhp
)
{
struct
anode
*
anode
;
if
(
s
->
s_hpfs
_chk
)
if
(
hpfs_chk_sectors
(
s
,
ano
,
1
,
"anode"
))
return
NULL
;
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
if
(
hpfs_chk_sectors
(
s
,
ano
,
1
,
"anode"
))
return
NULL
;
if
((
anode
=
hpfs_map_sector
(
s
,
ano
,
bhp
,
ANODE_RD_AHEAD
)))
if
(
s
->
s_hpfs
_chk
)
{
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
{
if
(
anode
->
magic
!=
ANODE_MAGIC
||
anode
->
self
!=
ano
)
{
hpfs_error
(
s
,
"bad magic on anode %08x"
,
ano
);
goto
bail
;
...
...
@@ -200,7 +200,7 @@ struct dnode *hpfs_map_dnode(struct super_block *s, unsigned secno,
struct
quad_buffer_head
*
qbh
)
{
struct
dnode
*
dnode
;
if
(
s
->
s_hpfs
_chk
)
{
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
{
if
(
hpfs_chk_sectors
(
s
,
secno
,
4
,
"dnode"
))
return
NULL
;
if
(
secno
&
3
)
{
hpfs_error
(
s
,
"dnode %08x not byte-aligned"
,
secno
);
...
...
@@ -208,7 +208,7 @@ struct dnode *hpfs_map_dnode(struct super_block *s, unsigned secno,
}
}
if
((
dnode
=
hpfs_map_4sectors
(
s
,
secno
,
qbh
,
DNODE_RD_AHEAD
)))
if
(
s
->
s_hpfs
_chk
)
{
if
(
hpfs_sb
(
s
)
->
sb
_chk
)
{
unsigned
p
,
pp
=
0
;
unsigned
char
*
d
=
(
char
*
)
dnode
;
int
b
=
0
;
...
...
@@ -234,7 +234,7 @@ struct dnode *hpfs_map_dnode(struct super_block *s, unsigned secno,
hpfs_error
(
s
,
"namelen does not match dirent size in dnode %08x, dirent %03x, last %03x"
,
secno
,
p
,
pp
);
goto
bail
;
}
if
(
s
->
s_hpfs
_chk
>=
2
)
b
|=
1
<<
de
->
down
;
if
(
hpfs_sb
(
s
)
->
sb
_chk
>=
2
)
b
|=
1
<<
de
->
down
;
if
(
de
->
down
)
if
(
de_down_pointer
(
de
)
<
0x10
)
{
hpfs_error
(
s
,
"bad down pointer in dnode %08x, dirent %03x, last %03x"
,
secno
,
p
,
pp
);
goto
bail
;
...
...
fs/hpfs/name.c
View file @
40f51070
...
...
@@ -89,7 +89,7 @@ char *hpfs_translate_name(struct super_block *s, unsigned char *from,
{
char
*
to
;
int
i
;
if
(
s
->
s_hpfs
_chk
>=
2
)
if
(
hpfs_is_name_long
(
from
,
len
)
!=
lng
)
{
if
(
hpfs_sb
(
s
)
->
sb
_chk
>=
2
)
if
(
hpfs_is_name_long
(
from
,
len
)
!=
lng
)
{
printk
(
"HPFS: Long name flag mismatch - name "
);
for
(
i
=
0
;
i
<
len
;
i
++
)
printk
(
"%c"
,
from
[
i
]);
printk
(
" misidentified as %s.
\n
"
,
lng
?
"short"
:
"long"
);
...
...
@@ -100,7 +100,7 @@ char *hpfs_translate_name(struct super_block *s, unsigned char *from,
printk
(
"HPFS: can't allocate memory for name conversion buffer
\n
"
);
return
from
;
}
for
(
i
=
0
;
i
<
len
;
i
++
)
to
[
i
]
=
locase
(
s
->
s_hpfs
_cp_table
,
from
[
i
]);
for
(
i
=
0
;
i
<
len
;
i
++
)
to
[
i
]
=
locase
(
hpfs_sb
(
s
)
->
sb
_cp_table
,
from
[
i
]);
return
to
;
}
...
...
@@ -111,8 +111,8 @@ int hpfs_compare_names(struct super_block *s, unsigned char *n1, unsigned l1,
unsigned
i
;
if
(
last
)
return
-
1
;
for
(
i
=
0
;
i
<
l
;
i
++
)
{
unsigned
char
c1
=
upcase
(
s
->
s_hpfs
_cp_table
,
n1
[
i
]);
unsigned
char
c2
=
upcase
(
s
->
s_hpfs
_cp_table
,
n2
[
i
]);
unsigned
char
c1
=
upcase
(
hpfs_sb
(
s
)
->
sb
_cp_table
,
n1
[
i
]);
unsigned
char
c2
=
upcase
(
hpfs_sb
(
s
)
->
sb
_cp_table
,
n2
[
i
]);
if
(
c1
<
c2
)
return
-
1
;
if
(
c1
>
c2
)
return
1
;
}
...
...
fs/hpfs/namei.c
View file @
40f51070
...
...
@@ -187,7 +187,7 @@ int hpfs_mknod(struct inode *dir, struct dentry *dentry, int mode, int rdev)
struct
inode
*
result
=
NULL
;
int
err
;
if
((
err
=
hpfs_chk_name
((
char
*
)
name
,
&
len
)))
return
err
==-
ENOENT
?
-
EINVAL
:
err
;
if
(
dir
->
i_sb
->
s_hpfs
_eas
<
2
)
return
-
EPERM
;
if
(
hpfs_sb
(
dir
->
i_sb
)
->
sb
_eas
<
2
)
return
-
EPERM
;
lock_kernel
();
if
(
!
(
fnode
=
hpfs_alloc_fnode
(
dir
->
i_sb
,
hpfs_i
(
dir
)
->
i_dno
,
&
fno
,
&
bh
)))
goto
bail
;
memset
(
&
dee
,
0
,
sizeof
dee
);
...
...
@@ -255,7 +255,7 @@ int hpfs_symlink(struct inode *dir, struct dentry *dentry, const char *symlink)
int
err
;
if
((
err
=
hpfs_chk_name
((
char
*
)
name
,
&
len
)))
return
err
==-
ENOENT
?
-
EINVAL
:
err
;
lock_kernel
();
if
(
dir
->
i_sb
->
s_hpfs
_eas
<
2
)
{
if
(
hpfs_sb
(
dir
->
i_sb
)
->
sb
_eas
<
2
)
{
unlock_kernel
();
return
-
EPERM
;
}
...
...
@@ -559,7 +559,7 @@ int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry,
mark_buffer_dirty
(
bh
);
brelse
(
bh
);
}
hpfs_i
(
i
)
->
i_conv
=
i
->
i_sb
->
s_hpfs
_conv
;
hpfs_i
(
i
)
->
i_conv
=
hpfs_sb
(
i
->
i_sb
)
->
sb
_conv
;
hpfs_decide_conv
(
i
,
(
char
*
)
new_name
,
new_len
);
end1:
hpfs_unlock_3inodes
(
old_dir
,
new_dir
,
i
);
...
...
fs/hpfs/super.c
View file @
40f51070
...
...
@@ -16,7 +16,7 @@
static
void
mark_dirty
(
struct
super_block
*
s
)
{
if
(
s
->
s_hpfs
_chkdsk
&&
!
(
s
->
s_flags
&
MS_RDONLY
))
{
if
(
hpfs_sb
(
s
)
->
sb
_chkdsk
&&
!
(
s
->
s_flags
&
MS_RDONLY
))
{
struct
buffer_head
*
bh
;
struct
hpfs_spare_block
*
sb
;
if
((
sb
=
hpfs_map_sector
(
s
,
17
,
&
bh
,
0
)))
{
...
...
@@ -37,8 +37,8 @@ static void unmark_dirty(struct super_block *s)
struct
hpfs_spare_block
*
sb
;
if
(
s
->
s_flags
&
MS_RDONLY
)
return
;
if
((
sb
=
hpfs_map_sector
(
s
,
17
,
&
bh
,
0
)))
{
sb
->
dirty
=
s
->
s_hpfs_chkdsk
>
1
-
s
->
s_hpfs
_was_error
;
sb
->
old_wrote
=
s
->
s_hpfs_chkdsk
>=
2
&&
!
s
->
s_hpfs
_was_error
;
sb
->
dirty
=
hpfs_sb
(
s
)
->
sb_chkdsk
>
1
-
hpfs_sb
(
s
)
->
sb
_was_error
;
sb
->
old_wrote
=
hpfs_sb
(
s
)
->
sb_chkdsk
>=
2
&&
!
hpfs_sb
(
s
)
->
sb
_was_error
;
mark_buffer_dirty
(
bh
);
brelse
(
bh
);
}
...
...
@@ -60,12 +60,12 @@ void hpfs_error(struct super_block *s, char *m,...)
printk
(
"HPFS: filesystem error: "
);
if
(
buf
)
printk
(
"%s"
,
buf
);
else
printk
(
"%s
\n
"
,
m
);
if
(
!
s
->
s_hpfs
_was_error
)
{
if
(
s
->
s_hpfs
_err
==
2
)
{
if
(
!
hpfs_sb
(
s
)
->
sb
_was_error
)
{
if
(
hpfs_sb
(
s
)
->
sb
_err
==
2
)
{
printk
(
"; crashing the system because you wanted it
\n
"
);
mark_dirty
(
s
);
panic
(
"HPFS panic"
);
}
else
if
(
s
->
s_hpfs
_err
==
1
)
{
}
else
if
(
hpfs_sb
(
s
)
->
sb
_err
==
1
)
{
if
(
s
->
s_flags
&
MS_RDONLY
)
printk
(
"; already mounted read-only
\n
"
);
else
{
printk
(
"; remounting read-only
\n
"
);
...
...
@@ -76,7 +76,7 @@ void hpfs_error(struct super_block *s, char *m,...)
else
printk
(
"; corrupted filesystem mounted read/write - your computer will explode within 20 seconds ... but you wanted it so!
\n
"
);
}
else
printk
(
"
\n
"
);
if
(
buf
)
kfree
(
buf
);
s
->
s_hpfs
_was_error
=
1
;
hpfs_sb
(
s
)
->
sb
_was_error
=
1
;
}
/*
...
...
@@ -101,9 +101,12 @@ int hpfs_stop_cycles(struct super_block *s, int key, int *c1, int *c2,
void
hpfs_put_super
(
struct
super_block
*
s
)
{
if
(
s
->
s_hpfs_cp_table
)
kfree
(
s
->
s_hpfs_cp_table
);
if
(
s
->
s_hpfs_bmp_dir
)
kfree
(
s
->
s_hpfs_bmp_dir
);
struct
hpfs_sb_info
*
sbi
=
hpfs_sb
(
s
);
if
(
sbi
->
sb_cp_table
)
kfree
(
sbi
->
sb_cp_table
);
if
(
sbi
->
sb_bmp_dir
)
kfree
(
sbi
->
sb_bmp_dir
);
unmark_dirty
(
s
);
s
->
u
.
generic_sbp
=
NULL
;
kfree
(
sbi
);
}
unsigned
hpfs_count_one_bitmap
(
struct
super_block
*
s
,
secno
secno
)
...
...
@@ -125,28 +128,29 @@ unsigned hpfs_count_one_bitmap(struct super_block *s, secno secno)
static
unsigned
count_bitmaps
(
struct
super_block
*
s
)
{
unsigned
n
,
count
,
n_bands
;
n_bands
=
(
s
->
s_hpfs
_fs_size
+
0x3fff
)
>>
14
;
n_bands
=
(
hpfs_sb
(
s
)
->
sb
_fs_size
+
0x3fff
)
>>
14
;
count
=
0
;
for
(
n
=
0
;
n
<
n_bands
;
n
++
)
count
+=
hpfs_count_one_bitmap
(
s
,
s
->
s_hpfs
_bmp_dir
[
n
]);
count
+=
hpfs_count_one_bitmap
(
s
,
hpfs_sb
(
s
)
->
sb
_bmp_dir
[
n
]);
return
count
;
}
int
hpfs_statfs
(
struct
super_block
*
s
,
struct
statfs
*
buf
)
{
struct
hpfs_sb_info
*
sbi
=
hpfs_sb
(
s
);
lock_kernel
();
/*if (s
->s_hpfs
_n_free == -1) {*/
s
->
s_hpfs
_n_free
=
count_bitmaps
(
s
);
s
->
s_hpfs_n_free_dnodes
=
hpfs_count_one_bitmap
(
s
,
s
->
s_hpfs
_dmap
);
/*if (s
bi->sb
_n_free == -1) {*/
s
bi
->
sb
_n_free
=
count_bitmaps
(
s
);
s
bi
->
sb_n_free_dnodes
=
hpfs_count_one_bitmap
(
s
,
sbi
->
sb
_dmap
);
/*}*/
buf
->
f_type
=
s
->
s_magic
;
buf
->
f_bsize
=
512
;
buf
->
f_blocks
=
s
->
s_hpfs
_fs_size
;
buf
->
f_bfree
=
s
->
s_hpfs
_n_free
;
buf
->
f_bavail
=
s
->
s_hpfs
_n_free
;
buf
->
f_files
=
s
->
s_hpfs
_dirband_size
/
4
;
buf
->
f_ffree
=
s
->
s_hpfs
_n_free_dnodes
;
buf
->
f_blocks
=
s
bi
->
sb
_fs_size
;
buf
->
f_bfree
=
s
bi
->
sb
_n_free
;
buf
->
f_bavail
=
s
bi
->
sb
_n_free
;
buf
->
f_files
=
s
bi
->
sb
_dirband_size
/
4
;
buf
->
f_ffree
=
s
bi
->
sb
_n_free_dnodes
;
buf
->
f_namelen
=
254
;
unlock_kernel
();
...
...
@@ -377,14 +381,15 @@ int hpfs_remount_fs(struct super_block *s, int *flags, char *data)
umode_t
umask
;
int
lowercase
,
conv
,
eas
,
chk
,
errs
,
chkdsk
,
timeshift
;
int
o
;
struct
hpfs_sb_info
*
sbi
=
hpfs_sb
(
s
);
*
flags
|=
MS_NOATIME
;
uid
=
s
->
s_hpfs_uid
;
gid
=
s
->
s_hpfs
_gid
;
umask
=
0777
&
~
s
->
s_hpfs
_mode
;
lowercase
=
s
->
s_hpfs_lowercase
;
conv
=
s
->
s_hpfs
_conv
;
eas
=
s
->
s_hpfs_eas
;
chk
=
s
->
s_hpfs_chk
;
chkdsk
=
s
->
s_hpfs
_chkdsk
;
errs
=
s
->
s_hpfs_err
;
timeshift
=
s
->
s_hpfs
_timeshift
;
uid
=
s
bi
->
sb_uid
;
gid
=
sbi
->
sb
_gid
;
umask
=
0777
&
~
s
bi
->
sb
_mode
;
lowercase
=
s
bi
->
sb_lowercase
;
conv
=
sbi
->
sb
_conv
;
eas
=
s
bi
->
sb_eas
;
chk
=
sbi
->
sb_chk
;
chkdsk
=
sbi
->
sb
_chkdsk
;
errs
=
s
bi
->
sb_err
;
timeshift
=
sbi
->
sb
_timeshift
;
if
(
!
(
o
=
parse_opts
(
data
,
&
uid
,
&
gid
,
&
umask
,
&
lowercase
,
&
conv
,
&
eas
,
&
chk
,
&
errs
,
&
chkdsk
,
&
timeshift
)))
{
...
...
@@ -395,18 +400,18 @@ int hpfs_remount_fs(struct super_block *s, int *flags, char *data)
hpfs_help
();
return
1
;
}
if
(
timeshift
!=
s
->
s_hpfs
_timeshift
)
{
if
(
timeshift
!=
s
bi
->
sb
_timeshift
)
{
printk
(
"HPFS: timeshift can't be changed using remount.
\n
"
);
return
1
;
}
unmark_dirty
(
s
);
s
->
s_hpfs_uid
=
uid
;
s
->
s_hpfs
_gid
=
gid
;
s
->
s_hpfs
_mode
=
0777
&
~
umask
;
s
->
s_hpfs_lowercase
=
lowercase
;
s
->
s_hpfs
_conv
=
conv
;
s
->
s_hpfs_eas
=
eas
;
s
->
s_hpfs_chk
=
chk
;
s
->
s_hpfs
_chkdsk
=
chkdsk
;
s
->
s_hpfs_err
=
errs
;
s
->
s_hpfs
_timeshift
=
timeshift
;
s
bi
->
sb_uid
=
uid
;
sbi
->
sb
_gid
=
gid
;
s
bi
->
sb
_mode
=
0777
&
~
umask
;
s
bi
->
sb_lowercase
=
lowercase
;
sbi
->
sb
_conv
=
conv
;
s
bi
->
sb_eas
=
eas
;
sbi
->
sb_chk
=
chk
;
sbi
->
sb
_chkdsk
=
chkdsk
;
s
bi
->
sb_err
=
errs
;
sbi
->
sb
_timeshift
=
timeshift
;
if
(
!
(
*
flags
&
MS_RDONLY
))
mark_dirty
(
s
);
...
...
@@ -419,6 +424,7 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
struct
hpfs_boot_block
*
bootblock
;
struct
hpfs_super_block
*
superblock
;
struct
hpfs_spare_block
*
spareblock
;
struct
hpfs_sb_info
*
sbi
;
uid_t
uid
;
gid_t
gid
;
...
...
@@ -431,12 +437,18 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
int
o
;
s
->
s_hpfs_bmp_dir
=
NULL
;
s
->
s_hpfs_cp_table
=
NULL
;
sbi
=
kmalloc
(
sizeof
(
*
sbi
),
GFP_KERNEL
);
if
(
!
sbi
)
return
-
ENOMEM
;
s
->
u
.
generic_sbp
=
sbi
;
memset
(
sbi
,
0
,
sizeof
(
*
sbi
));
sbi
->
sb_bmp_dir
=
NULL
;
sbi
->
sb_cp_table
=
NULL
;
s
->
s_hpfs
_rd_inode
=
0
;
init_MUTEX
(
&
s
->
u
.
hpfs_sb
.
hpfs_creation_de
);
init_waitqueue_head
(
&
s
->
s_hpfs
_iget_q
);
s
bi
->
sb
_rd_inode
=
0
;
init_MUTEX
(
&
s
bi
->
hpfs_creation_de
);
init_waitqueue_head
(
&
s
bi
->
sb
_iget_q
);
uid
=
current
->
uid
;
gid
=
current
->
gid
;
...
...
@@ -459,9 +471,9 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
goto
bail0
;
}
/*s
->s_hpfs
_mounting = 1;*/
/*s
bi->sb
_mounting = 1;*/
sb_set_blocksize
(
s
,
512
);
s
->
s_hpfs
_fs_size
=
-
1
;
s
bi
->
sb
_fs_size
=
-
1
;
if
(
!
(
bootblock
=
hpfs_map_sector
(
s
,
0
,
&
bh0
,
0
)))
goto
bail1
;
if
(
!
(
superblock
=
hpfs_map_sector
(
s
,
16
,
&
bh1
,
1
)))
goto
bail2
;
if
(
!
(
spareblock
=
hpfs_map_sector
(
s
,
17
,
&
bh2
,
0
)))
goto
bail3
;
...
...
@@ -489,30 +501,30 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
s
->
s_magic
=
HPFS_SUPER_MAGIC
;
s
->
s_op
=
&
hpfs_sops
;
s
->
s_hpfs
_root
=
superblock
->
root
;
s
->
s_hpfs
_fs_size
=
superblock
->
n_sectors
;
s
->
s_hpfs
_bitmaps
=
superblock
->
bitmaps
;
s
->
s_hpfs
_dirband_start
=
superblock
->
dir_band_start
;
s
->
s_hpfs
_dirband_size
=
superblock
->
n_dir_band
;
s
->
s_hpfs
_dmap
=
superblock
->
dir_band_bitmap
;
s
->
s_hpfs
_uid
=
uid
;
s
->
s_hpfs
_gid
=
gid
;
s
->
s_hpfs
_mode
=
0777
&
~
umask
;
s
->
s_hpfs
_n_free
=
-
1
;
s
->
s_hpfs
_n_free_dnodes
=
-
1
;
s
->
s_hpfs
_lowercase
=
lowercase
;
s
->
s_hpfs
_conv
=
conv
;
s
->
s_hpfs
_eas
=
eas
;
s
->
s_hpfs
_chk
=
chk
;
s
->
s_hpfs
_chkdsk
=
chkdsk
;
s
->
s_hpfs
_err
=
errs
;
s
->
s_hpfs
_timeshift
=
timeshift
;
s
->
s_hpfs
_was_error
=
0
;
s
->
s_hpfs
_cp_table
=
NULL
;
s
->
s_hpfs
_c_bitmap
=
-
1
;
s
bi
->
sb
_root
=
superblock
->
root
;
s
bi
->
sb
_fs_size
=
superblock
->
n_sectors
;
s
bi
->
sb
_bitmaps
=
superblock
->
bitmaps
;
s
bi
->
sb
_dirband_start
=
superblock
->
dir_band_start
;
s
bi
->
sb
_dirband_size
=
superblock
->
n_dir_band
;
s
bi
->
sb
_dmap
=
superblock
->
dir_band_bitmap
;
s
bi
->
sb
_uid
=
uid
;
s
bi
->
sb
_gid
=
gid
;
s
bi
->
sb
_mode
=
0777
&
~
umask
;
s
bi
->
sb
_n_free
=
-
1
;
s
bi
->
sb
_n_free_dnodes
=
-
1
;
s
bi
->
sb
_lowercase
=
lowercase
;
s
bi
->
sb
_conv
=
conv
;
s
bi
->
sb
_eas
=
eas
;
s
bi
->
sb
_chk
=
chk
;
s
bi
->
sb
_chkdsk
=
chkdsk
;
s
bi
->
sb
_err
=
errs
;
s
bi
->
sb
_timeshift
=
timeshift
;
s
bi
->
sb
_was_error
=
0
;
s
bi
->
sb
_cp_table
=
NULL
;
s
bi
->
sb
_c_bitmap
=
-
1
;
/* Load bitmap directory */
if
(
!
(
s
->
s_hpfs
_bmp_dir
=
hpfs_load_bitmap_directory
(
s
,
superblock
->
bitmaps
)))
if
(
!
(
s
bi
->
sb
_bmp_dir
=
hpfs_load_bitmap_directory
(
s
,
superblock
->
bitmaps
)))
goto
bail4
;
/* Check for general fs errors*/
...
...
@@ -557,20 +569,20 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
superblock
->
dir_band_start
,
superblock
->
dir_band_end
,
superblock
->
n_dir_band
);
goto
bail4
;
}
a
=
s
->
s_hpfs
_dirband_size
;
s
->
s_hpfs
_dirband_size
=
0
;
a
=
s
bi
->
sb
_dirband_size
;
s
bi
->
sb
_dirband_size
=
0
;
if
(
hpfs_chk_sectors
(
s
,
superblock
->
dir_band_start
,
superblock
->
n_dir_band
,
"dir_band"
)
||
hpfs_chk_sectors
(
s
,
superblock
->
dir_band_bitmap
,
4
,
"dir_band_bitmap"
)
||
hpfs_chk_sectors
(
s
,
superblock
->
bitmaps
,
4
,
"bitmaps"
))
{
mark_dirty
(
s
);
goto
bail4
;
}
s
->
s_hpfs
_dirband_size
=
a
;
s
bi
->
sb
_dirband_size
=
a
;
}
else
printk
(
"HPFS: You really don't want any checks? You are crazy...
\n
"
);
/* Load code page table */
if
(
spareblock
->
n_code_pages
)
if
(
!
(
s
->
s_hpfs
_cp_table
=
hpfs_load_code_page
(
s
,
spareblock
->
code_page_dir
)))
if
(
!
(
s
bi
->
sb
_cp_table
=
hpfs_load_code_page
(
s
,
spareblock
->
code_page_dir
)))
printk
(
"HPFS: Warning: code page support is disabled
\n
"
);
brelse
(
bh2
);
...
...
@@ -578,7 +590,7 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
brelse
(
bh0
);
hpfs_lock_iget
(
s
,
1
);
s
->
s_root
=
d_alloc_root
(
iget
(
s
,
s
->
s_hpfs
_root
));
s
->
s_root
=
d_alloc_root
(
iget
(
s
,
s
bi
->
sb
_root
));
hpfs_unlock_iget
(
s
);
if
(
!
s
->
s_root
||
!
s
->
s_root
->
d_inode
)
{
printk
(
"HPFS: iget failed. Why???
\n
"
);
...
...
@@ -590,7 +602,7 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
* find the root directory's . pointer & finish filling in the inode
*/
root_dno
=
hpfs_fnode_dno
(
s
,
s
->
s_hpfs
_root
);
root_dno
=
hpfs_fnode_dno
(
s
,
s
bi
->
sb
_root
);
if
(
root_dno
)
de
=
map_dirent
(
s
->
s_root
->
d_inode
,
root_dno
,
"
\001\001
"
,
2
,
NULL
,
&
qbh
);
if
(
!
root_dno
||
!
de
)
hpfs_error
(
s
,
"unable to find root dir"
);
...
...
@@ -612,8 +624,10 @@ bail3: brelse(bh1);
bail2:
brelse
(
bh0
);
bail1:
bail0:
if
(
s
->
s_hpfs_bmp_dir
)
kfree
(
s
->
s_hpfs_bmp_dir
);
if
(
s
->
s_hpfs_cp_table
)
kfree
(
s
->
s_hpfs_cp_table
);
if
(
sbi
->
sb_bmp_dir
)
kfree
(
sbi
->
sb_bmp_dir
);
if
(
sbi
->
sb_cp_table
)
kfree
(
sbi
->
sb_cp_table
);
s
->
u
.
generic_sbp
=
NULL
;
kfree
(
sbi
);
return
-
EINVAL
;
}
...
...
include/linux/fs.h
View file @
40f51070
...
...
@@ -628,7 +628,6 @@ extern int send_sigurg(struct fown_struct *fown);
#define MNT_DETACH 0x00000002
/* Just detach from the tree */
#include <linux/ext3_fs_sb.h>
#include <linux/hpfs_fs_sb.h>
extern
struct
list_head
super_blocks
;
extern
spinlock_t
sb_lock
;
...
...
@@ -671,7 +670,6 @@ struct super_block {
union
{
struct
ext3_sb_info
ext3_sb
;
struct
hpfs_sb_info
hpfs_sb
;
void
*
generic_sbp
;
}
u
;
/*
...
...
include/linux/hpfs_fs_sb.h
View file @
40f51070
...
...
@@ -36,31 +36,4 @@ struct hpfs_sb_info {
int
sb_timeshift
;
};
#define s_hpfs_root u.hpfs_sb.sb_root
#define s_hpfs_fs_size u.hpfs_sb.sb_fs_size
#define s_hpfs_bitmaps u.hpfs_sb.sb_bitmaps
#define s_hpfs_dirband_start u.hpfs_sb.sb_dirband_start
#define s_hpfs_dirband_size u.hpfs_sb.sb_dirband_size
#define s_hpfs_dmap u.hpfs_sb.sb_dmap
#define s_hpfs_uid u.hpfs_sb.sb_uid
#define s_hpfs_gid u.hpfs_sb.sb_gid
#define s_hpfs_mode u.hpfs_sb.sb_mode
#define s_hpfs_n_free u.hpfs_sb.sb_n_free
#define s_hpfs_n_free_dnodes u.hpfs_sb.sb_n_free_dnodes
#define s_hpfs_lowercase u.hpfs_sb.sb_lowercase
#define s_hpfs_conv u.hpfs_sb.sb_conv
#define s_hpfs_eas u.hpfs_sb.sb_eas
#define s_hpfs_err u.hpfs_sb.sb_err
#define s_hpfs_chk u.hpfs_sb.sb_chk
#define s_hpfs_was_error u.hpfs_sb.sb_was_error
#define s_hpfs_chkdsk u.hpfs_sb.sb_chkdsk
/*#define s_hpfs_rd_fnode u.hpfs_sb.sb_rd_fnode*/
#define s_hpfs_rd_inode u.hpfs_sb.sb_rd_inode
#define s_hpfs_cp_table u.hpfs_sb.sb_cp_table
#define s_hpfs_bmp_dir u.hpfs_sb.sb_bmp_dir
#define s_hpfs_c_bitmap u.hpfs_sb.sb_c_bitmap
#define s_hpfs_iget_q u.hpfs_sb.sb_iget_q
/*#define s_hpfs_mounting u.hpfs_sb.sb_mounting*/
#define s_hpfs_timeshift u.hpfs_sb.sb_timeshift
#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