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
957fb7ef
Commit
957fb7ef
authored
Jan 10, 2004
by
Nathan Scott
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[XFS] Fix a small pagebuf memory leak and keep track of slab pages ourselves.
SGI Modid: 2.5.x-xfs:slinx:163124a
parent
52f83275
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
16 additions
and
20 deletions
+16
-20
fs/xfs/pagebuf/page_buf.c
fs/xfs/pagebuf/page_buf.c
+10
-15
fs/xfs/pagebuf/page_buf.h
fs/xfs/pagebuf/page_buf.h
+6
-5
No files found.
fs/xfs/pagebuf/page_buf.c
View file @
957fb7ef
...
@@ -372,9 +372,6 @@ _pagebuf_freepages(
...
@@ -372,9 +372,6 @@ _pagebuf_freepages(
page_cache_release
(
page
);
page_cache_release
(
page
);
}
}
}
}
if
(
pb
->
pb_pages
!=
pb
->
pb_page_array
)
kfree
(
pb
->
pb_pages
);
}
}
/*
/*
...
@@ -413,20 +410,17 @@ _pagebuf_free_object(
...
@@ -413,20 +410,17 @@ _pagebuf_free_object(
if
(
pb
->
pb_flags
&
_PBF_MEM_ALLOCATED
)
{
if
(
pb
->
pb_flags
&
_PBF_MEM_ALLOCATED
)
{
if
(
pb
->
pb_pages
)
{
if
(
pb
->
pb_pages
)
{
/* release the pages in the address list */
/* release the pages in the address list */
if
(
pb
->
pb_pages
[
0
]
&&
if
((
pb
->
pb_pages
[
0
])
&&
PageSlab
(
pb
->
pb_pages
[
0
]))
{
(
pb
->
pb_flags
&
_PBF_MEM_SLAB
))
{
/*
* This came from the slab
* allocator free it as such
*/
kfree
(
pb
->
pb_addr
);
kfree
(
pb
->
pb_addr
);
}
else
{
}
else
{
_pagebuf_freepages
(
pb
);
_pagebuf_freepages
(
pb
);
}
}
if
(
pb
->
pb_pages
!=
pb
->
pb_page_array
)
kfree
(
pb
->
pb_pages
);
pb
->
pb_pages
=
NULL
;
pb
->
pb_pages
=
NULL
;
}
}
pb
->
pb_flags
&=
~
_PBF_MEM_ALLOCATED
;
pb
->
pb_flags
&=
~
(
_PBF_MEM_ALLOCATED
|
_PBF_MEM_SLAB
)
;
}
}
}
}
...
@@ -718,7 +712,8 @@ _pagebuf_find( /* find buffer for block */
...
@@ -718,7 +712,8 @@ _pagebuf_find( /* find buffer for block */
_PBF_LOCKABLE
|
\
_PBF_LOCKABLE
|
\
_PBF_ALL_PAGES_MAPPED
|
\
_PBF_ALL_PAGES_MAPPED
|
\
_PBF_ADDR_ALLOCATED
|
\
_PBF_ADDR_ALLOCATED
|
\
_PBF_MEM_ALLOCATED
;
_PBF_MEM_ALLOCATED
|
\
_PBF_MEM_SLAB
;
PB_TRACE
(
pb
,
"got_lock"
,
0
);
PB_TRACE
(
pb
,
"got_lock"
,
0
);
PB_STATS_INC
(
pb_get_locked
);
PB_STATS_INC
(
pb_get_locked
);
return
(
pb
);
return
(
pb
);
...
@@ -947,8 +942,8 @@ pagebuf_get_no_daddr(
...
@@ -947,8 +942,8 @@ pagebuf_get_no_daddr(
page_buf_t
*
pb
;
page_buf_t
*
pb
;
size_t
tlen
=
0
;
size_t
tlen
=
0
;
if
(
len
>
0x20000
)
if
(
unlikely
(
len
>
0x20000
)
)
return
(
NULL
)
;
return
NULL
;
pb
=
pagebuf_allocate
(
flags
);
pb
=
pagebuf_allocate
(
flags
);
if
(
!
pb
)
if
(
!
pb
)
...
@@ -975,7 +970,7 @@ pagebuf_get_no_daddr(
...
@@ -975,7 +970,7 @@ pagebuf_get_no_daddr(
return
NULL
;
return
NULL
;
}
}
/* otherwise pagebuf_free just ignores it */
/* otherwise pagebuf_free just ignores it */
pb
->
pb_flags
|=
_PBF_MEM_ALLOCATED
;
pb
->
pb_flags
|=
(
_PBF_MEM_ALLOCATED
|
_PBF_MEM_SLAB
)
;
PB_CLEAR_OWNER
(
pb
);
PB_CLEAR_OWNER
(
pb
);
up
(
&
pb
->
pb_sema
);
/* Return unlocked pagebuf */
up
(
&
pb
->
pb_sema
);
/* Return unlocked pagebuf */
...
...
fs/xfs/pagebuf/page_buf.h
View file @
957fb7ef
...
@@ -93,12 +93,13 @@ typedef enum page_buf_flags_e { /* pb_flags values */
...
@@ -93,12 +93,13 @@ typedef enum page_buf_flags_e { /* pb_flags values */
_PBF_PRIVATE_BH
=
(
1
<<
17
),
/* do not use public buffer heads */
_PBF_PRIVATE_BH
=
(
1
<<
17
),
/* do not use public buffer heads */
_PBF_ALL_PAGES_MAPPED
=
(
1
<<
18
),
/* all pages in range mapped */
_PBF_ALL_PAGES_MAPPED
=
(
1
<<
18
),
/* all pages in range mapped */
_PBF_ADDR_ALLOCATED
=
(
1
<<
19
),
/* pb_addr space was allocated */
_PBF_ADDR_ALLOCATED
=
(
1
<<
19
),
/* pb_addr space was allocated */
_PBF_MEM_ALLOCATED
=
(
1
<<
20
),
/* pb_mem+underlying pages alloc'd */
_PBF_MEM_ALLOCATED
=
(
1
<<
20
),
/* underlying pages are allocated */
_PBF_MEM_SLAB
=
(
1
<<
21
),
/* underlying pages are slab allocated */
PBF_FORCEIO
=
(
1
<<
2
1
),
PBF_FORCEIO
=
(
1
<<
2
2
),
/* ignore any cache state */
PBF_FLUSH
=
(
1
<<
2
2
),
/* flush disk write cache */
PBF_FLUSH
=
(
1
<<
2
3
),
/* flush disk write cache */
PBF_READ_AHEAD
=
(
1
<<
2
3
),
PBF_READ_AHEAD
=
(
1
<<
2
4
),
/* asynchronous read-ahead */
PBF_RUN_QUEUES
=
(
1
<<
2
4
),
/* run block device task queue */
PBF_RUN_QUEUES
=
(
1
<<
2
5
),
/* run block device task queue */
}
page_buf_flags_t
;
}
page_buf_flags_t
;
...
...
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