lkml.org 
[lkml]   [2020]   [Feb]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: 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

\
 
 \ /
  Last update: 2020-02-23 20:04    [W:0.117 / U:1.384 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site