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
c327ff62
Commit
c327ff62
authored
Jul 13, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge head 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/shaggy/jfs-2.6
parents
c0ac515e
59192ed9
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
15 additions
and
953 deletions
+15
-953
fs/jfs/jfs_dmap.c
fs/jfs/jfs_dmap.c
+8
-290
fs/jfs/jfs_dtree.c
fs/jfs/jfs_dtree.c
+0
-199
fs/jfs/jfs_dtree.h
fs/jfs/jfs_dtree.h
+0
-7
fs/jfs/jfs_imap.c
fs/jfs/jfs_imap.c
+0
-105
fs/jfs/jfs_unicode.c
fs/jfs/jfs_unicode.c
+4
-3
fs/jfs/jfs_xtree.c
fs/jfs/jfs_xtree.c
+0
-340
fs/jfs/jfs_xtree.h
fs/jfs/jfs_xtree.h
+0
-6
fs/jfs/xattr.c
fs/jfs/xattr.c
+3
-3
No files found.
fs/jfs/jfs_dmap.c
View file @
c327ff62
...
...
@@ -25,36 +25,6 @@
#include "jfs_metapage.h"
#include "jfs_debug.h"
/*
* Debug code for double-checking block map
*/
/* #define _JFS_DEBUG_DMAP 1 */
#ifdef _JFS_DEBUG_DMAP
#define DBINITMAP(size,ipbmap,results) \
DBinitmap(size,ipbmap,results)
#define DBALLOC(dbmap,mapsize,blkno,nblocks) \
DBAlloc(dbmap,mapsize,blkno,nblocks)
#define DBFREE(dbmap,mapsize,blkno,nblocks) \
DBFree(dbmap,mapsize,blkno,nblocks)
#define DBALLOCCK(dbmap,mapsize,blkno,nblocks) \
DBAllocCK(dbmap,mapsize,blkno,nblocks)
#define DBFREECK(dbmap,mapsize,blkno,nblocks) \
DBFreeCK(dbmap,mapsize,blkno,nblocks)
static
void
DBinitmap
(
s64
,
struct
inode
*
,
u32
**
);
static
void
DBAlloc
(
uint
*
,
s64
,
s64
,
s64
);
static
void
DBFree
(
uint
*
,
s64
,
s64
,
s64
);
static
void
DBAllocCK
(
uint
*
,
s64
,
s64
,
s64
);
static
void
DBFreeCK
(
uint
*
,
s64
,
s64
,
s64
);
#else
#define DBINITMAP(size,ipbmap,results)
#define DBALLOC(dbmap, mapsize, blkno, nblocks)
#define DBFREE(dbmap, mapsize, blkno, nblocks)
#define DBALLOCCK(dbmap, mapsize, blkno, nblocks)
#define DBFREECK(dbmap, mapsize, blkno, nblocks)
#endif
/* _JFS_DEBUG_DMAP */
/*
* SERIALIZATION of the Block Allocation Map.
*
...
...
@@ -242,7 +212,6 @@ int dbMount(struct inode *ipbmap)
JFS_SBI
(
ipbmap
->
i_sb
)
->
bmap
=
bmp
;
memset
(
bmp
->
db_active
,
0
,
sizeof
(
bmp
->
db_active
));
DBINITMAP
(
bmp
->
db_mapsize
,
ipbmap
,
&
bmp
->
db_DBmap
);
/*
* allocate/initialize the bmap lock
...
...
@@ -407,16 +376,12 @@ int dbFree(struct inode *ip, s64 blkno, s64 nblocks)
*/
nb
=
min
(
rem
,
BPERDMAP
-
(
blkno
&
(
BPERDMAP
-
1
)));
DBALLOCCK
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
blkno
,
nb
);
/* free the blocks. */
if
((
rc
=
dbFreeDmap
(
bmp
,
dp
,
blkno
,
nb
)))
{
release_metapage
(
mp
);
IREAD_UNLOCK
(
ipbmap
);
return
(
rc
);
}
DBFREE
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
blkno
,
nb
);
}
/* write the last buffer. */
...
...
@@ -775,10 +740,6 @@ int dbAlloc(struct inode *ip, s64 hint, s64 nblocks, s64 * results)
IWRITE_LOCK
(
ipbmap
);
rc
=
dbAllocAny
(
bmp
,
nblocks
,
l2nb
,
results
);
if
(
rc
==
0
)
{
DBALLOC
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
*
results
,
nblocks
);
}
goto
write_unlock
;
}
...
...
@@ -836,8 +797,6 @@ int dbAlloc(struct inode *ip, s64 hint, s64 nblocks, s64 * results)
!=
-
ENOSPC
)
{
if
(
rc
==
0
)
{
*
results
=
blkno
;
DBALLOC
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
*
results
,
nblocks
);
mark_metapage_dirty
(
mp
);
}
...
...
@@ -863,11 +822,8 @@ int dbAlloc(struct inode *ip, s64 hint, s64 nblocks, s64 * results)
if
((
rc
=
dbAllocNear
(
bmp
,
dp
,
blkno
,
(
int
)
nblocks
,
l2nb
,
results
))
!=
-
ENOSPC
)
{
if
(
rc
==
0
)
{
DBALLOC
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
*
results
,
nblocks
);
if
(
rc
==
0
)
mark_metapage_dirty
(
mp
);
}
release_metapage
(
mp
);
goto
read_unlock
;
...
...
@@ -878,11 +834,8 @@ int dbAlloc(struct inode *ip, s64 hint, s64 nblocks, s64 * results)
*/
if
((
rc
=
dbAllocDmapLev
(
bmp
,
dp
,
(
int
)
nblocks
,
l2nb
,
results
))
!=
-
ENOSPC
)
{
if
(
rc
==
0
)
{
DBALLOC
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
*
results
,
nblocks
);
if
(
rc
==
0
)
mark_metapage_dirty
(
mp
);
}
release_metapage
(
mp
);
goto
read_unlock
;
...
...
@@ -896,13 +849,9 @@ int dbAlloc(struct inode *ip, s64 hint, s64 nblocks, s64 * results)
* the same allocation group as the hint.
*/
IWRITE_LOCK
(
ipbmap
);
if
((
rc
=
dbAllocAG
(
bmp
,
agno
,
nblocks
,
l2nb
,
results
))
!=
-
ENOSPC
)
{
if
(
rc
==
0
)
DBALLOC
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
*
results
,
nblocks
);
if
((
rc
=
dbAllocAG
(
bmp
,
agno
,
nblocks
,
l2nb
,
results
))
!=
-
ENOSPC
)
goto
write_unlock
;
}
IWRITE_UNLOCK
(
ipbmap
);
...
...
@@ -918,9 +867,6 @@ int dbAlloc(struct inode *ip, s64 hint, s64 nblocks, s64 * results)
*/
if
((
rc
=
dbAllocAG
(
bmp
,
agno
,
nblocks
,
l2nb
,
results
))
==
-
ENOSPC
)
rc
=
dbAllocAny
(
bmp
,
nblocks
,
l2nb
,
results
);
if
(
rc
==
0
)
{
DBALLOC
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
*
results
,
nblocks
);
}
write_unlock:
IWRITE_UNLOCK
(
ipbmap
);
...
...
@@ -992,10 +938,9 @@ int dbAllocExact(struct inode *ip, s64 blkno, int nblocks)
IREAD_UNLOCK
(
ipbmap
);
if
(
rc
==
0
)
{
DBALLOC
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
blkno
,
nblocks
);
if
(
rc
==
0
)
mark_metapage_dirty
(
mp
);
}
release_metapage
(
mp
);
return
(
rc
);
...
...
@@ -1144,7 +1089,6 @@ static int dbExtend(struct inode *ip, s64 blkno, s64 nblocks, s64 addnblocks)
return
-
EIO
;
}
DBALLOCCK
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
blkno
,
nblocks
);
dp
=
(
struct
dmap
*
)
mp
->
data
;
/* try to allocate the blocks immediately following the
...
...
@@ -1155,11 +1099,9 @@ static int dbExtend(struct inode *ip, s64 blkno, s64 nblocks, s64 addnblocks)
IREAD_UNLOCK
(
ipbmap
);
/* were we successful ? */
if
(
rc
==
0
)
{
DBALLOC
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
extblkno
,
addnblocks
);
if
(
rc
==
0
)
write_metapage
(
mp
);
}
else
else
/* we were not successful */
release_metapage
(
mp
);
...
...
@@ -3185,16 +3127,12 @@ int dbAllocBottomUp(struct inode *ip, s64 blkno, s64 nblocks)
*/
nb
=
min
(
rem
,
BPERDMAP
-
(
blkno
&
(
BPERDMAP
-
1
)));
DBFREECK
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
blkno
,
nb
);
/* allocate the blocks. */
if
((
rc
=
dbAllocDmapBU
(
bmp
,
dp
,
blkno
,
nb
)))
{
release_metapage
(
mp
);
IREAD_UNLOCK
(
ipbmap
);
return
(
rc
);
}
DBALLOC
(
bmp
->
db_DBmap
,
bmp
->
db_mapsize
,
blkno
,
nb
);
}
/* write the last buffer. */
...
...
@@ -4041,223 +3979,3 @@ s64 dbMapFileSizeToMapSize(struct inode * ipbmap)
return
(
nblocks
);
}
#ifdef _JFS_DEBUG_DMAP
/*
* DBinitmap()
*/
static
void
DBinitmap
(
s64
size
,
struct
inode
*
ipbmap
,
u32
**
results
)
{
int
npages
;
u32
*
dbmap
,
*
d
;
int
n
;
s64
lblkno
,
cur_block
;
struct
dmap
*
dp
;
struct
metapage
*
mp
;
npages
=
size
/
32768
;
npages
+=
(
size
%
32768
)
?
1
:
0
;
dbmap
=
(
u32
*
)
xmalloc
(
npages
*
4096
,
L2PSIZE
,
kernel_heap
);
if
(
dbmap
==
NULL
)
BUG
();
/* Not robust since this is only unused debug code */
for
(
n
=
0
,
d
=
dbmap
;
n
<
npages
;
n
++
,
d
+=
1024
)
bzero
(
d
,
4096
);
/* Need to initialize from disk map pages
*/
for
(
d
=
dbmap
,
cur_block
=
0
;
cur_block
<
size
;
cur_block
+=
BPERDMAP
,
d
+=
LPERDMAP
)
{
lblkno
=
BLKTODMAP
(
cur_block
,
JFS_SBI
(
ipbmap
->
i_sb
)
->
bmap
->
db_l2nbperpage
);
mp
=
read_metapage
(
ipbmap
,
lblkno
,
PSIZE
,
0
);
if
(
mp
==
NULL
)
{
jfs_error
(
ipbmap
->
i_sb
,
"DBinitmap: could not read disk map page"
);
continue
;
}
dp
=
(
struct
dmap
*
)
mp
->
data
;
for
(
n
=
0
;
n
<
LPERDMAP
;
n
++
)
d
[
n
]
=
le32_to_cpu
(
dp
->
wmap
[
n
]);
release_metapage
(
mp
);
}
*
results
=
dbmap
;
}
/*
* DBAlloc()
*/
void
DBAlloc
(
uint
*
dbmap
,
s64
mapsize
,
s64
blkno
,
s64
nblocks
)
{
int
word
,
nb
,
bitno
;
u32
mask
;
assert
(
blkno
>
0
&&
blkno
<
mapsize
);
assert
(
nblocks
>
0
&&
nblocks
<=
mapsize
);
assert
(
blkno
+
nblocks
<=
mapsize
);
dbmap
+=
(
blkno
/
32
);
while
(
nblocks
>
0
)
{
bitno
=
blkno
&
(
32
-
1
);
nb
=
min
(
nblocks
,
32
-
bitno
);
mask
=
(
0xffffffff
<<
(
32
-
nb
)
>>
bitno
);
assert
((
mask
&
*
dbmap
)
==
0
);
*
dbmap
|=
mask
;
dbmap
++
;
blkno
+=
nb
;
nblocks
-=
nb
;
}
}
/*
* DBFree()
*/
static
void
DBFree
(
uint
*
dbmap
,
s64
mapsize
,
s64
blkno
,
s64
nblocks
)
{
int
word
,
nb
,
bitno
;
u32
mask
;
assert
(
blkno
>
0
&&
blkno
<
mapsize
);
assert
(
nblocks
>
0
&&
nblocks
<=
mapsize
);
assert
(
blkno
+
nblocks
<=
mapsize
);
dbmap
+=
(
blkno
/
32
);
while
(
nblocks
>
0
)
{
bitno
=
blkno
&
(
32
-
1
);
nb
=
min
(
nblocks
,
32
-
bitno
);
mask
=
(
0xffffffff
<<
(
32
-
nb
)
>>
bitno
);
assert
((
mask
&
*
dbmap
)
==
mask
);
*
dbmap
&=
~
mask
;
dbmap
++
;
blkno
+=
nb
;
nblocks
-=
nb
;
}
}
/*
* DBAllocCK()
*/
static
void
DBAllocCK
(
uint
*
dbmap
,
s64
mapsize
,
s64
blkno
,
s64
nblocks
)
{
int
word
,
nb
,
bitno
;
u32
mask
;
assert
(
blkno
>
0
&&
blkno
<
mapsize
);
assert
(
nblocks
>
0
&&
nblocks
<=
mapsize
);
assert
(
blkno
+
nblocks
<=
mapsize
);
dbmap
+=
(
blkno
/
32
);
while
(
nblocks
>
0
)
{
bitno
=
blkno
&
(
32
-
1
);
nb
=
min
(
nblocks
,
32
-
bitno
);
mask
=
(
0xffffffff
<<
(
32
-
nb
)
>>
bitno
);
assert
((
mask
&
*
dbmap
)
==
mask
);
dbmap
++
;
blkno
+=
nb
;
nblocks
-=
nb
;
}
}
/*
* DBFreeCK()
*/
static
void
DBFreeCK
(
uint
*
dbmap
,
s64
mapsize
,
s64
blkno
,
s64
nblocks
)
{
int
word
,
nb
,
bitno
;
u32
mask
;
assert
(
blkno
>
0
&&
blkno
<
mapsize
);
assert
(
nblocks
>
0
&&
nblocks
<=
mapsize
);
assert
(
blkno
+
nblocks
<=
mapsize
);
dbmap
+=
(
blkno
/
32
);
while
(
nblocks
>
0
)
{
bitno
=
blkno
&
(
32
-
1
);
nb
=
min
(
nblocks
,
32
-
bitno
);
mask
=
(
0xffffffff
<<
(
32
-
nb
)
>>
bitno
);
assert
((
mask
&
*
dbmap
)
==
0
);
dbmap
++
;
blkno
+=
nb
;
nblocks
-=
nb
;
}
}
/*
* dbPrtMap()
*/
static
void
dbPrtMap
(
struct
bmap
*
bmp
)
{
printk
(
" mapsize: %d%d
\n
"
,
bmp
->
db_mapsize
);
printk
(
" nfree: %d%d
\n
"
,
bmp
->
db_nfree
);
printk
(
" numag: %d
\n
"
,
bmp
->
db_numag
);
printk
(
" agsize: %d%d
\n
"
,
bmp
->
db_agsize
);
printk
(
" agl2size: %d
\n
"
,
bmp
->
db_agl2size
);
printk
(
" agwidth: %d
\n
"
,
bmp
->
db_agwidth
);
printk
(
" agstart: %d
\n
"
,
bmp
->
db_agstart
);
printk
(
" agheigth: %d
\n
"
,
bmp
->
db_agheigth
);
printk
(
" aglevel: %d
\n
"
,
bmp
->
db_aglevel
);
printk
(
" maxlevel: %d
\n
"
,
bmp
->
db_maxlevel
);
printk
(
" maxag: %d
\n
"
,
bmp
->
db_maxag
);
printk
(
" agpref: %d
\n
"
,
bmp
->
db_agpref
);
printk
(
" l2nbppg: %d
\n
"
,
bmp
->
db_l2nbperpage
);
}
/*
* dbPrtCtl()
*/
static
void
dbPrtCtl
(
struct
dmapctl
*
dcp
)
{
int
i
,
j
,
n
;
printk
(
" height: %08x
\n
"
,
le32_to_cpu
(
dcp
->
height
));
printk
(
" leafidx: %08x
\n
"
,
le32_to_cpu
(
dcp
->
leafidx
));
printk
(
" budmin: %08x
\n
"
,
dcp
->
budmin
);
printk
(
" nleafs: %08x
\n
"
,
le32_to_cpu
(
dcp
->
nleafs
));
printk
(
" l2nleafs: %08x
\n
"
,
le32_to_cpu
(
dcp
->
l2nleafs
));
printk
(
"
\n
Tree:
\n
"
);
for
(
i
=
0
;
i
<
CTLLEAFIND
;
i
+=
8
)
{
n
=
min
(
8
,
CTLLEAFIND
-
i
);
for
(
j
=
0
;
j
<
n
;
j
++
)
printf
(
" [%03x]: %02x"
,
i
+
j
,
(
char
)
dcp
->
stree
[
i
+
j
]);
printf
(
"
\n
"
);
}
printk
(
"
\n
Tree Leaves:
\n
"
);
for
(
i
=
0
;
i
<
LPERCTL
;
i
+=
8
)
{
n
=
min
(
8
,
LPERCTL
-
i
);
for
(
j
=
0
;
j
<
n
;
j
++
)
printf
(
" [%03x]: %02x"
,
i
+
j
,
(
char
)
dcp
->
stree
[
i
+
j
+
CTLLEAFIND
]);
printf
(
"
\n
"
);
}
}
#endif
/* _JFS_DEBUG_DMAP */
fs/jfs/jfs_dtree.c
View file @
c327ff62
...
...
@@ -4554,202 +4554,3 @@ int dtModify(tid_t tid, struct inode *ip,
return
0
;
}
#ifdef _JFS_DEBUG_DTREE
/*
* dtDisplayTree()
*
* function: traverse forward
*/
int
dtDisplayTree
(
struct
inode
*
ip
)
{
int
rc
;
struct
metapage
*
mp
;
dtpage_t
*
p
;
s64
bn
,
pbn
;
int
index
,
lastindex
,
v
,
h
;
pxd_t
*
xd
;
struct
btstack
btstack
;
struct
btframe
*
btsp
;
struct
btframe
*
parent
;
u8
*
stbl
;
int
psize
=
256
;
printk
(
"display B+-tree.
\n
"
);
/* clear stack */
btsp
=
btstack
.
stack
;
/*
* start with root
*
* root resides in the inode
*/
bn
=
0
;
v
=
h
=
0
;
/*
* first access of each page:
*/
newPage:
DT_GETPAGE
(
ip
,
bn
,
mp
,
psize
,
p
,
rc
);
if
(
rc
)
return
rc
;
/* process entries forward from first index */
index
=
0
;
lastindex
=
p
->
header
.
nextindex
-
1
;
if
(
p
->
header
.
flag
&
BT_INTERNAL
)
{
/*
* first access of each internal page
*/
printf
(
"internal page "
);
dtDisplayPage
(
ip
,
bn
,
p
);
goto
getChild
;
}
else
{
/* (p->header.flag & BT_LEAF) */
/*
* first access of each leaf page
*/
printf
(
"leaf page "
);
dtDisplayPage
(
ip
,
bn
,
p
);
/*
* process leaf page entries
*
for ( ; index <= lastindex; index++)
{
}
*/
/* unpin the leaf page */
DT_PUTPAGE
(
mp
);
}
/*
* go back up to the parent page
*/
getParent:
/* pop/restore parent entry for the current child page */
if
((
parent
=
(
btsp
==
btstack
.
stack
?
NULL
:
--
btsp
))
==
NULL
)
/* current page must have been root */
return
;
/*
* parent page scan completed
*/
if
((
index
=
parent
->
index
)
==
(
lastindex
=
parent
->
lastindex
))
{
/* go back up to the parent page */
goto
getParent
;
}
/*
* parent page has entries remaining
*/
/* get back the parent page */
bn
=
parent
->
bn
;
/* v = parent->level; */
DT_GETPAGE
(
ip
,
bn
,
mp
,
PSIZE
,
p
,
rc
);
if
(
rc
)
return
rc
;
/* get next parent entry */
index
++
;
/*
* internal page: go down to child page of current entry
*/
getChild:
/* push/save current parent entry for the child page */
btsp
->
bn
=
pbn
=
bn
;
btsp
->
index
=
index
;
btsp
->
lastindex
=
lastindex
;
/* btsp->level = v; */
/* btsp->node = h; */
++
btsp
;
/* get current entry for the child page */
stbl
=
DT_GETSTBL
(
p
);
xd
=
(
pxd_t
*
)
&
p
->
slot
[
stbl
[
index
]];
/*
* first access of each internal entry:
*/
/* get child page */
bn
=
addressPXD
(
xd
);
psize
=
lengthPXD
(
xd
)
<<
ip
->
i_ipmnt
->
i_l2bsize
;
printk
(
"traverse down 0x%Lx[%d]->0x%Lx
\n
"
,
pbn
,
index
,
bn
);
v
++
;
h
=
index
;
/* release parent page */
DT_PUTPAGE
(
mp
);
/* process the child page */
goto
newPage
;
}
/*
* dtDisplayPage()
*
* function: display page
*/
int
dtDisplayPage
(
struct
inode
*
ip
,
s64
bn
,
dtpage_t
*
p
)
{
int
rc
;
struct
metapage
*
mp
;
struct
ldtentry
*
lh
;
struct
idtentry
*
ih
;
pxd_t
*
xd
;
int
i
,
j
;
u8
*
stbl
;
wchar_t
name
[
JFS_NAME_MAX
+
1
];
struct
component_name
key
=
{
0
,
name
};
int
freepage
=
0
;
if
(
p
==
NULL
)
{
freepage
=
1
;
DT_GETPAGE
(
ip
,
bn
,
mp
,
PSIZE
,
p
,
rc
);
if
(
rc
)
return
rc
;
}
/* display page control */
printk
(
"bn:0x%Lx flag:0x%08x nextindex:%d
\n
"
,
bn
,
p
->
header
.
flag
,
p
->
header
.
nextindex
);
/* display entries */
stbl
=
DT_GETSTBL
(
p
);
for
(
i
=
0
,
j
=
1
;
i
<
p
->
header
.
nextindex
;
i
++
,
j
++
)
{
dtGetKey
(
p
,
i
,
&
key
,
JFS_SBI
(
ip
->
i_sb
)
->
mntflag
);
key
.
name
[
key
.
namlen
]
=
'\0'
;
if
(
p
->
header
.
flag
&
BT_LEAF
)
{
lh
=
(
struct
ldtentry
*
)
&
p
->
slot
[
stbl
[
i
]];
printf
(
"
\t
[%d] %s:%d"
,
i
,
key
.
name
,
le32_to_cpu
(
lh
->
inumber
));
}
else
{
ih
=
(
struct
idtentry
*
)
&
p
->
slot
[
stbl
[
i
]];
xd
=
(
pxd_t
*
)
ih
;
bn
=
addressPXD
(
xd
);
printf
(
"
\t
[%d] %s:0x%Lx"
,
i
,
key
.
name
,
bn
);
}
if
(
j
==
4
)
{
printf
(
"
\n
"
);
j
=
0
;
}
}
printf
(
"
\n
"
);
if
(
freepage
)
DT_PUTPAGE
(
mp
);
return
0
;
}
#endif
/* _JFS_DEBUG_DTREE */
fs/jfs/jfs_dtree.h
View file @
c327ff62
...
...
@@ -269,11 +269,4 @@ extern int dtModify(tid_t tid, struct inode *ip, struct component_name * key,
ino_t
*
orig_ino
,
ino_t
new_ino
,
int
flag
);
extern
int
jfs_readdir
(
struct
file
*
filp
,
void
*
dirent
,
filldir_t
filldir
);
#ifdef _JFS_DEBUG_DTREE
extern
int
dtDisplayTree
(
struct
inode
*
ip
);
extern
int
dtDisplayPage
(
struct
inode
*
ip
,
s64
bn
,
dtpage_t
*
p
);
#endif
/* _JFS_DEBUG_DTREE */
#endif
/* !_H_JFS_DTREE */
fs/jfs/jfs_imap.c
View file @
c327ff62
...
...
@@ -86,25 +86,6 @@ static int diIAGRead(struct inomap * imap, int, struct metapage **);
static
int
copy_from_dinode
(
struct
dinode
*
,
struct
inode
*
);
static
void
copy_to_dinode
(
struct
dinode
*
,
struct
inode
*
);
/*
* debug code for double-checking inode map
*/
/* #define _JFS_DEBUG_IMAP 1 */
#ifdef _JFS_DEBUG_IMAP
#define DBG_DIINIT(imap) DBGdiInit(imap)
#define DBG_DIALLOC(imap, ino) DBGdiAlloc(imap, ino)
#define DBG_DIFREE(imap, ino) DBGdiFree(imap, ino)
static
void
*
DBGdiInit
(
struct
inomap
*
imap
);
static
void
DBGdiAlloc
(
struct
inomap
*
imap
,
ino_t
ino
);
static
void
DBGdiFree
(
struct
inomap
*
imap
,
ino_t
ino
);
#else
#define DBG_DIINIT(imap)
#define DBG_DIALLOC(imap, ino)
#define DBG_DIFREE(imap, ino)
#endif
/* _JFS_DEBUG_IMAP */
/*
* NAME: diMount()
*
...
...
@@ -188,8 +169,6 @@ int diMount(struct inode *ipimap)
imap
->
im_ipimap
=
ipimap
;
JFS_IP
(
ipimap
)
->
i_imap
=
imap
;
// DBG_DIINIT(imap);
return
(
0
);
}
...
...
@@ -1043,7 +1022,6 @@ int diFree(struct inode *ip)
/* update the bitmap.
*/
iagp
->
wmap
[
extno
]
=
cpu_to_le32
(
bitmap
);
DBG_DIFREE
(
imap
,
inum
);
/* update the free inode counts at the iag, ag and
* map level.
...
...
@@ -1231,7 +1209,6 @@ int diFree(struct inode *ip)
jfs_error
(
ip
->
i_sb
,
"diFree: the pmap does not show inode free"
);
}
iagp
->
wmap
[
extno
]
=
0
;
DBG_DIFREE
(
imap
,
inum
);
PXDlength
(
&
iagp
->
inoext
[
extno
],
0
);
PXDaddress
(
&
iagp
->
inoext
[
extno
],
0
);
...
...
@@ -1350,7 +1327,6 @@ diInitInode(struct inode *ip, int iagno, int ino, int extno, struct iag * iagp)
struct
jfs_inode_info
*
jfs_ip
=
JFS_IP
(
ip
);
ip
->
i_ino
=
(
iagno
<<
L2INOSPERIAG
)
+
ino
;
DBG_DIALLOC
(
JFS_IP
(
ipimap
)
->
i_imap
,
ip
->
i_ino
);
jfs_ip
->
ixpxd
=
iagp
->
inoext
[
extno
];
jfs_ip
->
agno
=
BLKTOAG
(
le64_to_cpu
(
iagp
->
agstart
),
sbi
);
jfs_ip
->
active_ag
=
-
1
;
...
...
@@ -3185,84 +3161,3 @@ static void copy_to_dinode(struct dinode * dip, struct inode *ip)
if
(
S_ISCHR
(
ip
->
i_mode
)
||
S_ISBLK
(
ip
->
i_mode
))
dip
->
di_rdev
=
cpu_to_le32
(
jfs_ip
->
dev
);
}
#ifdef _JFS_DEBUG_IMAP
/*
* DBGdiInit()
*/
static
void
*
DBGdiInit
(
struct
inomap
*
imap
)
{
u32
*
dimap
;
int
size
;
size
=
64
*
1024
;
if
((
dimap
=
(
u32
*
)
xmalloc
(
size
,
L2PSIZE
,
kernel_heap
))
==
NULL
)
assert
(
0
);
bzero
((
void
*
)
dimap
,
size
);
imap
->
im_DBGdimap
=
dimap
;
}
/*
* DBGdiAlloc()
*/
static
void
DBGdiAlloc
(
struct
inomap
*
imap
,
ino_t
ino
)
{
u32
*
dimap
=
imap
->
im_DBGdimap
;
int
w
,
b
;
u32
m
;
w
=
ino
>>
5
;
b
=
ino
&
31
;
m
=
0x80000000
>>
b
;
assert
(
w
<
64
*
256
);
if
(
dimap
[
w
]
&
m
)
{
printk
(
"DEBUG diAlloc: duplicate alloc ino:0x%x
\n
"
,
ino
);
}
dimap
[
w
]
|=
m
;
}
/*
* DBGdiFree()
*/
static
void
DBGdiFree
(
struct
inomap
*
imap
,
ino_t
ino
)
{
u32
*
dimap
=
imap
->
im_DBGdimap
;
int
w
,
b
;
u32
m
;
w
=
ino
>>
5
;
b
=
ino
&
31
;
m
=
0x80000000
>>
b
;
assert
(
w
<
64
*
256
);
if
((
dimap
[
w
]
&
m
)
==
0
)
{
printk
(
"DEBUG diFree: duplicate free ino:0x%x
\n
"
,
ino
);
}
dimap
[
w
]
&=
~
m
;
}
static
void
dump_cp
(
struct
inomap
*
ipimap
,
char
*
function
,
int
line
)
{
printk
(
"
\n
* ********* *
\n
Control Page %s %d
\n
"
,
function
,
line
);
printk
(
"FreeIAG %d
\t
NextIAG %d
\n
"
,
ipimap
->
im_freeiag
,
ipimap
->
im_nextiag
);
printk
(
"NumInos %d
\t
NumFree %d
\n
"
,
atomic_read
(
&
ipimap
->
im_numinos
),
atomic_read
(
&
ipimap
->
im_numfree
));
printk
(
"AG InoFree %d
\t
AG ExtFree %d
\n
"
,
ipimap
->
im_agctl
[
0
].
inofree
,
ipimap
->
im_agctl
[
0
].
extfree
);
printk
(
"AG NumInos %d
\t
AG NumFree %d
\n
"
,
ipimap
->
im_agctl
[
0
].
numinos
,
ipimap
->
im_agctl
[
0
].
numfree
);
}
static
void
dump_iag
(
struct
iag
*
iag
,
char
*
function
,
int
line
)
{
printk
(
"
\n
* ********* *
\n
IAG %s %d
\n
"
,
function
,
line
);
printk
(
"IagNum %d
\t
IAG Free %d
\n
"
,
le32_to_cpu
(
iag
->
iagnum
),
le32_to_cpu
(
iag
->
iagfree
));
printk
(
"InoFreeFwd %d
\t
InoFreeBack %d
\n
"
,
le32_to_cpu
(
iag
->
inofreefwd
),
le32_to_cpu
(
iag
->
inofreeback
));
printk
(
"ExtFreeFwd %d
\t
ExtFreeBack %d
\n
"
,
le32_to_cpu
(
iag
->
extfreefwd
),
le32_to_cpu
(
iag
->
extfreeback
));
printk
(
"NFreeInos %d
\t
NFreeExts %d
\n
"
,
le32_to_cpu
(
iag
->
nfreeinos
),
le32_to_cpu
(
iag
->
nfreeexts
));
}
#endif
/* _JFS_DEBUG_IMAP */
fs/jfs/jfs_unicode.c
View file @
c327ff62
...
...
@@ -51,8 +51,9 @@ int jfs_strfromUCS_le(char *to, const __le16 * from,
}
}
else
{
for
(
i
=
0
;
(
i
<
len
)
&&
from
[
i
];
i
++
)
{
if
(
le16_to_cpu
(
from
[
i
])
&
0xff00
)
{
if
(
warn
)
{
if
(
unlikely
(
le16_to_cpu
(
from
[
i
])
&
0xff00
))
{
to
[
i
]
=
'?'
;
if
(
unlikely
(
warn
))
{
warn
--
;
warn_again
--
;
printk
(
KERN_ERR
...
...
@@ -61,7 +62,7 @@ int jfs_strfromUCS_le(char *to, const __le16 * from,
printk
(
KERN_ERR
"mount with iocharset=utf8 to access
\n
"
);
}
to
[
i
]
=
'?'
;
}
else
to
[
i
]
=
(
char
)
(
le16_to_cpu
(
from
[
i
]));
...
...
fs/jfs/jfs_xtree.c
View file @
c327ff62
...
...
@@ -135,14 +135,6 @@ static int xtSearchNode(struct inode *ip,
static
int
xtRelink
(
tid_t
tid
,
struct
inode
*
ip
,
xtpage_t
*
fp
);
#endif
/* _STILL_TO_PORT */
/* External references */
/*
* debug control
*/
/* #define _JFS_DEBUG_XTREE 1 */
/*
* xtLookup()
*
...
...
@@ -4140,338 +4132,6 @@ s64 xtTruncate_pmap(tid_t tid, struct inode *ip, s64 committed_size)
return
0
;
}
#ifdef _JFS_DEBUG_XTREE
/*
* xtDisplayTree()
*
* function: traverse forward
*/
int
xtDisplayTree
(
struct
inode
*
ip
)
{
int
rc
=
0
;
struct
metapage
*
mp
;
xtpage_t
*
p
;
s64
bn
,
pbn
;
int
index
,
lastindex
,
v
,
h
;
xad_t
*
xad
;
struct
btstack
btstack
;
struct
btframe
*
btsp
;
struct
btframe
*
parent
;
printk
(
"display B+-tree.
\n
"
);
/* clear stack */
btsp
=
btstack
.
stack
;
/*
* start with root
*
* root resides in the inode
*/
bn
=
0
;
v
=
h
=
0
;
/*
* first access of each page:
*/
getPage:
XT_GETPAGE
(
ip
,
bn
,
mp
,
PSIZE
,
p
,
rc
);
if
(
rc
)
return
rc
;
/* process entries forward from first index */
index
=
XTENTRYSTART
;
lastindex
=
le16_to_cpu
(
p
->
header
.
nextindex
)
-
1
;
if
(
p
->
header
.
flag
&
BT_INTERNAL
)
{
/*
* first access of each internal page
*/
goto
getChild
;
}
else
{
/* (p->header.flag & BT_LEAF) */
/*
* first access of each leaf page
*/
printf
(
"leaf page "
);
xtDisplayPage
(
ip
,
bn
,
p
);
/* unpin the leaf page */
XT_PUTPAGE
(
mp
);
}
/*
* go back up to the parent page
*/
getParent:
/* pop/restore parent entry for the current child page */
if
((
parent
=
(
btsp
==
btstack
.
stack
?
NULL
:
--
btsp
))
==
NULL
)
/* current page must have been root */
return
;
/*
* parent page scan completed
*/
if
((
index
=
parent
->
index
)
==
(
lastindex
=
parent
->
lastindex
))
{
/* go back up to the parent page */
goto
getParent
;
}
/*
* parent page has entries remaining
*/
/* get back the parent page */
bn
=
parent
->
bn
;
/* v = parent->level; */
XT_GETPAGE
(
ip
,
bn
,
mp
,
PSIZE
,
p
,
rc
);
if
(
rc
)
return
rc
;
/* get next parent entry */
index
++
;
/*
* internal page: go down to child page of current entry
*/
getChild:
/* push/save current parent entry for the child page */
btsp
->
bn
=
pbn
=
bn
;
btsp
->
index
=
index
;
btsp
->
lastindex
=
lastindex
;
/* btsp->level = v; */
/* btsp->node = h; */
++
btsp
;
/* get child page */
xad
=
&
p
->
xad
[
index
];
bn
=
addressXAD
(
xad
);
/*
* first access of each internal entry:
*/
/* release parent page */
XT_PUTPAGE
(
mp
);
printk
(
"traverse down 0x%lx[%d]->0x%lx
\n
"
,
(
ulong
)
pbn
,
index
,
(
ulong
)
bn
);
v
++
;
h
=
index
;
/* process the child page */
goto
getPage
;
}
/*
* xtDisplayPage()
*
* function: display page
*/
int
xtDisplayPage
(
struct
inode
*
ip
,
s64
bn
,
xtpage_t
*
p
)
{
int
rc
=
0
;
xad_t
*
xad
;
s64
xaddr
,
xoff
;
int
xlen
,
i
,
j
;
/* display page control */
printf
(
"bn:0x%lx flag:0x%x nextindex:%d
\n
"
,
(
ulong
)
bn
,
p
->
header
.
flag
,
le16_to_cpu
(
p
->
header
.
nextindex
));
/* display entries */
xad
=
&
p
->
xad
[
XTENTRYSTART
];
for
(
i
=
XTENTRYSTART
,
j
=
1
;
i
<
le16_to_cpu
(
p
->
header
.
nextindex
);
i
++
,
xad
++
,
j
++
)
{
xoff
=
offsetXAD
(
xad
);
xaddr
=
addressXAD
(
xad
);
xlen
=
lengthXAD
(
xad
);
printf
(
"
\t
[%d] 0x%lx:0x%lx(0x%x)"
,
i
,
(
ulong
)
xoff
,
(
ulong
)
xaddr
,
xlen
);
if
(
j
==
4
)
{
printf
(
"
\n
"
);
j
=
0
;
}
}
printf
(
"
\n
"
);
}
#endif
/* _JFS_DEBUG_XTREE */
#ifdef _JFS_WIP
/*
* xtGather()
*
* function:
* traverse for allocation acquiring tlock at commit time
* (vs at the time of update) logging backward top down
*
* note:
* problem - establishing that all new allocation have been
* processed both for append and random write in sparse file
* at the current entry at the current subtree root page
*
*/
int
xtGather
(
btree_t
*
t
)
{
int
rc
=
0
;
xtpage_t
*
p
;
u64
bn
;
int
index
;
btentry_t
*
e
;
struct
btstack
btstack
;
struct
btsf
*
parent
;
/* clear stack */
BT_CLR
(
&
btstack
);
/*
* start with root
*
* root resides in the inode
*/
bn
=
0
;
XT_GETPAGE
(
ip
,
bn
,
mp
,
PSIZE
,
p
,
rc
);
if
(
rc
)
return
rc
;
/* new root is NOT pointed by a new entry
if (p->header.flag & NEW)
allocate new page lock;
write a NEWPAGE log;
*/
dopage:
/*
* first access of each page:
*/
/* process entries backward from last index */
index
=
le16_to_cpu
(
p
->
header
.
nextindex
)
-
1
;
if
(
p
->
header
.
flag
&
BT_LEAF
)
{
/*
* first access of each leaf page
*/
/* process leaf page entries backward */
for
(;
index
>=
XTENTRYSTART
;
index
--
)
{
e
=
&
p
->
xad
[
index
];
/*
* if newpage, log NEWPAGE.
*
if (e->flag & XAD_NEW) {
nfound =+ entry->length;
update current page lock for the entry;
newpage(entry);
*
* if moved, log move.
*
} else if (e->flag & XAD_MOVED) {
reset flag;
update current page lock for the entry;
}
*/
}
/* unpin the leaf page */
XT_PUTPAGE
(
mp
);
/*
* go back up to the parent page
*/
getParent:
/* restore parent entry for the current child page */
if
((
parent
=
BT_POP
(
&
btstack
))
==
NULL
)
/* current page must have been root */
return
0
;
if
((
index
=
parent
->
index
)
==
XTENTRYSTART
)
{
/*
* parent page scan completed
*/
/* go back up to the parent page */
goto
getParent
;
}
else
{
/*
* parent page has entries remaining
*/
/* get back the parent page */
bn
=
parent
->
bn
;
XT_GETPAGE
(
ip
,
bn
,
mp
,
PSIZE
,
p
,
rc
);
if
(
rc
)
return
-
EIO
;
/* first subroot page which
* covers all new allocated blocks
* itself not new/modified.
* (if modified from split of descendent,
* go down path of split page)
if (nfound == nnew &&
!(p->header.flag & (NEW | MOD)))
exit scan;
*/
/* process parent page entries backward */
index
--
;
}
}
else
{
/*
* first access of each internal page
*/
}
/*
* internal page: go down to child page of current entry
*/
/* save current parent entry for the child page */
BT_PUSH
(
&
btstack
,
bn
,
index
);
/* get current entry for the child page */
e
=
&
p
->
xad
[
index
];
/*
* first access of each internal entry:
*/
/*
* if new entry, log btree_tnewentry.
*
if (e->flag & XAD_NEW)
update parent page lock for the entry;
*/
/* release parent page */
XT_PUTPAGE
(
mp
);
/* get child page */
bn
=
e
->
bn
;
XT_GETPAGE
(
ip
,
bn
,
mp
,
PSIZE
,
p
,
rc
);
if
(
rc
)
return
rc
;
/*
* first access of each non-root page:
*/
/*
* if new, log btree_newpage.
*
if (p->header.flag & NEW)
allocate new page lock;
write a NEWPAGE log (next, prev);
*/
/* process the child page */
goto
dopage
;
out:
return
0
;
}
#endif
/* _JFS_WIP */
#ifdef CONFIG_JFS_STATISTICS
int
jfs_xtstat_read
(
char
*
buffer
,
char
**
start
,
off_t
offset
,
int
length
,
int
*
eof
,
void
*
data
)
...
...
fs/jfs/jfs_xtree.h
View file @
c327ff62
...
...
@@ -131,10 +131,4 @@ extern int xtRelocate(tid_t tid, struct inode *ip,
extern
int
xtAppend
(
tid_t
tid
,
struct
inode
*
ip
,
int
xflag
,
s64
xoff
,
int
maxblocks
,
int
*
xlenp
,
s64
*
xaddrp
,
int
flag
);
#ifdef _JFS_DEBUG_XTREE
extern
int
xtDisplayTree
(
struct
inode
*
ip
);
extern
int
xtDisplayPage
(
struct
inode
*
ip
,
s64
bn
,
xtpage_t
*
p
);
#endif
/* _JFS_DEBUG_XTREE */
#endif
/* !_H_JFS_XTREE */
fs/jfs/xattr.c
View file @
c327ff62
...
...
@@ -781,7 +781,7 @@ static int can_set_xattr(struct inode *inode, const char *name,
if
(
IS_RDONLY
(
inode
))
return
-
EROFS
;
if
(
IS_IMMUTABLE
(
inode
)
||
IS_APPEND
(
inode
)
||
S_ISLNK
(
inode
->
i_mode
)
)
if
(
IS_IMMUTABLE
(
inode
)
||
IS_APPEND
(
inode
))
return
-
EPERM
;
if
(
strncmp
(
name
,
XATTR_SYSTEM_PREFIX
,
XATTR_SYSTEM_PREFIX_LEN
)
==
0
)
...
...
@@ -790,12 +790,12 @@ static int can_set_xattr(struct inode *inode, const char *name,
*/
return
can_set_system_xattr
(
inode
,
name
,
value
,
value_len
);
if
(
strncmp
(
name
,
XATTR_TRUSTED_PREFIX
,
XATTR_TRUSTED_PREFIX_LEN
)
!
=
0
)
if
(
strncmp
(
name
,
XATTR_TRUSTED_PREFIX
,
XATTR_TRUSTED_PREFIX_LEN
)
=
=
0
)
return
(
capable
(
CAP_SYS_ADMIN
)
?
0
:
-
EPERM
);
#ifdef CONFIG_JFS_SECURITY
if
(
strncmp
(
name
,
XATTR_SECURITY_PREFIX
,
XATTR_SECURITY_PREFIX_LEN
)
!
=
0
)
=
=
0
)
return
0
;
/* Leave it to the security module */
#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