Messages in this thread | | | Date | Sun, 23 Feb 2020 20:03:11 +0100 | From | Domenico Andreoli <> | Subject | Re: Regression: hibernation is broken since e6bc9de714972cac34daa1dc1567ee48a47a9342 |
| |
On Fri, Feb 21, 2020 at 04:23:19PM -0800, Darrick J. Wong wrote: > > Ok, third try. Does the following work? This is a little more > selective in that it only disables the write protection on the swap > device/file that uswusp is going to write to.
Yes it works but also verified that once the S_SWAPFILE bit is cleared it's never restored, therefore the protecton is gone after the first hibernation.
> > --D > > diff --git a/kernel/power/user.c b/kernel/power/user.c > index 77438954cc2b..a3ae9cbbfcf0 100644 > --- a/kernel/power/user.c > +++ b/kernel/power/user.c > @@ -372,10 +372,17 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd, > */ > swdev = new_decode_dev(swap_area.dev); > if (swdev) { > + struct block_device *bd; > + > offset = swap_area.offset; > - data->swap = swap_type_of(swdev, offset, NULL); > + data->swap = swap_type_of(swdev, offset, &bd); > if (data->swap < 0) > error = -ENODEV; > + > + inode_lock(bd->bd_inode); > + bd->bd_inode->i_flags &= ~S_SWAPFILE; > + inode_unlock(bd->bd_inode); > + bdput(bd); > } else { > data->swap = -1; > error = -EINVAL;
-- rsa4096: 3B10 0CA1 8674 ACBA B4FE FCD2 CE5B CF17 9960 DE13 ed25519: FFB4 0CC3 7F2E 091D F7DA 356E CC79 2832 ED38 CB05
| |