[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200223190311.GA26811@dumbo>
Date: Sun, 23 Feb 2020 20:03:11 +0100
From: Domenico Andreoli <domenico.andreoli@...ux.com>
To: "Darrick J. Wong" <darrick.wong@...cle.com>
Cc: Christoph Hellwig <hch@....de>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
linux-pm@...r.kernel.org
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
Powered by blists - more mailing lists