[Ocfs2-tools-devel] [PATCH 3/4] Ocfs2-tools: Fix bug for fswreck to handle corruption of inlined directory correctly.
    Joel Becker 
    Joel.Becker at oracle.com
       
    Thu Jun 25 12:04:56 PDT 2009
    
    
  
On Wed, Jun 24, 2009 at 06:44:14PM +0800, Tristan Ye wrote:
> There is a known issue that inline-data didn't work correctly in fswreck's
> directory codes somehow, where it tries to add dirents to dirblocks even for
> inlined dirs. Therefore, corruptions using add_ent_to_dir() should really use
> ocfs2_link() instead to cover the inlined dirs, as well, the corruptions which
> directly modify dirents also have to consider inlined case(it should be doable
> with ocfs2_dir_iterate()).
> 
> Signed-off-by: Tristan Ye <tristan.ye at oracle.com>
	This looks quite good.  One comment.
> +	if (dcs->oldname && ((dirent->name_len & 0xFF) != dcs->namelen))
> +		return 0;
> +	if (dcs->oldname && strncmp(dcs->oldname, dirent->name,
> +				    dirent->name_len & 0xFF))
> +		return 0;
	I'd create a helper at the top of the file:
static int corrupt_match_dirent(struct dirent_corrupt_struct *dcs,
				struct ocfs2_dir_entry *dirnet)
{
	if (!dcs->oldname)
		return 1;
	if (((dirent->name_len & 0xFF) != dcs->namelen))
		return 0;
	if (strncmp(dcs->oldname, dirent->name, dirent->name_len & 0xFF))
		return 0;
	return 1;
}
	This way you don't have to repeat the comparisons (with the
magic 0xFF) in every function.
Joel
-- 
"We will have to repent in this generation not merely for the
 vitriolic words and actions of the bad people, but for the 
 appalling silence of the good people."
	- Rev. Dr. Martin Luther King, Jr.
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
    
    
More information about the Ocfs2-tools-devel
mailing list