On 1.04.19 г. 21:26 ч., David Sterba wrote: > On Wed, Mar 27, 2019 at 02:24:06PM +0200, Nikolay Borisov wrote: >> During device shrink pinned/pending chunks (i.e those which have been >> deleted/created respectively, in the current transaction and haven't >> touched disk) need to be accounted when doing device shrink. Presently >> this happens after the main relocation loop in btrfs_shrink_device, >> which could lead to making another go in the body of the function. >> >> Since there is no hard requirement to perform pinned/pending chunks >> handling after the relocation loop, move the code before it. This leads >> to simplifying the code flow around - i.e no need to use 'goto again'. > > On the other hand this starts 2 transactions unconditionally, previously > it was 1 for the final change and 1 if there were pending chunks. This > should be mentioned or explained why this is needed, otherwise the code > looks equivalent to the original version. In this case some guidance in > the changelog could shorten the time to understand the change, I've been > starting at it for half an hour. > Valid point, how about adding the following sentence at the end of the changelog : A notable side effect of this change is that modification of the device's size requires a transaction to be started and committed before the relocation loop starts. This is necessary to ensure that relocation process sees the shrunk device size.
