Skip to content

Commit

Permalink
ocfs2: Access and dirty the buffer_head in mark_written.
Browse files Browse the repository at this point in the history
In __ocfs2_mark_extent_written, when we meet with the situation
of c_split_covers_rec, the old solution just replace the extent
record and forget to access and dirty the buffer_head. This will
cause a problem when the unwritten extent is in an extent block.
So access and dirty it.

Signed-off-by: Tao Ma <tao.ma@oracle.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
  • Loading branch information
Tao Ma authored and Mark Fasheh committed Feb 26, 2009
1 parent 64e7130 commit 47be12e
Showing 1 changed file with 26 additions and 1 deletion.
27 changes: 26 additions & 1 deletion fs/ocfs2/alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -4796,6 +4796,29 @@ static int ocfs2_split_and_insert(struct inode *inode,
return ret;
}

static int ocfs2_replace_extent_rec(struct inode *inode,
handle_t *handle,
struct ocfs2_path *path,
struct ocfs2_extent_list *el,
int split_index,
struct ocfs2_extent_rec *split_rec)
{
int ret;

ret = ocfs2_path_bh_journal_access(handle, inode, path,
path_num_items(path) - 1);
if (ret) {
mlog_errno(ret);
goto out;
}

el->l_recs[split_index] = *split_rec;

ocfs2_journal_dirty(handle, path_leaf_bh(path));
out:
return ret;
}

/*
* Mark part or all of the extent record at split_index in the leaf
* pointed to by path as written. This removes the unwritten
Expand Down Expand Up @@ -4885,7 +4908,9 @@ static int __ocfs2_mark_extent_written(struct inode *inode,

if (ctxt.c_contig_type == CONTIG_NONE) {
if (ctxt.c_split_covers_rec)
el->l_recs[split_index] = *split_rec;
ret = ocfs2_replace_extent_rec(inode, handle,
path, el,
split_index, split_rec);
else
ret = ocfs2_split_and_insert(inode, handle, path, et,
&last_eb_bh, split_index,
Expand Down

0 comments on commit 47be12e

Please sign in to comment.