On Mon, Apr 19, 2021 at 10:08:50AM -0700, Boris Burkov wrote:
> On Mon, Apr 19, 2021 at 09:05:49PM +0800, Su Yue wrote:
> > @@ -1158,6 +1158,16 @@ static int check_resize_args(const char *amount, 
> > const char *path) {
> >             }
> >             old_size = di_args[dev_idx].total_bytes;
> >  
> > +           /* For target sizes without '+'/'-' sign prefix(e.g. 1:150g) */
> > +           if (mod == 0) {
> > +                   new_size = diff;
> > +                   diff = max(old_size, new_size) - min(old_size, 
> > new_size);
> > +                   if (new_size > old_size)
> > +                           mod = 1;
> > +                   else if (new_size < old_size)
> > +                           mod = -1;
> > +           }
> > +
> >             if (mod < 0) {
> >                     if (diff > old_size) {
> >                             error("current size is %s which is smaller than 
> > %s",
> 
> This fix seems correct to me, but it feels a tiny bit over-complicated.
> Personally, I think it would be cleaner to do something like:
> 
> if (mod == 0) {
>       new_size = diff;
> } else if (mod < 0) {
>       // >0 check
>       new_size = old_size - diff
> } else {
>       // overflow check
>       new_size = old_size + diff
> }

Right, this looks much better and shares a lot of with the code that
follows the original fix.

Reply via email to