Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
136b6223
Commit
136b6223
authored
22 years ago
by
Dave Jones
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] UFS superblock cleanup.
This one from Brian Gerst seperates UFS from the struct superblock union.
parent
6424ea03
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
203 additions
and
174 deletions
+203
-174
fs/ufs/balloc.c
fs/ufs/balloc.c
+24
-24
fs/ufs/cylinder.c
fs/ufs/cylinder.c
+38
-35
fs/ufs/dir.c
fs/ufs/dir.c
+4
-4
fs/ufs/ialloc.c
fs/ufs/ialloc.c
+11
-9
fs/ufs/inode.c
fs/ufs/inode.c
+9
-9
fs/ufs/namei.c
fs/ufs/namei.c
+1
-1
fs/ufs/super.c
fs/ufs/super.c
+78
-60
fs/ufs/swab.h
fs/ufs/swab.h
+12
-12
fs/ufs/truncate.c
fs/ufs/truncate.c
+5
-5
fs/ufs/util.h
fs/ufs/util.h
+13
-13
include/linux/ufs_fs.h
include/linux/ufs_fs.h
+8
-2
No files found.
fs/ufs/balloc.c
View file @
136b6223
...
...
@@ -47,7 +47,7 @@ void ufs_free_fragments (struct inode * inode, unsigned fragment, unsigned count
unsigned
cgno
,
bit
,
end_bit
,
bbase
,
blkmap
,
i
,
blkno
,
cylno
;
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
UFSD
((
"ENTER, fragment %u, count %u
\n
"
,
fragment
,
count
))
...
...
@@ -89,7 +89,7 @@ void ufs_free_fragments (struct inode * inode, unsigned fragment, unsigned count
fs32_add
(
sb
,
&
ucg
->
cg_cs
.
cs_nffree
,
count
);
fs32_add
(
sb
,
&
usb1
->
fs_cstotal
.
cs_nffree
,
count
);
fs32_add
(
sb
,
&
sb
->
fs_cs
(
cgno
).
cs_nffree
,
count
);
fs32_add
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cgno
).
cs_nffree
,
count
);
blkmap
=
ubh_blkmap
(
UCPI_UBH
,
ucpi
->
c_freeoff
,
bbase
);
ufs_fragacct
(
sb
,
blkmap
,
ucg
->
cg_frsum
,
1
);
...
...
@@ -100,12 +100,12 @@ void ufs_free_fragments (struct inode * inode, unsigned fragment, unsigned count
if
(
ubh_isblockset
(
UCPI_UBH
,
ucpi
->
c_freeoff
,
blkno
))
{
fs32_sub
(
sb
,
&
ucg
->
cg_cs
.
cs_nffree
,
uspi
->
s_fpb
);
fs32_sub
(
sb
,
&
usb1
->
fs_cstotal
.
cs_nffree
,
uspi
->
s_fpb
);
fs32_sub
(
sb
,
&
sb
->
fs_cs
(
cgno
).
cs_nffree
,
uspi
->
s_fpb
);
if
((
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_CG_MASK
)
==
UFS_CG_44BSD
)
fs32_sub
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cgno
).
cs_nffree
,
uspi
->
s_fpb
);
if
((
UFS_SB
(
sb
)
->
s_flags
&
UFS_CG_MASK
)
==
UFS_CG_44BSD
)
ufs_clusteracct
(
sb
,
ucpi
,
blkno
,
1
);
fs32_add
(
sb
,
&
ucg
->
cg_cs
.
cs_nbfree
,
1
);
fs32_add
(
sb
,
&
usb1
->
fs_cstotal
.
cs_nbfree
,
1
);
fs32_add
(
sb
,
&
sb
->
fs_cs
(
cgno
).
cs_nbfree
,
1
);
fs32_add
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cgno
).
cs_nbfree
,
1
);
cylno
=
ufs_cbtocylno
(
bbase
);
fs16_add
(
sb
,
&
ubh_cg_blks
(
ucpi
,
cylno
,
ufs_cbtorpos
(
bbase
)),
1
);
fs32_add
(
sb
,
&
ubh_cg_blktot
(
ucpi
,
cylno
),
1
);
...
...
@@ -141,7 +141,7 @@ void ufs_free_blocks (struct inode * inode, unsigned fragment, unsigned count) {
unsigned
overflow
,
cgno
,
bit
,
end_bit
,
blkno
,
i
,
cylno
;
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
UFSD
((
"ENTER, fragment %u, count %u
\n
"
,
fragment
,
count
))
...
...
@@ -184,13 +184,13 @@ void ufs_free_blocks (struct inode * inode, unsigned fragment, unsigned count) {
ufs_error
(
sb
,
"ufs_free_blocks"
,
"freeing free fragment"
);
}
ubh_setblock
(
UCPI_UBH
,
ucpi
->
c_freeoff
,
blkno
);
if
((
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_CG_MASK
)
==
UFS_CG_44BSD
)
if
((
UFS_SB
(
sb
)
->
s_flags
&
UFS_CG_MASK
)
==
UFS_CG_44BSD
)
ufs_clusteracct
(
sb
,
ucpi
,
blkno
,
1
);
DQUOT_FREE_BLOCK
(
inode
,
uspi
->
s_fpb
);
fs32_add
(
sb
,
&
ucg
->
cg_cs
.
cs_nbfree
,
1
);
fs32_add
(
sb
,
&
usb1
->
fs_cstotal
.
cs_nbfree
,
1
);
fs32_add
(
sb
,
&
sb
->
fs_cs
(
cgno
).
cs_nbfree
,
1
);
fs32_add
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cgno
).
cs_nbfree
,
1
);
cylno
=
ufs_cbtocylno
(
i
);
fs16_add
(
sb
,
&
ubh_cg_blks
(
ucpi
,
cylno
,
ufs_cbtorpos
(
i
)),
1
);
fs32_add
(
sb
,
&
ubh_cg_blktot
(
ucpi
,
cylno
),
1
);
...
...
@@ -247,7 +247,7 @@ unsigned ufs_new_fragments (struct inode * inode, u32 * p, unsigned fragment,
UFSD
((
"ENTER, ino %lu, fragment %u, goal %u, count %u
\n
"
,
inode
->
i_ino
,
fragment
,
goal
,
count
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
*
err
=
-
ENOSPC
;
...
...
@@ -285,7 +285,7 @@ unsigned ufs_new_fragments (struct inode * inode, u32 * p, unsigned fragment,
return
0
;
}
}
/*
* There is not enough space for user on the device
*/
...
...
@@ -293,8 +293,8 @@ unsigned ufs_new_fragments (struct inode * inode, u32 * p, unsigned fragment,
unlock_super
(
sb
);
UFSD
((
"EXIT (FAILED)
\n
"
))
return
0
;
}
}
if
(
goal
>=
uspi
->
s_size
)
goal
=
0
;
if
(
goal
==
0
)
...
...
@@ -407,12 +407,12 @@ unsigned ufs_add_fragments (struct inode * inode, unsigned fragment,
UFSD
((
"ENTER, fragment %u, oldcount %u, newcount %u
\n
"
,
fragment
,
oldcount
,
newcount
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
count
=
newcount
-
oldcount
;
cgno
=
ufs_dtog
(
fragment
);
if
(
sb
->
fs_cs
(
cgno
).
cs_nffree
<
count
)
if
(
UFS_SB
(
sb
)
->
fs_cs
(
cgno
).
cs_nffree
<
count
)
return
0
;
if
((
ufs_fragnum
(
fragment
)
+
newcount
)
>
uspi
->
s_fpb
)
return
0
;
...
...
@@ -453,7 +453,7 @@ unsigned ufs_add_fragments (struct inode * inode, unsigned fragment,
}
fs32_sub
(
sb
,
&
ucg
->
cg_cs
.
cs_nffree
,
count
);
fs32_sub
(
sb
,
&
sb
->
fs_cs
(
cgno
).
cs_nffree
,
count
);
fs32_sub
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cgno
).
cs_nffree
,
count
);
fs32_sub
(
sb
,
&
usb1
->
fs_cstotal
.
cs_nffree
,
count
);
ubh_mark_buffer_dirty
(
USPI_UBH
);
...
...
@@ -470,7 +470,7 @@ unsigned ufs_add_fragments (struct inode * inode, unsigned fragment,
}
#define UFS_TEST_FREE_SPACE_CG \
ucg = (struct ufs_cylinder_group *)
sb->u.ufs_sb.
s_ucg[cgno]->b_data; \
ucg = (struct ufs_cylinder_group *)
UFS_SB(sb)->
s_ucg[cgno]->b_data; \
if (fs32_to_cpu(sb, ucg->cg_cs.cs_nbfree)) \
goto cg_found; \
for (k = count; k < uspi->s_fpb; k++) \
...
...
@@ -490,7 +490,7 @@ unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno,
UFSD
((
"ENTER, ino %lu, cgno %u, goal %u, count %u
\n
"
,
inode
->
i_ino
,
cgno
,
goal
,
count
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
oldcg
=
cgno
;
...
...
@@ -557,7 +557,7 @@ unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno,
fs32_add
(
sb
,
&
ucg
->
cg_cs
.
cs_nffree
,
i
);
fs32_add
(
sb
,
&
usb1
->
fs_cstotal
.
cs_nffree
,
i
);
fs32_add
(
sb
,
&
sb
->
fs_cs
(
cgno
).
cs_nffree
,
i
);
fs32_add
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cgno
).
cs_nffree
,
i
);
fs32_add
(
sb
,
&
ucg
->
cg_frsum
[
i
],
1
);
goto
succed
;
}
...
...
@@ -574,7 +574,7 @@ unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno,
fs32_sub
(
sb
,
&
ucg
->
cg_cs
.
cs_nffree
,
count
);
fs32_sub
(
sb
,
&
usb1
->
fs_cstotal
.
cs_nffree
,
count
);
fs32_sub
(
sb
,
&
sb
->
fs_cs
(
cgno
).
cs_nffree
,
count
);
fs32_sub
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cgno
).
cs_nffree
,
count
);
fs32_sub
(
sb
,
&
ucg
->
cg_frsum
[
allocsize
],
1
);
if
(
count
!=
allocsize
)
...
...
@@ -606,7 +606,7 @@ unsigned ufs_alloccg_block (struct inode * inode,
UFSD
((
"ENTER, goal %u
\n
"
,
goal
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
ucg
=
ubh_get_ucg
(
UCPI_UBH
);
...
...
@@ -633,7 +633,7 @@ unsigned ufs_alloccg_block (struct inode * inode,
gotit:
blkno
=
ufs_fragstoblks
(
result
);
ubh_clrblock
(
UCPI_UBH
,
ucpi
->
c_freeoff
,
blkno
);
if
((
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_CG_MASK
)
==
UFS_CG_44BSD
)
if
((
UFS_SB
(
sb
)
->
s_flags
&
UFS_CG_MASK
)
==
UFS_CG_44BSD
)
ufs_clusteracct
(
sb
,
ucpi
,
blkno
,
-
1
);
if
(
DQUOT_ALLOC_BLOCK
(
inode
,
uspi
->
s_fpb
))
{
*
err
=
-
EDQUOT
;
...
...
@@ -642,7 +642,7 @@ unsigned ufs_alloccg_block (struct inode * inode,
fs32_sub
(
sb
,
&
ucg
->
cg_cs
.
cs_nbfree
,
1
);
fs32_sub
(
sb
,
&
usb1
->
fs_cstotal
.
cs_nbfree
,
1
);
fs32_sub
(
sb
,
&
sb
->
fs_cs
(
ucpi
->
c_cgx
).
cs_nbfree
,
1
);
fs32_sub
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
ucpi
->
c_cgx
).
cs_nbfree
,
1
);
cylno
=
ufs_cbtocylno
(
result
);
fs16_sub
(
sb
,
&
ubh_cg_blks
(
ucpi
,
cylno
,
ufs_cbtorpos
(
result
)),
1
);
fs32_sub
(
sb
,
&
ubh_cg_blktot
(
ucpi
,
cylno
),
1
);
...
...
@@ -663,7 +663,7 @@ unsigned ufs_bitmap_search (struct super_block * sb,
UFSD
((
"ENTER, cg %u, goal %u, count %u
\n
"
,
ucpi
->
c_cgx
,
goal
,
count
))
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
ucg
=
ubh_get_ucg
(
UCPI_UBH
);
...
...
@@ -729,7 +729,7 @@ void ufs_clusteracct(struct super_block * sb,
struct
ufs_sb_private_info
*
uspi
;
int
i
,
start
,
end
,
forw
,
back
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
if
(
uspi
->
s_contigsumsize
<=
0
)
return
;
...
...
This diff is collapsed.
Click to expand it.
fs/ufs/cylinder.c
View file @
136b6223
...
...
@@ -36,26 +36,27 @@
static
void
ufs_read_cylinder
(
struct
super_block
*
sb
,
unsigned
cgno
,
unsigned
bitmap_nr
)
{
struct
ufs_sb_info
*
sbi
=
UFS_SB
(
sb
);
struct
ufs_sb_private_info
*
uspi
;
struct
ufs_cg_private_info
*
ucpi
;
struct
ufs_cylinder_group
*
ucg
;
unsigned
i
,
j
;
UFSD
((
"ENTER, cgno %u, bitmap_nr %u
\n
"
,
cgno
,
bitmap_nr
))
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
ucpi
=
sb
->
u
.
ufs_sb
.
s_ucpi
[
bitmap_nr
];
ucg
=
(
struct
ufs_cylinder_group
*
)
sb
->
u
.
ufs_sb
.
s_ucg
[
cgno
]
->
b_data
;
uspi
=
sb
i
->
s_uspi
;
ucpi
=
sb
i
->
s_ucpi
[
bitmap_nr
];
ucg
=
(
struct
ufs_cylinder_group
*
)
sb
i
->
s_ucg
[
cgno
]
->
b_data
;
UCPI_UBH
->
fragment
=
ufs_cgcmin
(
cgno
);
UCPI_UBH
->
count
=
uspi
->
s_cgsize
>>
sb
->
s_blocksize_bits
;
/*
* We have already the first fragment of cylinder group block in buffer
*/
UCPI_UBH
->
bh
[
0
]
=
sb
->
u
.
ufs_sb
.
s_ucg
[
cgno
];
UCPI_UBH
->
bh
[
0
]
=
sb
i
->
s_ucg
[
cgno
];
for
(
i
=
1
;
i
<
UCPI_UBH
->
count
;
i
++
)
if
(
!
(
UCPI_UBH
->
bh
[
i
]
=
sb_bread
(
sb
,
UCPI_UBH
->
fragment
+
i
)))
goto
failed
;
sb
->
u
.
ufs_sb
.
s_cgno
[
bitmap_nr
]
=
cgno
;
sb
i
->
s_cgno
[
bitmap_nr
]
=
cgno
;
ucpi
->
c_cgx
=
fs32_to_cpu
(
sb
,
ucg
->
cg_cgx
);
ucpi
->
c_ncyl
=
fs16_to_cpu
(
sb
,
ucg
->
cg_ncyl
);
...
...
@@ -77,8 +78,8 @@ static void ufs_read_cylinder (struct super_block * sb,
failed:
for
(
j
=
1
;
j
<
i
;
j
++
)
brelse
(
sb
->
u
.
ufs_sb
.
s_ucg
[
j
]);
sb
->
u
.
ufs_sb
.
s_cgno
[
bitmap_nr
]
=
UFS_CGNO_EMPTY
;
brelse
(
sb
i
->
s_ucg
[
j
]);
sb
i
->
s_cgno
[
bitmap_nr
]
=
UFS_CGNO_EMPTY
;
ufs_error
(
sb
,
"ufs_read_cylinder"
,
"can't read cylinder group block %u"
,
cgno
);
}
...
...
@@ -88,6 +89,7 @@ static void ufs_read_cylinder (struct super_block * sb,
*/
void
ufs_put_cylinder
(
struct
super_block
*
sb
,
unsigned
bitmap_nr
)
{
struct
ufs_sb_info
*
sbi
=
UFS_SB
(
sb
);
struct
ufs_sb_private_info
*
uspi
;
struct
ufs_cg_private_info
*
ucpi
;
struct
ufs_cylinder_group
*
ucg
;
...
...
@@ -95,15 +97,15 @@ void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr)
UFSD
((
"ENTER, bitmap_nr %u
\n
"
,
bitmap_nr
))
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
if
(
sb
->
u
.
ufs_sb
.
s_cgno
[
bitmap_nr
]
==
UFS_CGNO_EMPTY
)
{
uspi
=
sb
i
->
s_uspi
;
if
(
sb
i
->
s_cgno
[
bitmap_nr
]
==
UFS_CGNO_EMPTY
)
{
UFSD
((
"EXIT
\n
"
))
return
;
}
ucpi
=
sb
->
u
.
ufs_sb
.
s_ucpi
[
bitmap_nr
];
ucpi
=
sb
i
->
s_ucpi
[
bitmap_nr
];
ucg
=
ubh_get_ucg
(
UCPI_UBH
);
if
(
uspi
->
s_ncg
>
UFS_MAX_GROUP_LOADED
&&
bitmap_nr
>=
sb
->
u
.
ufs_sb
.
s_cg_loaded
)
{
if
(
uspi
->
s_ncg
>
UFS_MAX_GROUP_LOADED
&&
bitmap_nr
>=
sb
i
->
s_cg_loaded
)
{
ufs_panic
(
sb
,
"ufs_put_cylinder"
,
"internal error"
);
return
;
}
...
...
@@ -119,7 +121,7 @@ void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr)
brelse
(
UCPI_UBH
->
bh
[
i
]);
}
sb
->
u
.
ufs_sb
.
s_cgno
[
bitmap_nr
]
=
UFS_CGNO_EMPTY
;
sb
i
->
s_cgno
[
bitmap_nr
]
=
UFS_CGNO_EMPTY
;
UFSD
((
"EXIT
\n
"
))
}
...
...
@@ -132,13 +134,14 @@ void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr)
struct
ufs_cg_private_info
*
ufs_load_cylinder
(
struct
super_block
*
sb
,
unsigned
cgno
)
{
struct
ufs_sb_info
*
sbi
=
UFS_SB
(
sb
);
struct
ufs_sb_private_info
*
uspi
;
struct
ufs_cg_private_info
*
ucpi
;
unsigned
cg
,
i
,
j
;
UFSD
((
"ENTER, cgno %u
\n
"
,
cgno
))
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
sb
i
->
s_uspi
;
if
(
cgno
>=
uspi
->
s_ncg
)
{
ufs_panic
(
sb
,
"ufs_load_cylinder"
,
"internal error, high number of cg"
);
return
NULL
;
...
...
@@ -146,61 +149,61 @@ struct ufs_cg_private_info * ufs_load_cylinder (
/*
* Cylinder group number cg it in cache and it was last used
*/
if
(
sb
->
u
.
ufs_sb
.
s_cgno
[
0
]
==
cgno
)
{
if
(
sb
i
->
s_cgno
[
0
]
==
cgno
)
{
UFSD
((
"EXIT
\n
"
))
return
sb
->
u
.
ufs_sb
.
s_ucpi
[
0
];
return
sb
i
->
s_ucpi
[
0
];
}
/*
* Number of cylinder groups is not higher than UFS_MAX_GROUP_LOADED
*/
if
(
uspi
->
s_ncg
<=
UFS_MAX_GROUP_LOADED
)
{
if
(
sb
->
u
.
ufs_sb
.
s_cgno
[
cgno
]
!=
UFS_CGNO_EMPTY
)
{
if
(
sb
->
u
.
ufs_sb
.
s_cgno
[
cgno
]
!=
cgno
)
{
if
(
sb
i
->
s_cgno
[
cgno
]
!=
UFS_CGNO_EMPTY
)
{
if
(
sb
i
->
s_cgno
[
cgno
]
!=
cgno
)
{
ufs_panic
(
sb
,
"ufs_load_cylinder"
,
"internal error, wrong number of cg in cache"
);
UFSD
((
"EXIT (FAILED)
\n
"
))
return
NULL
;
}
else
{
UFSD
((
"EXIT
\n
"
))
return
sb
->
u
.
ufs_sb
.
s_ucpi
[
cgno
];
return
sb
i
->
s_ucpi
[
cgno
];
}
}
else
{
ufs_read_cylinder
(
sb
,
cgno
,
cgno
);
UFSD
((
"EXIT
\n
"
))
return
sb
->
u
.
ufs_sb
.
s_ucpi
[
cgno
];
return
sb
i
->
s_ucpi
[
cgno
];
}
}
/*
* Cylinder group number cg is in cache but it was not last used,
* we will move to the first position
*/
for
(
i
=
0
;
i
<
sb
->
u
.
ufs_sb
.
s_cg_loaded
&&
sb
->
u
.
ufs_sb
.
s_cgno
[
i
]
!=
cgno
;
i
++
);
if
(
i
<
sb
->
u
.
ufs_sb
.
s_cg_loaded
&&
sb
->
u
.
ufs_sb
.
s_cgno
[
i
]
==
cgno
)
{
cg
=
sb
->
u
.
ufs_sb
.
s_cgno
[
i
];
ucpi
=
sb
->
u
.
ufs_sb
.
s_ucpi
[
i
];
for
(
i
=
0
;
i
<
sb
i
->
s_cg_loaded
&&
sbi
->
s_cgno
[
i
]
!=
cgno
;
i
++
);
if
(
i
<
sb
i
->
s_cg_loaded
&&
sbi
->
s_cgno
[
i
]
==
cgno
)
{
cg
=
sb
i
->
s_cgno
[
i
];
ucpi
=
sb
i
->
s_ucpi
[
i
];
for
(
j
=
i
;
j
>
0
;
j
--
)
{
sb
->
u
.
ufs_sb
.
s_cgno
[
j
]
=
sb
->
u
.
ufs_sb
.
s_cgno
[
j
-
1
];
sb
->
u
.
ufs_sb
.
s_ucpi
[
j
]
=
sb
->
u
.
ufs_sb
.
s_ucpi
[
j
-
1
];
sb
i
->
s_cgno
[
j
]
=
sbi
->
s_cgno
[
j
-
1
];
sb
i
->
s_ucpi
[
j
]
=
sbi
->
s_ucpi
[
j
-
1
];
}
sb
->
u
.
ufs_sb
.
s_cgno
[
0
]
=
cg
;
sb
->
u
.
ufs_sb
.
s_ucpi
[
0
]
=
ucpi
;
sb
i
->
s_cgno
[
0
]
=
cg
;
sb
i
->
s_ucpi
[
0
]
=
ucpi
;
/*
* Cylinder group number cg is not in cache, we will read it from disk
* and put it to the first position
*/
}
else
{
if
(
sb
->
u
.
ufs_sb
.
s_cg_loaded
<
UFS_MAX_GROUP_LOADED
)
sb
->
u
.
ufs_sb
.
s_cg_loaded
++
;
if
(
sb
i
->
s_cg_loaded
<
UFS_MAX_GROUP_LOADED
)
sb
i
->
s_cg_loaded
++
;
else
ufs_put_cylinder
(
sb
,
UFS_MAX_GROUP_LOADED
-
1
);
ucpi
=
sb
->
u
.
ufs_sb
.
s_ucpi
[
sb
->
u
.
ufs_sb
.
s_cg_loaded
-
1
];
for
(
j
=
sb
->
u
.
ufs_sb
.
s_cg_loaded
-
1
;
j
>
0
;
j
--
)
{
sb
->
u
.
ufs_sb
.
s_cgno
[
j
]
=
sb
->
u
.
ufs_sb
.
s_cgno
[
j
-
1
];
sb
->
u
.
ufs_sb
.
s_ucpi
[
j
]
=
sb
->
u
.
ufs_sb
.
s_ucpi
[
j
-
1
];
ucpi
=
sb
i
->
s_ucpi
[
sbi
->
s_cg_loaded
-
1
];
for
(
j
=
sb
i
->
s_cg_loaded
-
1
;
j
>
0
;
j
--
)
{
sb
i
->
s_cgno
[
j
]
=
sbi
->
s_cgno
[
j
-
1
];
sb
i
->
s_ucpi
[
j
]
=
sbi
->
s_ucpi
[
j
-
1
];
}
sb
->
u
.
ufs_sb
.
s_ucpi
[
0
]
=
ucpi
;
sb
i
->
s_ucpi
[
0
]
=
ucpi
;
ufs_read_cylinder
(
sb
,
cgno
,
0
);
}
UFSD
((
"EXIT
\n
"
))
return
sb
->
u
.
ufs_sb
.
s_ucpi
[
0
];
return
sb
i
->
s_ucpi
[
0
];
}
This diff is collapsed.
Click to expand it.
fs/ufs/dir.c
View file @
136b6223
...
...
@@ -67,7 +67,7 @@ ufs_readdir (struct file * filp, void * dirent, filldir_t filldir)
lock_kernel
();
sb
=
inode
->
i_sb
;
flags
=
sb
->
u
.
ufs_sb
.
s_flags
;
flags
=
UFS_SB
(
sb
)
->
s_flags
;
UFSD
((
"ENTER, ino %lu f_pos %lu
\n
"
,
inode
->
i_ino
,
(
unsigned
long
)
filp
->
f_pos
))
...
...
@@ -308,8 +308,8 @@ int ufs_check_dir_entry (const char * function, struct inode * dir,
error_msg
=
"reclen is too small for namlen"
;
else
if
(((
char
*
)
de
-
bh
->
b_data
)
+
rlen
>
dir
->
i_sb
->
s_blocksize
)
error_msg
=
"directory entry across blocks"
;
else
if
(
fs32_to_cpu
(
sb
,
de
->
d_ino
)
>
(
sb
->
u
.
ufs_sb
.
s_uspi
->
s_ipg
*
sb
->
u
.
ufs_sb
.
s_uspi
->
s_ncg
))
else
if
(
fs32_to_cpu
(
sb
,
de
->
d_ino
)
>
(
UFS_SB
(
sb
)
->
s_uspi
->
s_ipg
*
UFS_SB
(
sb
)
->
s_uspi
->
s_ncg
))
error_msg
=
"inode out of bounds"
;
if
(
error_msg
!=
NULL
)
...
...
@@ -386,7 +386,7 @@ int ufs_add_link(struct dentry *dentry, struct inode *inode)
UFSD
((
"ENTER, name %s, namelen %u
\n
"
,
name
,
namelen
))
sb
=
dir
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
if
(
!
namelen
)
return
-
EINVAL
;
...
...
This diff is collapsed.
Click to expand it.
fs/ufs/ialloc.c
View file @
136b6223
...
...
@@ -71,7 +71,7 @@ void ufs_free_inode (struct inode * inode)
UFSD
((
"ENTER, ino %lu
\n
"
,
inode
->
i_ino
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
ino
=
inode
->
i_ino
;
...
...
@@ -112,12 +112,12 @@ void ufs_free_inode (struct inode * inode)
ucpi
->
c_irotor
=
ino
;
fs32_add
(
sb
,
&
ucg
->
cg_cs
.
cs_nifree
,
1
);
fs32_add
(
sb
,
&
usb1
->
fs_cstotal
.
cs_nifree
,
1
);
fs32_add
(
sb
,
&
sb
->
fs_cs
(
cg
).
cs_nifree
,
1
);
fs32_add
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cg
).
cs_nifree
,
1
);
if
(
is_directory
)
{
fs32_sub
(
sb
,
&
ucg
->
cg_cs
.
cs_ndir
,
1
);
fs32_sub
(
sb
,
&
usb1
->
fs_cstotal
.
cs_ndir
,
1
);
fs32_sub
(
sb
,
&
sb
->
fs_cs
(
cg
).
cs_ndir
,
1
);
fs32_sub
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cg
).
cs_ndir
,
1
);
}
}
...
...
@@ -146,6 +146,7 @@ void ufs_free_inode (struct inode * inode)
struct
inode
*
ufs_new_inode
(
struct
inode
*
dir
,
int
mode
)
{
struct
super_block
*
sb
;
struct
ufs_sb_info
*
sbi
;
struct
ufs_sb_private_info
*
uspi
;
struct
ufs_super_block_first
*
usb1
;
struct
ufs_cg_private_info
*
ucpi
;
...
...
@@ -164,7 +165,8 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
if
(
!
inode
)
return
ERR_PTR
(
-
ENOMEM
);
ufsi
=
UFS_I
(
inode
);
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
sbi
=
UFS_SB
(
sb
);
uspi
=
sbi
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
lock_super
(
sb
);
...
...
@@ -173,7 +175,7 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
* Try to place the inode in its parent directory
*/
i
=
ufs_inotocg
(
dir
->
i_ino
);
if
(
sb
->
fs_cs
(
i
).
cs_nifree
)
{
if
(
sb
i
->
fs_cs
(
i
).
cs_nifree
)
{
cg
=
i
;
goto
cg_found
;
}
...
...
@@ -185,7 +187,7 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
i
+=
j
;
if
(
i
>=
uspi
->
s_ncg
)
i
-=
uspi
->
s_ncg
;
if
(
sb
->
fs_cs
(
i
).
cs_nifree
)
{
if
(
sb
i
->
fs_cs
(
i
).
cs_nifree
)
{
cg
=
i
;
goto
cg_found
;
}
...
...
@@ -199,7 +201,7 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
i
++
;
if
(
i
>=
uspi
->
s_ncg
)
i
=
0
;
if
(
sb
->
fs_cs
(
i
).
cs_nifree
)
{
if
(
sb
i
->
fs_cs
(
i
).
cs_nifree
)
{
cg
=
i
;
goto
cg_found
;
}
...
...
@@ -235,12 +237,12 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
fs32_sub
(
sb
,
&
ucg
->
cg_cs
.
cs_nifree
,
1
);
fs32_sub
(
sb
,
&
usb1
->
fs_cstotal
.
cs_nifree
,
1
);
fs32_sub
(
sb
,
&
sb
->
fs_cs
(
cg
).
cs_nifree
,
1
);
fs32_sub
(
sb
,
&
sb
i
->
fs_cs
(
cg
).
cs_nifree
,
1
);
if
(
S_ISDIR
(
mode
))
{
fs32_add
(
sb
,
&
ucg
->
cg_cs
.
cs_ndir
,
1
);
fs32_add
(
sb
,
&
usb1
->
fs_cstotal
.
cs_ndir
,
1
);
fs32_add
(
sb
,
&
sb
->
fs_cs
(
cg
).
cs_ndir
,
1
);
fs32_add
(
sb
,
&
sb
i
->
fs_cs
(
cg
).
cs_ndir
,
1
);
}
ubh_mark_buffer_dirty
(
USPI_UBH
);
...
...
This diff is collapsed.
Click to expand it.
fs/ufs/inode.c
View file @
136b6223
...
...
@@ -52,7 +52,7 @@
static
int
ufs_block_to_path
(
struct
inode
*
inode
,
long
i_block
,
int
offsets
[
4
])
{
struct
ufs_sb_private_info
*
uspi
=
inode
->
i_sb
->
u
.
ufs_sb
.
s_uspi
;
struct
ufs_sb_private_info
*
uspi
=
UFS_SB
(
inode
->
i_sb
)
->
s_uspi
;
int
ptrs
=
uspi
->
s_apb
;
int
ptrs_bits
=
uspi
->
s_apbshift
;
const
long
direct_blocks
=
UFS_NDADDR
,
...
...
@@ -86,7 +86,7 @@ int ufs_frag_map(struct inode *inode, int frag)
{
struct
ufs_inode_info
*
ufsi
=
UFS_I
(
inode
);
struct
super_block
*
sb
=
inode
->
i_sb
;
struct
ufs_sb_private_info
*
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
struct
ufs_sb_private_info
*
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
int
mask
=
uspi
->
s_apbmask
>>
uspi
->
s_fpbshift
;
int
shift
=
uspi
->
s_apbshift
-
uspi
->
s_fpbshift
;
int
offsets
[
4
],
*
p
;
...
...
@@ -137,7 +137,7 @@ static struct buffer_head * ufs_inode_getfrag (struct inode *inode,
inode
->
i_ino
,
fragment
,
new_fragment
,
required
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
block
=
ufs_fragstoblks
(
fragment
);
blockoff
=
ufs_fragnum
(
fragment
);
p
=
ufsi
->
i_u1
.
i_data
+
block
;
...
...
@@ -243,7 +243,7 @@ static struct buffer_head * ufs_block_getfrag (struct inode *inode,
u32
*
p
;
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
block
=
ufs_fragstoblks
(
fragment
);
blockoff
=
ufs_fragnum
(
fragment
);
...
...
@@ -313,7 +313,7 @@ static struct buffer_head * ufs_block_getfrag (struct inode *inode,
static
int
ufs_getfrag_block
(
struct
inode
*
inode
,
sector_t
fragment
,
struct
buffer_head
*
bh_result
,
int
create
)
{
struct
super_block
*
sb
=
inode
->
i_sb
;
struct
ufs_sb_private_info
*
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
struct
ufs_sb_private_info
*
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
struct
buffer_head
*
bh
;
int
ret
,
err
,
new
;
unsigned
long
ptr
,
phys
;
...
...
@@ -483,8 +483,8 @@ void ufs_read_inode (struct inode * inode)
UFSD
((
"ENTER, ino %lu
\n
"
,
inode
->
i_ino
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
flags
=
sb
->
u
.
ufs_sb
.
s_flags
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
flags
=
UFS_SB
(
sb
)
->
s_flags
;
if
(
inode
->
i_ino
<
UFS_ROOTINO
||
inode
->
i_ino
>
(
uspi
->
s_ncg
*
uspi
->
s_ipg
))
{
...
...
@@ -579,8 +579,8 @@ static int ufs_update_inode(struct inode * inode, int do_sync)
UFSD
((
"ENTER, ino %lu
\n
"
,
inode
->
i_ino
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
flags
=
sb
->
u
.
ufs_sb
.
s_flags
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
flags
=
UFS_SB
(
sb
)
->
s_flags
;
if
(
inode
->
i_ino
<
UFS_ROOTINO
||
inode
->
i_ino
>
(
uspi
->
s_ncg
*
uspi
->
s_ipg
))
{
...
...
This diff is collapsed.
Click to expand it.
fs/ufs/namei.c
View file @
136b6223
...
...
@@ -139,7 +139,7 @@ static int ufs_symlink (struct inode * dir, struct dentry * dentry,
if
(
IS_ERR
(
inode
))
goto
out
;
if
(
l
>
sb
->
u
.
ufs_sb
.
s_uspi
->
s_maxsymlinklen
)
{
if
(
l
>
UFS_SB
(
sb
)
->
s_uspi
->
s_maxsymlinklen
)
{
/* slow symlink */
inode
->
i_op
=
&
page_symlink_inode_operations
;
inode
->
i_mapping
->
a_ops
=
&
ufs_aops
;
...
...
This diff is collapsed.
Click to expand it.
fs/ufs/super.c
View file @
136b6223
...
...
@@ -189,7 +189,7 @@ void ufs_error (struct super_block * sb, const char * function,
struct
ufs_super_block_first
*
usb1
;
va_list
args
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
if
(
!
(
sb
->
s_flags
&
MS_RDONLY
))
{
...
...
@@ -201,7 +201,7 @@ void ufs_error (struct super_block * sb, const char * function,
va_start
(
args
,
fmt
);
vsprintf
(
error_buf
,
fmt
,
args
);
va_end
(
args
);
switch
(
sb
->
u
.
ufs_sb
.
s_mount_opt
&
UFS_MOUNT_ONERROR
)
{
switch
(
UFS_SB
(
sb
)
->
s_mount_opt
&
UFS_MOUNT_ONERROR
)
{
case
UFS_MOUNT_ONERROR_PANIC
:
panic
(
"UFS-fs panic (device %s): %s: %s
\n
"
,
sb
->
s_id
,
function
,
error_buf
);
...
...
@@ -221,7 +221,7 @@ void ufs_panic (struct super_block * sb, const char * function,
struct
ufs_super_block_first
*
usb1
;
va_list
args
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
if
(
!
(
sb
->
s_flags
&
MS_RDONLY
))
{
...
...
@@ -317,6 +317,7 @@ static int ufs_parse_options (char * options, unsigned * mount_options)
* Read on-disk structures associated with cylinder groups
*/
int
ufs_read_cylinder_structures
(
struct
super_block
*
sb
)
{
struct
ufs_sb_info
*
sbi
=
UFS_SB
(
sb
);
struct
ufs_sb_private_info
*
uspi
;
struct
ufs_buffer_head
*
ubh
;
unsigned
char
*
base
,
*
space
;
...
...
@@ -324,7 +325,7 @@ int ufs_read_cylinder_structures (struct super_block * sb) {
UFSD
((
"ENTER
\n
"
))
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
sb
i
->
s_uspi
;
/*
* Read cs structures from (usually) first data block
...
...
@@ -343,7 +344,7 @@ int ufs_read_cylinder_structures (struct super_block * sb) {
if
(
!
ubh
)
goto
failed
;
ubh_ubhcpymem
(
space
,
ubh
,
size
);
sb
->
u
.
ufs_sb
.
s_csp
[
ufs_fragstoblks
(
i
)]
=
(
struct
ufs_csum
*
)
space
;
sb
i
->
s_csp
[
ufs_fragstoblks
(
i
)]
=
(
struct
ufs_csum
*
)
space
;
space
+=
size
;
ubh_brelse
(
ubh
);
ubh
=
NULL
;
...
...
@@ -353,41 +354,41 @@ int ufs_read_cylinder_structures (struct super_block * sb) {
* Read cylinder group (we read only first fragment from block
* at this time) and prepare internal data structures for cg caching.
*/
if
(
!
(
sb
->
u
.
ufs_sb
.
s_ucg
=
kmalloc
(
sizeof
(
struct
buffer_head
*
)
*
uspi
->
s_ncg
,
GFP_KERNEL
)))
if
(
!
(
sb
i
->
s_ucg
=
kmalloc
(
sizeof
(
struct
buffer_head
*
)
*
uspi
->
s_ncg
,
GFP_KERNEL
)))
goto
failed
;
for
(
i
=
0
;
i
<
uspi
->
s_ncg
;
i
++
)
sb
->
u
.
ufs_sb
.
s_ucg
[
i
]
=
NULL
;
sb
i
->
s_ucg
[
i
]
=
NULL
;
for
(
i
=
0
;
i
<
UFS_MAX_GROUP_LOADED
;
i
++
)
{
sb
->
u
.
ufs_sb
.
s_ucpi
[
i
]
=
NULL
;
sb
->
u
.
ufs_sb
.
s_cgno
[
i
]
=
UFS_CGNO_EMPTY
;
sb
i
->
s_ucpi
[
i
]
=
NULL
;
sb
i
->
s_cgno
[
i
]
=
UFS_CGNO_EMPTY
;
}
for
(
i
=
0
;
i
<
uspi
->
s_ncg
;
i
++
)
{
UFSD
((
"read cg %u
\n
"
,
i
))
if
(
!
(
sb
->
u
.
ufs_sb
.
s_ucg
[
i
]
=
sb_bread
(
sb
,
ufs_cgcmin
(
i
))))
if
(
!
(
sb
i
->
s_ucg
[
i
]
=
sb_bread
(
sb
,
ufs_cgcmin
(
i
))))
goto
failed
;
if
(
!
ufs_cg_chkmagic
(
sb
,
(
struct
ufs_cylinder_group
*
)
sb
->
u
.
ufs_sb
.
s_ucg
[
i
]
->
b_data
))
if
(
!
ufs_cg_chkmagic
(
sb
,
(
struct
ufs_cylinder_group
*
)
sb
i
->
s_ucg
[
i
]
->
b_data
))
goto
failed
;
#ifdef UFS_SUPER_DEBUG_MORE
ufs_print_cylinder_stuff
(
sb
,
(
struct
ufs_cylinder_group
*
)
sb
->
u
.
ufs_sb
.
s_ucg
[
i
]
->
b_data
);
ufs_print_cylinder_stuff
(
sb
,
(
struct
ufs_cylinder_group
*
)
sb
i
->
s_ucg
[
i
]
->
b_data
);
#endif
}
for
(
i
=
0
;
i
<
UFS_MAX_GROUP_LOADED
;
i
++
)
{
if
(
!
(
sb
->
u
.
ufs_sb
.
s_ucpi
[
i
]
=
kmalloc
(
sizeof
(
struct
ufs_cg_private_info
),
GFP_KERNEL
)))
if
(
!
(
sb
i
->
s_ucpi
[
i
]
=
kmalloc
(
sizeof
(
struct
ufs_cg_private_info
),
GFP_KERNEL
)))
goto
failed
;
sb
->
u
.
ufs_sb
.
s_cgno
[
i
]
=
UFS_CGNO_EMPTY
;
sb
i
->
s_cgno
[
i
]
=
UFS_CGNO_EMPTY
;
}
sb
->
u
.
ufs_sb
.
s_cg_loaded
=
0
;
sb
i
->
s_cg_loaded
=
0
;
UFSD
((
"EXIT
\n
"
))
return
1
;
failed:
if
(
base
)
kfree
(
base
);
if
(
sb
->
u
.
ufs_sb
.
s_ucg
)
{
if
(
sb
i
->
s_ucg
)
{
for
(
i
=
0
;
i
<
uspi
->
s_ncg
;
i
++
)
if
(
sb
->
u
.
ufs_sb
.
s_ucg
[
i
])
brelse
(
sb
->
u
.
ufs_sb
.
s_ucg
[
i
]);
kfree
(
sb
->
u
.
ufs_sb
.
s_ucg
);
if
(
sb
i
->
s_ucg
[
i
])
brelse
(
sbi
->
s_ucg
[
i
]);
kfree
(
sb
i
->
s_ucg
);
for
(
i
=
0
;
i
<
UFS_MAX_GROUP_LOADED
;
i
++
)
if
(
sb
->
u
.
ufs_sb
.
s_ucpi
[
i
])
kfree
(
sb
->
u
.
ufs_sb
.
s_ucpi
[
i
]);
if
(
sb
i
->
s_ucpi
[
i
])
kfree
(
sbi
->
s_ucpi
[
i
]);
}
UFSD
((
"EXIT (FAILED)
\n
"
))
return
0
;
...
...
@@ -398,6 +399,7 @@ int ufs_read_cylinder_structures (struct super_block * sb) {
* write them back to disk
*/
void
ufs_put_cylinder_structures
(
struct
super_block
*
sb
)
{
struct
ufs_sb_info
*
sbi
=
UFS_SB
(
sb
);
struct
ufs_sb_private_info
*
uspi
;
struct
ufs_buffer_head
*
ubh
;
unsigned
char
*
base
,
*
space
;
...
...
@@ -405,11 +407,11 @@ void ufs_put_cylinder_structures (struct super_block * sb) {
UFSD
((
"ENTER
\n
"
))
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
sb
i
->
s_uspi
;
size
=
uspi
->
s_cssize
;
blks
=
(
size
+
uspi
->
s_fsize
-
1
)
>>
uspi
->
s_fshift
;
base
=
space
=
(
char
*
)
sb
->
u
.
ufs_sb
.
s_csp
[
0
];
base
=
space
=
(
char
*
)
sb
i
->
s_csp
[
0
];
for
(
i
=
0
;
i
<
blks
;
i
+=
uspi
->
s_fpb
)
{
size
=
uspi
->
s_bsize
;
if
(
i
+
uspi
->
s_fpb
>
blks
)
...
...
@@ -421,21 +423,22 @@ void ufs_put_cylinder_structures (struct super_block * sb) {
ubh_mark_buffer_dirty
(
ubh
);
ubh_brelse
(
ubh
);
}
for
(
i
=
0
;
i
<
sb
->
u
.
ufs_sb
.
s_cg_loaded
;
i
++
)
{
for
(
i
=
0
;
i
<
sb
i
->
s_cg_loaded
;
i
++
)
{
ufs_put_cylinder
(
sb
,
i
);
kfree
(
sb
->
u
.
ufs_sb
.
s_ucpi
[
i
]);
kfree
(
sb
i
->
s_ucpi
[
i
]);
}
for
(;
i
<
UFS_MAX_GROUP_LOADED
;
i
++
)
kfree
(
sb
->
u
.
ufs_sb
.
s_ucpi
[
i
]);
kfree
(
sb
i
->
s_ucpi
[
i
]);
for
(
i
=
0
;
i
<
uspi
->
s_ncg
;
i
++
)
brelse
(
sb
->
u
.
ufs_sb
.
s_ucg
[
i
]);
kfree
(
sb
->
u
.
ufs_sb
.
s_ucg
);
brelse
(
sb
i
->
s_ucg
[
i
]);
kfree
(
sb
i
->
s_ucg
);
kfree
(
base
);
UFSD
((
"EXIT
\n
"
))
}
static
int
ufs_fill_super
(
struct
super_block
*
sb
,
void
*
data
,
int
silent
)
{
struct
ufs_sb_info
*
sbi
;
struct
ufs_sb_private_info
*
uspi
;
struct
ufs_super_block_first
*
usb1
;
struct
ufs_super_block_second
*
usb2
;
...
...
@@ -451,6 +454,12 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
UFSD
((
"ENTER
\n
"
))
sbi
=
kmalloc
(
sizeof
(
struct
ufs_sb_info
),
GFP_KERNEL
);
if
(
!
sbi
)
goto
failed_nomem
;
sb
->
u
.
generic_sbp
=
sbi
;
memset
(
sbi
,
0
,
sizeof
(
struct
ufs_sb_info
));
UFSD
((
"flag %u
\n
"
,
(
int
)(
sb
->
s_flags
&
MS_RDONLY
)))
#ifndef CONFIG_UFS_FS_WRITE
...
...
@@ -464,22 +473,22 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
* Set default mount options
* Parse mount options
*/
sb
->
u
.
ufs_sb
.
s_mount_opt
=
0
;
ufs_set_opt
(
sb
->
u
.
ufs_sb
.
s_mount_opt
,
ONERROR_LOCK
);
if
(
!
ufs_parse_options
((
char
*
)
data
,
&
sb
->
u
.
ufs_sb
.
s_mount_opt
))
{
sb
i
->
s_mount_opt
=
0
;
ufs_set_opt
(
sb
i
->
s_mount_opt
,
ONERROR_LOCK
);
if
(
!
ufs_parse_options
((
char
*
)
data
,
&
sb
i
->
s_mount_opt
))
{
printk
(
"wrong mount options
\n
"
);
goto
failed
;
}
if
(
!
(
sb
->
u
.
ufs_sb
.
s_mount_opt
&
UFS_MOUNT_UFSTYPE
))
{
if
(
!
(
sb
i
->
s_mount_opt
&
UFS_MOUNT_UFSTYPE
))
{
printk
(
"You didn't specify the type of your ufs filesystem
\n\n
"
"mount -t ufs -o ufstype="
"sun|sunx86|44bsd|old|hp|nextstep|netxstep-cd|openstep ...
\n\n
"
">>>WARNING<<< Wrong ufstype may corrupt your filesystem, "
"default is ufstype=old
\n
"
);
ufs_set_opt
(
sb
->
u
.
ufs_sb
.
s_mount_opt
,
UFSTYPE_OLD
);
ufs_set_opt
(
sb
i
->
s_mount_opt
,
UFSTYPE_OLD
);
}
sb
->
u
.
ufs_sb
.
s_uspi
=
uspi
=
sb
i
->
s_uspi
=
uspi
=
kmalloc
(
sizeof
(
struct
ufs_sb_private_info
),
GFP_KERNEL
);
if
(
!
uspi
)
goto
failed
;
...
...
@@ -488,7 +497,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
this but as I don't know which I'll let those in the know loosen
the rules */
switch
(
sb
->
u
.
ufs_sb
.
s_mount_opt
&
UFS_MOUNT_UFSTYPE
)
{
switch
(
sb
i
->
s_mount_opt
&
UFS_MOUNT_UFSTYPE
)
{
case
UFS_MOUNT_UFSTYPE_44BSD
:
UFSD
((
"ufstype=44bsd
\n
"
))
uspi
->
s_fsize
=
block_size
=
512
;
...
...
@@ -596,7 +605,10 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
}
again:
sb_set_blocksize
(
sb
,
block_size
);
if
(
sb_set_blocksize
(
sb
,
block_size
))
{
printk
(
KERN_ERR
"UFS: failed to set blocksize
\n
"
);
goto
failed
;
}
/*
* read ufs super block from device
...
...
@@ -617,7 +629,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
case
UFS_MAGIC_LFN
:
case
UFS_MAGIC_FEA
:
case
UFS_MAGIC_4GB
:
sb
->
u
.
ufs_sb
.
s_bytesex
=
BYTESEX_LE
;
sb
i
->
s_bytesex
=
BYTESEX_LE
;
goto
magic_found
;
}
switch
(
__constant_be32_to_cpu
(
usb3
->
fs_magic
))
{
...
...
@@ -625,13 +637,13 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
case
UFS_MAGIC_LFN
:
case
UFS_MAGIC_FEA
:
case
UFS_MAGIC_4GB
:
sb
->
u
.
ufs_sb
.
s_bytesex
=
BYTESEX_BE
;
sb
i
->
s_bytesex
=
BYTESEX_BE
;
goto
magic_found
;
}
if
((((
sb
->
u
.
ufs_sb
.
s_mount_opt
&
UFS_MOUNT_UFSTYPE
)
==
UFS_MOUNT_UFSTYPE_NEXTSTEP
)
||
((
sb
->
u
.
ufs_sb
.
s_mount_opt
&
UFS_MOUNT_UFSTYPE
)
==
UFS_MOUNT_UFSTYPE_NEXTSTEP_CD
)
||
((
sb
->
u
.
ufs_sb
.
s_mount_opt
&
UFS_MOUNT_UFSTYPE
)
==
UFS_MOUNT_UFSTYPE_OPENSTEP
))
if
((((
sb
i
->
s_mount_opt
&
UFS_MOUNT_UFSTYPE
)
==
UFS_MOUNT_UFSTYPE_NEXTSTEP
)
||
((
sb
i
->
s_mount_opt
&
UFS_MOUNT_UFSTYPE
)
==
UFS_MOUNT_UFSTYPE_NEXTSTEP_CD
)
||
((
sb
i
->
s_mount_opt
&
UFS_MOUNT_UFSTYPE
)
==
UFS_MOUNT_UFSTYPE_OPENSTEP
))
&&
uspi
->
s_sbbase
<
256
)
{
ubh_brelse_uspi
(
uspi
);
ubh
=
NULL
;
...
...
@@ -652,32 +664,32 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
uspi
->
s_fshift
=
fs32_to_cpu
(
sb
,
usb1
->
fs_fshift
);
if
(
uspi
->
s_fsize
&
(
uspi
->
s_fsize
-
1
))
{
printk
(
"ufs_read_super: fragment size %u is not a power of 2
\n
"
,
printk
(
KERN_ERR
"ufs_read_super: fragment size %u is not a power of 2
\n
"
,
uspi
->
s_fsize
);
goto
failed
;
}
if
(
uspi
->
s_fsize
<
512
)
{
printk
(
"ufs_read_super: fragment size %u is too small
\n
"
,
printk
(
KERN_ERR
"ufs_read_super: fragment size %u is too small
\n
"
,
uspi
->
s_fsize
);
goto
failed
;
}
if
(
uspi
->
s_fsize
>
4096
)
{
printk
(
"ufs_read_super: fragment size %u is too large
\n
"
,
printk
(
KERN_ERR
"ufs_read_super: fragment size %u is too large
\n
"
,
uspi
->
s_fsize
);
goto
failed
;
}
if
(
uspi
->
s_bsize
&
(
uspi
->
s_bsize
-
1
))
{
printk
(
"ufs_read_super: block size %u is not a power of 2
\n
"
,
printk
(
KERN_ERR
"ufs_read_super: block size %u is not a power of 2
\n
"
,
uspi
->
s_bsize
);
goto
failed
;
}
if
(
uspi
->
s_bsize
<
4096
)
{
printk
(
"ufs_read_super: block size %u is too small
\n
"
,
printk
(
KERN_ERR
"ufs_read_super: block size %u is too small
\n
"
,
uspi
->
s_bsize
);
goto
failed
;
}
if
(
uspi
->
s_bsize
/
uspi
->
s_fsize
>
8
)
{
printk
(
"ufs_read_super: too many fragments per block (%u)
\n
"
,
printk
(
KERN_ERR
"ufs_read_super: too many fragments per block (%u)
\n
"
,
uspi
->
s_bsize
/
uspi
->
s_fsize
);
goto
failed
;
}
...
...
@@ -801,12 +813,12 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
uspi
->
s_bpf
=
uspi
->
s_fsize
<<
3
;
uspi
->
s_bpfshift
=
uspi
->
s_fshift
+
3
;
uspi
->
s_bpfmask
=
uspi
->
s_bpf
-
1
;
if
((
sb
->
u
.
ufs_sb
.
s_mount_opt
&
UFS_MOUNT_UFSTYPE
)
==
if
((
sb
i
->
s_mount_opt
&
UFS_MOUNT_UFSTYPE
)
==
UFS_MOUNT_UFSTYPE_44BSD
)
uspi
->
s_maxsymlinklen
=
fs32_to_cpu
(
sb
,
usb3
->
fs_u2
.
fs_44
.
fs_maxsymlinklen
);
sb
->
u
.
ufs_sb
.
s_flags
=
flags
;
sb
i
->
s_flags
=
flags
;
inode
=
iget
(
sb
,
UFS_ROOTINO
);
if
(
!
inode
||
is_bad_inode
(
inode
))
...
...
@@ -831,8 +843,14 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
failed:
if
(
ubh
)
ubh_brelse_uspi
(
uspi
);
if
(
uspi
)
kfree
(
uspi
);
if
(
sbi
)
kfree
(
sbi
);
sb
->
u
.
generic_sbp
=
NULL
;
UFSD
((
"EXIT (FAILED)
\n
"
))
return
-
EINVAL
;
failed_nomem:
UFSD
((
"EXIT (NOMEM)
\n
"
))
return
-
ENOMEM
;
}
void
ufs_write_super
(
struct
super_block
*
sb
)
{
...
...
@@ -844,8 +862,8 @@ void ufs_write_super (struct super_block * sb) {
lock_kernel
();
UFSD
((
"ENTER
\n
"
))
flags
=
sb
->
u
.
ufs_sb
.
s_flags
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
flags
=
UFS_SB
(
sb
)
->
s_flags
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
usb3
=
ubh_get_usb_third
(
USPI_UBH
);
...
...
@@ -864,17 +882,17 @@ void ufs_write_super (struct super_block * sb) {
void
ufs_put_super
(
struct
super_block
*
sb
)
{
struct
ufs_sb_
private_info
*
uspi
;
struct
ufs_sb_
info
*
sbi
=
UFS_SB
(
sb
)
;
UFSD
((
"ENTER
\n
"
))
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
if
(
!
(
sb
->
s_flags
&
MS_RDONLY
))
ufs_put_cylinder_structures
(
sb
);
ubh_brelse_uspi
(
uspi
);
kfree
(
sb
->
u
.
ufs_sb
.
s_uspi
);
ubh_brelse_uspi
(
sbi
->
s_uspi
);
kfree
(
sbi
->
s_uspi
);
kfree
(
sbi
);
sb
->
u
.
generic_sbp
=
NULL
;
return
;
}
...
...
@@ -887,8 +905,8 @@ int ufs_remount (struct super_block * sb, int * mount_flags, char * data)
unsigned
new_mount_opt
,
ufstype
;
unsigned
flags
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
flags
=
sb
->
u
.
ufs_sb
.
s_flags
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
flags
=
UFS_SB
(
sb
)
->
s_flags
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
usb3
=
ubh_get_usb_third
(
USPI_UBH
);
...
...
@@ -896,7 +914,7 @@ int ufs_remount (struct super_block * sb, int * mount_flags, char * data)
* Allow the "check" option to be passed as a remount option.
* It is not possible to change ufstype option during remount
*/
ufstype
=
sb
->
u
.
ufs_sb
.
s_mount_opt
&
UFS_MOUNT_UFSTYPE
;
ufstype
=
UFS_SB
(
sb
)
->
s_mount_opt
&
UFS_MOUNT_UFSTYPE
;
new_mount_opt
=
0
;
ufs_set_opt
(
new_mount_opt
,
ONERROR_LOCK
);
if
(
!
ufs_parse_options
(
data
,
&
new_mount_opt
))
...
...
@@ -910,7 +928,7 @@ int ufs_remount (struct super_block * sb, int * mount_flags, char * data)
}
if
((
*
mount_flags
&
MS_RDONLY
)
==
(
sb
->
s_flags
&
MS_RDONLY
))
{
sb
->
u
.
ufs_sb
.
s_mount_opt
=
new_mount_opt
;
UFS_SB
(
sb
)
->
s_mount_opt
=
new_mount_opt
;
return
0
;
}
...
...
@@ -950,7 +968,7 @@ int ufs_remount (struct super_block * sb, int * mount_flags, char * data)
sb
->
s_flags
&=
~
MS_RDONLY
;
#endif
}
sb
->
u
.
ufs_sb
.
s_mount_opt
=
new_mount_opt
;
UFS_SB
(
sb
)
->
s_mount_opt
=
new_mount_opt
;
return
0
;
}
...
...
@@ -961,7 +979,7 @@ int ufs_statfs (struct super_block * sb, struct statfs * buf)
lock_kernel
();
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
usb1
=
ubh_get_usb_first
(
USPI_UBH
);
buf
->
f_type
=
UFS_MAGIC
;
...
...
This diff is collapsed.
Click to expand it.
fs/ufs/swab.h
View file @
136b6223
...
...
@@ -25,7 +25,7 @@ enum {
static
__inline
u64
fs64_to_cpu
(
struct
super_block
*
sbp
,
u64
n
)
{
if
(
sbp
->
u
.
ufs_sb
.
s_bytesex
==
BYTESEX_LE
)
if
(
UFS_SB
(
sbp
)
->
s_bytesex
==
BYTESEX_LE
)
return
le64_to_cpu
(
n
);
else
return
be64_to_cpu
(
n
);
...
...
@@ -34,7 +34,7 @@ fs64_to_cpu(struct super_block *sbp, u64 n)
static
__inline
u64
cpu_to_fs64
(
struct
super_block
*
sbp
,
u64
n
)
{
if
(
sbp
->
u
.
ufs_sb
.
s_bytesex
==
BYTESEX_LE
)
if
(
UFS_SB
(
sbp
)
->
s_bytesex
==
BYTESEX_LE
)
return
cpu_to_le64
(
n
);
else
return
cpu_to_be64
(
n
);
...
...
@@ -43,7 +43,7 @@ cpu_to_fs64(struct super_block *sbp, u64 n)
static
__inline
u32
fs64_add
(
struct
super_block
*
sbp
,
u32
*
n
,
int
d
)
{
if
(
sbp
->
u
.
ufs_sb
.
s_bytesex
==
BYTESEX_LE
)
if
(
UFS_SB
(
sbp
)
->
s_bytesex
==
BYTESEX_LE
)
return
*
n
=
cpu_to_le64
(
le64_to_cpu
(
*
n
)
+
d
);
else
return
*
n
=
cpu_to_be64
(
be64_to_cpu
(
*
n
)
+
d
);
...
...
@@ -52,7 +52,7 @@ fs64_add(struct super_block *sbp, u32 *n, int d)
static
__inline
u32
fs64_sub
(
struct
super_block
*
sbp
,
u32
*
n
,
int
d
)
{
if
(
sbp
->
u
.
ufs_sb
.
s_bytesex
==
BYTESEX_LE
)
if
(
UFS_SB
(
sbp
)
->
s_bytesex
==
BYTESEX_LE
)
return
*
n
=
cpu_to_le64
(
le64_to_cpu
(
*
n
)
-
d
);
else
return
*
n
=
cpu_to_be64
(
be64_to_cpu
(
*
n
)
-
d
);
...
...
@@ -61,7 +61,7 @@ fs64_sub(struct super_block *sbp, u32 *n, int d)
static
__inline
u32
fs32_to_cpu
(
struct
super_block
*
sbp
,
u32
n
)
{
if
(
sbp
->
u
.
ufs_sb
.
s_bytesex
==
BYTESEX_LE
)
if
(
UFS_SB
(
sbp
)
->
s_bytesex
==
BYTESEX_LE
)
return
le32_to_cpu
(
n
);
else
return
be32_to_cpu
(
n
);
...
...
@@ -70,7 +70,7 @@ fs32_to_cpu(struct super_block *sbp, u32 n)
static
__inline
u32
cpu_to_fs32
(
struct
super_block
*
sbp
,
u32
n
)
{
if
(
sbp
->
u
.
ufs_sb
.
s_bytesex
==
BYTESEX_LE
)
if
(
UFS_SB
(
sbp
)
->
s_bytesex
==
BYTESEX_LE
)
return
cpu_to_le32
(
n
);
else
return
cpu_to_be32
(
n
);
...
...
@@ -79,7 +79,7 @@ cpu_to_fs32(struct super_block *sbp, u32 n)
static
__inline
u32
fs32_add
(
struct
super_block
*
sbp
,
u32
*
n
,
int
d
)
{
if
(
sbp
->
u
.
ufs_sb
.
s_bytesex
==
BYTESEX_LE
)
if
(
UFS_SB
(
sbp
)
->
s_bytesex
==
BYTESEX_LE
)
return
*
n
=
cpu_to_le32
(
le32_to_cpu
(
*
n
)
+
d
);
else
return
*
n
=
cpu_to_be32
(
be32_to_cpu
(
*
n
)
+
d
);
...
...
@@ -88,7 +88,7 @@ fs32_add(struct super_block *sbp, u32 *n, int d)
static
__inline
u32
fs32_sub
(
struct
super_block
*
sbp
,
u32
*
n
,
int
d
)
{
if
(
sbp
->
u
.
ufs_sb
.
s_bytesex
==
BYTESEX_LE
)
if
(
UFS_SB
(
sbp
)
->
s_bytesex
==
BYTESEX_LE
)
return
*
n
=
cpu_to_le32
(
le32_to_cpu
(
*
n
)
-
d
);
else
return
*
n
=
cpu_to_be32
(
be32_to_cpu
(
*
n
)
-
d
);
...
...
@@ -97,7 +97,7 @@ fs32_sub(struct super_block *sbp, u32 *n, int d)
static
__inline
u16
fs16_to_cpu
(
struct
super_block
*
sbp
,
u16
n
)
{
if
(
sbp
->
u
.
ufs_sb
.
s_bytesex
==
BYTESEX_LE
)
if
(
UFS_SB
(
sbp
)
->
s_bytesex
==
BYTESEX_LE
)
return
le16_to_cpu
(
n
);
else
return
be16_to_cpu
(
n
);
...
...
@@ -106,7 +106,7 @@ fs16_to_cpu(struct super_block *sbp, u16 n)
static
__inline
u16
cpu_to_fs16
(
struct
super_block
*
sbp
,
u16
n
)
{
if
(
sbp
->
u
.
ufs_sb
.
s_bytesex
==
BYTESEX_LE
)
if
(
UFS_SB
(
sbp
)
->
s_bytesex
==
BYTESEX_LE
)
return
cpu_to_le16
(
n
);
else
return
cpu_to_be16
(
n
);
...
...
@@ -115,7 +115,7 @@ cpu_to_fs16(struct super_block *sbp, u16 n)
static
__inline
u16
fs16_add
(
struct
super_block
*
sbp
,
u16
*
n
,
int
d
)
{
if
(
sbp
->
u
.
ufs_sb
.
s_bytesex
==
BYTESEX_LE
)
if
(
UFS_SB
(
sbp
)
->
s_bytesex
==
BYTESEX_LE
)
return
*
n
=
cpu_to_le16
(
le16_to_cpu
(
*
n
)
+
d
);
else
return
*
n
=
cpu_to_be16
(
be16_to_cpu
(
*
n
)
+
d
);
...
...
@@ -124,7 +124,7 @@ fs16_add(struct super_block *sbp, u16 *n, int d)
static
__inline
u16
fs16_sub
(
struct
super_block
*
sbp
,
u16
*
n
,
int
d
)
{
if
(
sbp
->
u
.
ufs_sb
.
s_bytesex
==
BYTESEX_LE
)
if
(
UFS_SB
(
sbp
)
->
s_bytesex
==
BYTESEX_LE
)
return
*
n
=
cpu_to_le16
(
le16_to_cpu
(
*
n
)
-
d
);
else
return
*
n
=
cpu_to_be16
(
be16_to_cpu
(
*
n
)
-
d
);
...
...
This diff is collapsed.
Click to expand it.
fs/ufs/truncate.c
View file @
136b6223
...
...
@@ -82,7 +82,7 @@ static int ufs_trunc_direct (struct inode * inode)
UFSD
((
"ENTER
\n
"
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
frag_to_free
=
0
;
free_count
=
0
;
...
...
@@ -212,7 +212,7 @@ static int ufs_trunc_indirect (struct inode * inode, unsigned offset, u32 * p)
UFSD
((
"ENTER
\n
"
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
frag_to_free
=
0
;
free_count
=
0
;
...
...
@@ -306,7 +306,7 @@ static int ufs_trunc_dindirect (struct inode * inode, unsigned offset, u32 * p)
UFSD
((
"ENTER
\n
"
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
dindirect_block
=
(
DIRECT_BLOCK
>
offset
)
?
((
DIRECT_BLOCK
-
offset
)
>>
uspi
->
s_apbshift
)
:
0
;
...
...
@@ -374,7 +374,7 @@ static int ufs_trunc_tindirect (struct inode * inode)
UFSD
((
"ENTER
\n
"
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
retry
=
0
;
tindirect_block
=
(
DIRECT_BLOCK
>
(
UFS_NDADDR
+
uspi
->
s_apb
+
uspi
->
s_2apb
))
...
...
@@ -435,7 +435,7 @@ void ufs_truncate (struct inode * inode)
UFSD
((
"ENTER
\n
"
))
sb
=
inode
->
i_sb
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
if
(
!
(
S_ISREG
(
inode
->
i_mode
)
||
S_ISDIR
(
inode
->
i_mode
)
||
S_ISLNK
(
inode
->
i_mode
)))
return
;
...
...
This diff is collapsed.
Click to expand it.
fs/ufs/util.h
View file @
136b6223
...
...
@@ -31,7 +31,7 @@ static inline s32
ufs_get_fs_state
(
struct
super_block
*
sb
,
struct
ufs_super_block_first
*
usb1
,
struct
ufs_super_block_third
*
usb3
)
{
switch
(
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_ST_MASK
)
{
switch
(
UFS_SB
(
sb
)
->
s_flags
&
UFS_ST_MASK
)
{
case
UFS_ST_SUN
:
return
fs32_to_cpu
(
sb
,
usb3
->
fs_u2
.
fs_sun
.
fs_state
);
case
UFS_ST_SUNx86
:
...
...
@@ -46,7 +46,7 @@ static inline void
ufs_set_fs_state
(
struct
super_block
*
sb
,
struct
ufs_super_block_first
*
usb1
,
struct
ufs_super_block_third
*
usb3
,
s32
value
)
{
switch
(
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_ST_MASK
)
{
switch
(
UFS_SB
(
sb
)
->
s_flags
&
UFS_ST_MASK
)
{
case
UFS_ST_SUN
:
usb3
->
fs_u2
.
fs_sun
.
fs_state
=
cpu_to_fs32
(
sb
,
value
);
break
;
...
...
@@ -63,7 +63,7 @@ static inline u32
ufs_get_fs_npsect
(
struct
super_block
*
sb
,
struct
ufs_super_block_first
*
usb1
,
struct
ufs_super_block_third
*
usb3
)
{
if
((
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_ST_MASK
)
==
UFS_ST_SUNx86
)
if
((
UFS_SB
(
sb
)
->
s_flags
&
UFS_ST_MASK
)
==
UFS_ST_SUNx86
)
return
fs32_to_cpu
(
sb
,
usb3
->
fs_u2
.
fs_sunx86
.
fs_npsect
);
else
return
fs32_to_cpu
(
sb
,
usb1
->
fs_u1
.
fs_sun
.
fs_npsect
);
...
...
@@ -74,7 +74,7 @@ ufs_get_fs_qbmask(struct super_block *sb, struct ufs_super_block_third *usb3)
{
u64
tmp
;
switch
(
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_ST_MASK
)
{
switch
(
UFS_SB
(
sb
)
->
s_flags
&
UFS_ST_MASK
)
{
case
UFS_ST_SUN
:
((
u32
*
)
&
tmp
)[
0
]
=
usb3
->
fs_u2
.
fs_sun
.
fs_qbmask
[
0
];
((
u32
*
)
&
tmp
)[
1
]
=
usb3
->
fs_u2
.
fs_sun
.
fs_qbmask
[
1
];
...
...
@@ -97,7 +97,7 @@ ufs_get_fs_qfmask(struct super_block *sb, struct ufs_super_block_third *usb3)
{
u64
tmp
;
switch
(
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_ST_MASK
)
{
switch
(
UFS_SB
(
sb
)
->
s_flags
&
UFS_ST_MASK
)
{
case
UFS_ST_SUN
:
((
u32
*
)
&
tmp
)[
0
]
=
usb3
->
fs_u2
.
fs_sun
.
fs_qfmask
[
0
];
((
u32
*
)
&
tmp
)[
1
]
=
usb3
->
fs_u2
.
fs_sun
.
fs_qfmask
[
1
];
...
...
@@ -118,7 +118,7 @@ ufs_get_fs_qfmask(struct super_block *sb, struct ufs_super_block_third *usb3)
static
inline
u16
ufs_get_de_namlen
(
struct
super_block
*
sb
,
struct
ufs_dir_entry
*
de
)
{
if
((
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_DE_MASK
)
==
UFS_DE_OLD
)
if
((
UFS_SB
(
sb
)
->
s_flags
&
UFS_DE_MASK
)
==
UFS_DE_OLD
)
return
fs16_to_cpu
(
sb
,
de
->
d_u
.
d_namlen
);
else
return
de
->
d_u
.
d_44
.
d_namlen
;
/* XXX this seems wrong */
...
...
@@ -127,7 +127,7 @@ ufs_get_de_namlen(struct super_block *sb, struct ufs_dir_entry *de)
static
inline
void
ufs_set_de_namlen
(
struct
super_block
*
sb
,
struct
ufs_dir_entry
*
de
,
u16
value
)
{
if
((
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_DE_MASK
)
==
UFS_DE_OLD
)
if
((
UFS_SB
(
sb
)
->
s_flags
&
UFS_DE_MASK
)
==
UFS_DE_OLD
)
de
->
d_u
.
d_namlen
=
cpu_to_fs16
(
sb
,
value
);
else
de
->
d_u
.
d_44
.
d_namlen
=
value
;
/* XXX this seems wrong */
...
...
@@ -136,7 +136,7 @@ ufs_set_de_namlen(struct super_block *sb, struct ufs_dir_entry *de, u16 value)
static
inline
void
ufs_set_de_type
(
struct
super_block
*
sb
,
struct
ufs_dir_entry
*
de
,
int
mode
)
{
if
((
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_DE_MASK
)
!=
UFS_DE_44BSD
)
if
((
UFS_SB
(
sb
)
->
s_flags
&
UFS_DE_MASK
)
!=
UFS_DE_44BSD
)
return
;
/*
...
...
@@ -172,7 +172,7 @@ ufs_set_de_type(struct super_block *sb, struct ufs_dir_entry *de, int mode)
static
inline
u32
ufs_get_inode_uid
(
struct
super_block
*
sb
,
struct
ufs_inode
*
inode
)
{
switch
(
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_UID_MASK
)
{
switch
(
UFS_SB
(
sb
)
->
s_flags
&
UFS_UID_MASK
)
{
case
UFS_UID_EFT
:
return
fs32_to_cpu
(
sb
,
inode
->
ui_u3
.
ui_sun
.
ui_uid
);
case
UFS_UID_44BSD
:
...
...
@@ -185,7 +185,7 @@ ufs_get_inode_uid(struct super_block *sb, struct ufs_inode *inode)
static
inline
void
ufs_set_inode_uid
(
struct
super_block
*
sb
,
struct
ufs_inode
*
inode
,
u32
value
)
{
switch
(
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_UID_MASK
)
{
switch
(
UFS_SB
(
sb
)
->
s_flags
&
UFS_UID_MASK
)
{
case
UFS_UID_EFT
:
inode
->
ui_u3
.
ui_sun
.
ui_uid
=
cpu_to_fs32
(
sb
,
value
);
break
;
...
...
@@ -199,7 +199,7 @@ ufs_set_inode_uid(struct super_block *sb, struct ufs_inode *inode, u32 value)
static
inline
u32
ufs_get_inode_gid
(
struct
super_block
*
sb
,
struct
ufs_inode
*
inode
)
{
switch
(
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_UID_MASK
)
{
switch
(
UFS_SB
(
sb
)
->
s_flags
&
UFS_UID_MASK
)
{
case
UFS_UID_EFT
:
return
fs32_to_cpu
(
sb
,
inode
->
ui_u3
.
ui_sun
.
ui_gid
);
case
UFS_UID_44BSD
:
...
...
@@ -212,7 +212,7 @@ ufs_get_inode_gid(struct super_block *sb, struct ufs_inode *inode)
static
inline
void
ufs_set_inode_gid
(
struct
super_block
*
sb
,
struct
ufs_inode
*
inode
,
u32
value
)
{
switch
(
sb
->
u
.
ufs_sb
.
s_flags
&
UFS_UID_MASK
)
{
switch
(
UFS_SB
(
sb
)
->
s_flags
&
UFS_UID_MASK
)
{
case
UFS_UID_EFT
:
inode
->
ui_u3
.
ui_sun
.
ui_gid
=
cpu_to_fs32
(
sb
,
value
);
break
;
...
...
@@ -481,7 +481,7 @@ static inline void ufs_fragacct (struct super_block * sb, unsigned blockmap,
struct
ufs_sb_private_info
*
uspi
;
unsigned
fragsize
,
pos
;
uspi
=
sb
->
u
.
ufs_sb
.
s_uspi
;
uspi
=
UFS_SB
(
sb
)
->
s_uspi
;
fragsize
=
0
;
for
(
pos
=
0
;
pos
<
uspi
->
s_fpb
;
pos
++
)
{
...
...
This diff is collapsed.
Click to expand it.
include/linux/ufs_fs.h
View file @
136b6223
...
...
@@ -33,6 +33,9 @@
#include <linux/stat.h>
#include <linux/fs.h>
#include <linux/ufs_fs_i.h>
#include <linux/ufs_fs_sb.h>
#define UFS_BBLOCK 0
#define UFS_BBSIZE 8192
#define UFS_SBLOCK 8192
...
...
@@ -398,7 +401,7 @@ struct ufs_super_block {
* Convert cylinder group to base address of its global summary info.
*/
#define fs_cs(indx) \
u.ufs_sb.
s_csp[(indx) >> uspi->s_csshift][(indx) & ~uspi->s_csmask]
s_csp[(indx) >> uspi->s_csshift][(indx) & ~uspi->s_csmask]
/*
* Cylinder group block for a file system.
...
...
@@ -780,7 +783,10 @@ extern struct inode_operations ufs_fast_symlink_inode_operations;
/* truncate.c */
extern
void
ufs_truncate
(
struct
inode
*
);
#include <linux/ufs_fs_i.h>
static
inline
struct
ufs_sb_info
*
UFS_SB
(
struct
super_block
*
sb
)
{
return
sb
->
u
.
generic_sbp
;
}
static
inline
struct
ufs_inode_info
*
UFS_I
(
struct
inode
*
inode
)
{
...
...
This diff is collapsed.
Click to expand it.
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