Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
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