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
f2c870e3
Commit
f2c870e3
authored
Aug 18, 2009
by
Tao Ma
Committed by
Joel Becker
Sep 22, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ocfs2: Add ocfs2_read_refcount_block.
Signed-off-by:
Tao Ma
<
tao.ma@oracle.com
>
parent
93c97087
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
105 additions
and
0 deletions
+105
-0
fs/ocfs2/Makefile
fs/ocfs2/Makefile
+1
-0
fs/ocfs2/cluster/masklog.c
fs/ocfs2/cluster/masklog.c
+1
-0
fs/ocfs2/cluster/masklog.h
fs/ocfs2/cluster/masklog.h
+1
-0
fs/ocfs2/ocfs2.h
fs/ocfs2/ocfs2.h
+3
-0
fs/ocfs2/refcounttree.c
fs/ocfs2/refcounttree.c
+99
-0
No files found.
fs/ocfs2/Makefile
View file @
f2c870e3
...
...
@@ -28,6 +28,7 @@ ocfs2-objs := \
locks.o
\
mmap.o
\
namei.o
\
refcounttree.o
\
resize.o
\
slot_map.o
\
suballoc.o
\
...
...
fs/ocfs2/cluster/masklog.c
View file @
f2c870e3
...
...
@@ -111,6 +111,7 @@ static struct mlog_attribute mlog_attrs[MLOG_MAX_BITS] = {
define_mask
(
EXPORT
),
define_mask
(
XATTR
),
define_mask
(
QUOTA
),
define_mask
(
REFCOUNT
),
define_mask
(
ERROR
),
define_mask
(
NOTICE
),
define_mask
(
KTHREAD
),
...
...
fs/ocfs2/cluster/masklog.h
View file @
f2c870e3
...
...
@@ -113,6 +113,7 @@
#define ML_EXPORT 0x0000000010000000ULL
/* ocfs2 export operations */
#define ML_XATTR 0x0000000020000000ULL
/* ocfs2 extended attributes */
#define ML_QUOTA 0x0000000040000000ULL
/* ocfs2 quota operations */
#define ML_REFCOUNT 0x0000000080000000ULL
/* refcount tree operations */
/* bits that are infrequently given and frequently matched in the high word */
#define ML_ERROR 0x0000000100000000ULL
/* sent to KERN_ERR */
#define ML_NOTICE 0x0000000200000000ULL
/* setn to KERN_NOTICE */
...
...
fs/ocfs2/ocfs2.h
View file @
f2c870e3
...
...
@@ -610,6 +610,9 @@ static inline int ocfs2_uses_extended_slot_map(struct ocfs2_super *osb)
#define OCFS2_IS_VALID_DX_LEAF(ptr) \
(!strcmp((ptr)->dl_signature, OCFS2_DX_LEAF_SIGNATURE))
#define OCFS2_IS_VALID_REFCOUNT_BLOCK(ptr) \
(!strcmp((ptr)->rf_signature, OCFS2_REFCOUNT_BLOCK_SIGNATURE))
static
inline
unsigned
long
ino_from_blkno
(
struct
super_block
*
sb
,
u64
blkno
)
{
...
...
fs/ocfs2/refcounttree.c
0 → 100644
View file @
f2c870e3
/* -*- mode: c; c-basic-offset: 8; -*-
* vim: noexpandtab sw=8 ts=8 sts=0:
*
* refcounttree.c
*
* Copyright (C) 2009 Oracle. All rights reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/
#define MLOG_MASK_PREFIX ML_REFCOUNT
#include <cluster/masklog.h>
#include "ocfs2.h"
#include "inode.h"
#include "alloc.h"
#include "suballoc.h"
#include "journal.h"
#include "uptodate.h"
#include "super.h"
#include "buffer_head_io.h"
#include "blockcheck.h"
static
int
ocfs2_validate_refcount_block
(
struct
super_block
*
sb
,
struct
buffer_head
*
bh
)
{
int
rc
;
struct
ocfs2_refcount_block
*
rb
=
(
struct
ocfs2_refcount_block
*
)
bh
->
b_data
;
mlog
(
0
,
"Validating refcount block %llu
\n
"
,
(
unsigned
long
long
)
bh
->
b_blocknr
);
BUG_ON
(
!
buffer_uptodate
(
bh
));
/*
* If the ecc fails, we return the error but otherwise
* leave the filesystem running. We know any error is
* local to this block.
*/
rc
=
ocfs2_validate_meta_ecc
(
sb
,
bh
->
b_data
,
&
rb
->
rf_check
);
if
(
rc
)
{
mlog
(
ML_ERROR
,
"Checksum failed for refcount block %llu
\n
"
,
(
unsigned
long
long
)
bh
->
b_blocknr
);
return
rc
;
}
if
(
!
OCFS2_IS_VALID_REFCOUNT_BLOCK
(
rb
))
{
ocfs2_error
(
sb
,
"Refcount block #%llu has bad signature %.*s"
,
(
unsigned
long
long
)
bh
->
b_blocknr
,
7
,
rb
->
rf_signature
);
return
-
EINVAL
;
}
if
(
le64_to_cpu
(
rb
->
rf_blkno
)
!=
bh
->
b_blocknr
)
{
ocfs2_error
(
sb
,
"Refcount block #%llu has an invalid rf_blkno "
"of %llu"
,
(
unsigned
long
long
)
bh
->
b_blocknr
,
(
unsigned
long
long
)
le64_to_cpu
(
rb
->
rf_blkno
));
return
-
EINVAL
;
}
if
(
le32_to_cpu
(
rb
->
rf_fs_generation
)
!=
OCFS2_SB
(
sb
)
->
fs_generation
)
{
ocfs2_error
(
sb
,
"Refcount block #%llu has an invalid "
"rf_fs_generation of #%u"
,
(
unsigned
long
long
)
bh
->
b_blocknr
,
le32_to_cpu
(
rb
->
rf_fs_generation
));
return
-
EINVAL
;
}
return
0
;
}
static
int
ocfs2_read_refcount_block
(
struct
ocfs2_caching_info
*
ci
,
u64
rb_blkno
,
struct
buffer_head
**
bh
)
{
int
rc
;
struct
buffer_head
*
tmp
=
*
bh
;
rc
=
ocfs2_read_block
(
ci
,
rb_blkno
,
&
tmp
,
ocfs2_validate_refcount_block
);
/* If ocfs2_read_block() got us a new bh, pass it up. */
if
(
!
rc
&&
!*
bh
)
*
bh
=
tmp
;
return
rc
;
}
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