[Tux3] Design note: Atomic filesystem changes
    Daniel Phillips 
    phillips at phunq.net
       
    Mon Jan  5 14:23:18 PST 2009
    
    
  
A gross typo I just noticed:
> void end_change(struct sb *sb, unsigned delta)
> {
> 	down_read(&sb->delta_lock);
> 	if (need_delta(sb)) {
> 		unsigned delta = atomic_read(&sb->delta);
> 		up_read(&sb->delta_lock);
> 		down_write(&sb->delta_lock);
> 		if (sb->delta == atomic_read(&delta)) {
> 			atomic_inc(&sb->delta);
> 			up_write(&sb->delta_lock);
> 			stage_delta(sb, delta);
> 			commit_delta(sb, delta);
> 		} else
> 			up_write(&sb->delta_lock);
> 	} else
> 		up_read(&sb->delta_lock);
> }
should be:
void end_change(struct sb *sb, unsigned delta)
{
        if (need_delta(sb)) {
                unsigned delta = atomic_read(&sb->delta);
                up_read(&sb->delta_lock);
                down_write(&sb->delta_lock);
                if (sb->delta == atomic_read(&delta)) {
                        atomic_inc(&sb->delta);
                        up_write(&sb->delta_lock);
                        stage_delta(sb, delta);
                        commit_delta(sb, delta);
                } else
                        up_write(&sb->delta_lock);
        } else
                up_read(&sb->delta_lock);
}
That is, the end_change already has the sb->delta read lock.
Regards,
Daniel
_______________________________________________
Tux3 mailing list
Tux3 at tux3.org
http://mailman.tux3.org/cgi-bin/mailman/listinfo/tux3
    
    
More information about the Tux3
mailing list