On (07/07/14 16:57), Greg Kroah-Hartman wrote: > Date: Mon, 7 Jul 2014 16:57:35 -0700 > From: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > To: linux-kernel@xxxxxxxxxxxxxxx > Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>, > stable@xxxxxxxxxxxxxxx, Minchan Kim <minchan@xxxxxxxxxx>, "Alexander E. > Patrakov" <patrakov@xxxxxxxxx>, Sergey Senozhatsky > <sergey.senozhatsky@xxxxxxxxx>, Nitin Gupta <ngupta@xxxxxxxxxx>, Jerome > Marchand <jmarchan@xxxxxxxxxx>, Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, > Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Subject: [PATCH 3.15 093/122] zram: revalidate disk after capacity change > X-Mailer: git-send-email 2.0.0.254.g50f84e3 > User-Agent: quilt/0.63-1 > > 3.15-stable review patch. If anyone has any objections, please let me know. > > ------------------ > > From: Minchan Kim <minchan@xxxxxxxxxx> > > commit 2e32baea46ce542c561a519414c840295b229c8f upstream. > > Alexander reported mkswap on /dev/zram0 is failed if other process is > opening the block device file. > > Step is as follows, > > 0. Reset the unused zram device. > 1. Use a program that opens /dev/zram0 with O_RDWR and sleeps > until killed. > 2. While that program sleeps, echo the correct value to > /sys/block/zram0/disksize. > 3. Verify (e.g. in /proc/partitions) that the disk size is applied > correctly. It is. > 4. While that program still sleeps, attempt to mkswap /dev/zram0. > This fails: mkswap: error: swap area needs to be at least 40 KiB > > When I investigated, the size get by ioctl(fd, BLKGETSIZE64, xxx) on > mkswap to get a size of blockdev was zero although zram0 has right size by > 2. > > The reason is zram didn't revalidate disk after changing capacity so that > size of blockdev's inode is not uptodate until all of file is close. > > This patch should fix the BUG. > > Signed-off-by: Minchan Kim <minchan@xxxxxxxxxx> > Reported-by: Alexander E. Patrakov <patrakov@xxxxxxxxx> > Tested-by: Alexander E. Patrakov <patrakov@xxxxxxxxx> > Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx> > Cc: Nitin Gupta <ngupta@xxxxxxxxxx> > Acked-by: Jerome Marchand <jmarchan@xxxxxxxxxx> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> Hello, this patch is known to cause problems. please see https://lkml.org/lkml/2014/7/3/885 -ss > --- > drivers/block/zram/zram_drv.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > --- a/drivers/block/zram/zram_drv.c > +++ b/drivers/block/zram/zram_drv.c > @@ -622,8 +622,10 @@ static void zram_reset_device(struct zra > memset(&zram->stats, 0, sizeof(zram->stats)); > > zram->disksize = 0; > - if (reset_capacity) > + if (reset_capacity) { > set_capacity(zram->disk, 0); > + revalidate_disk(zram->disk); > + } > up_write(&zram->init_lock); > } > > @@ -664,6 +666,7 @@ static ssize_t disksize_store(struct dev > zram->comp = comp; > zram->disksize = disksize; > set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT); > + revalidate_disk(zram->disk); > up_write(&zram->init_lock); > return len; > > > -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html