Messages in this thread | | | Date | Mon, 14 Jun 2010 11:18:15 -0400 | From | Christoph Hellwig <> | Subject | Re: [PATCH 1/5] fsfreeze: Prevent emergency thaw from looping infinitely |
| |
On Thu, Jun 10, 2010 at 05:19:50PM +1000, Dave Chinner wrote: > Return -EINVAL when the filesystem is already unfrozen to avoid this > problem.
This includes some additional changes in addition to the description, and at least one of them seems incorrect.
> - error = 0; > - if (--bdev->bd_fsfreeze_count > 0) > + if (!sb) > goto out; > > - if (!sb) > + error = 0; > + if (--bdev->bd_fsfreeze_count > 0) > goto out;
Here you reorder the sb check to be before the counter decrement. But we do support calling freeze_bdev on a device without a superblock, and you would leak bd_fsfreeze_count for that case and wrongly return -EINVAL on unthaw for these now.
> error = thaw_super(sb); > - if (error) { > + if (error) > bdev->bd_fsfreeze_count++; > - mutex_unlock(&bdev->bd_fsfreeze_mutex); > - return error; > - }
Ok, useful cleanup.
> out: > mutex_unlock(&bdev->bd_fsfreeze_mutex); > - return 0; > + return error;
And this is the actual fix of course, also looks good.
| |