nvdimm.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
@ 2017-07-25 21:37 Kani, Toshimitsu
  2017-07-25 22:22 ` Ross Zwisler
  0 siblings, 1 reply; 13+ messages in thread
From: Kani, Toshimitsu @ 2017-07-25 21:37 UTC (permalink / raw)
  To: linux-nvdimm, hirofumi, linux-fsdevel

Hi,

Copying files to vfat FS on an NVDIMM device hits
BUG_ON(!PageLocked(page)) in try_to_free_buffers().  It happens on
4.13-rc1, and happens on older kernels as well.

A simple reproducer is shown below.  It is 100% reproducible on my
setup (8GB of regular memory and 16GB of NVDIMM).  It usually hits in
the 3rd or 4th file copy and does not repeat with the while-loop. 
Interestingly, it hits only when an NVDIMM device is set as raw or
memory mode.  It does not hit with sector mode.
 
==
DEV=pmem0
set -x
mkfs.vfat /dev/$DEV
mount /dev/$DEV /mnt/$DEV
dd if=/dev/zero of=/mnt/$DEV/1Gfile bs=1M count=1024
while true; do
cp /mnt/$DEV/1Gfile /mnt/$DEV/file-1
cp /mnt/$DEV/1Gfile /mnt/$DEV/file-2
cp /mnt/$DEV/1Gfile /mnt/$DEV/file-3
cp /mnt/$DEV/1Gfile /mnt/$DEV/file-4
cp /mnt/$DEV/1Gfile /mnt/$DEV/file-5
cp /mnt/$DEV/1Gfile /mnt/$DEV/file-6
cp /mnt/$DEV/1Gfile /mnt/$DEV/file-7
cp /mnt/$DEV/1Gfile /mnt/$DEV/file-8
cp /mnt/$DEV/1Gfile /mnt/$DEV/file-9
cp /mnt/$DEV/1Gfile /mnt/$DEV/file-10
done
==

 kernel BUG at fs/buffer.c:3305!
 invalid opcode: 0000 [#1] SMP
  :
 Workqueue: writeback wb_workfn (flush-259:0)
 task: ffff8d02595b8000 task.stack: ffffa22242400000
 RIP: 0010:try_to_free_buffers+0xd2/0xe0
 RSP: 0018:ffffa22242403830 EFLAGS: 00010246
 RAX: 00afffc000001028 RBX: 0000000000000008 RCX: ffff8d012dcf19c0
 RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffc468e3b52b80
 RBP: ffffa22242403858 R08: 0000000000000000 R09: 000000000002067c
 R10: ffff8d027ffe6000 R11: 0000000000000000 R12: 0000000000000000
 R13: ffff8d022fccdbe0 R14: ffffc468e3b52b80 R15: ffffa22242403ad0
 FS:  0000000000000000(0000) GS:ffff8d027fd40000(0000)
knlGS:0000000000000000
 CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
 CR2: 00007f9d2bb80b70 CR3: 000000084fe09000 CR4: 00000000007406e0
 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
 PKRU: 55555554
 Call Trace:
  clean_buffers+0x5d/0x70
  __mpage_writepage+0x567/0x760
  ? page_mkclean+0x6a/0xb0
  write_cache_pages+0x205/0x580
  ? clean_buffers+0x70/0x70
  ? fat_add_cluster+0x80/0x80 [fat]
  mpage_writepages+0x7c/0x100
  ? fat_add_cluster+0x80/0x80 [fat]
  ? __set_page_dirty+0x9b/0xc0
  ? fprop_fraction_percpu+0x2f/0x80
  fat_writepages+0x15/0x20 [fat]
  ? fat_writepages+0x15/0x20 [fat]
  do_writepages+0x25/0x80
  __writeback_single_inode+0x45/0x350
  writeback_sb_inodes+0x25e/0x610
  __writeback_inodes_wb+0x92/0xc0
  wb_writeback+0x29b/0x340
  wb_workfn+0x195/0x3d0
  ? wb_workfn+0x195/0x3d0
  process_one_work+0x193/0x3d0
  worker_thread+0x4e/0x3d0
  kthread+0x114/0x150
  ? process_one_work+0x3d0/0x3d0
  ? kthread_park+0x60/0x60
  ? kthread_park+0x60/0x60
  ret_from_fork+0x25/0x30
  :
 RIP: try_to_free_buffers+0xd2/0xe0 RSP: ffffa22242403830


Thanks,
-Toshi
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
  2017-07-25 21:37 FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305! Kani, Toshimitsu
@ 2017-07-25 22:22 ` Ross Zwisler
  2017-07-25 22:27   ` Kani, Toshimitsu
  2017-07-26  8:21   ` Johannes Thumshirn
  0 siblings, 2 replies; 13+ messages in thread
From: Ross Zwisler @ 2017-07-25 22:22 UTC (permalink / raw)
  To: Kani, Toshimitsu; +Cc: linux-fsdevel, hirofumi, linux-nvdimm

On Tue, Jul 25, 2017 at 09:37:38PM +0000, Kani, Toshimitsu wrote:
> Hi,
> 
> Copying files to vfat FS on an NVDIMM device hits
> BUG_ON(!PageLocked(page)) in try_to_free_buffers().  It happens on
> 4.13-rc1, and happens on older kernels as well.
> 
> A simple reproducer is shown below.  It is 100% reproducible on my
> setup (8GB of regular memory and 16GB of NVDIMM).  It usually hits in
> the 3rd or 4th file copy and does not repeat with the while-loop. 
> Interestingly, it hits only when an NVDIMM device is set as raw or
> memory mode.  It does not hit with sector mode.

Interesting, thanks for the report..  I was able to reproduce this in my KVM
setup with a virtualized NVDIMM using v4.12.  I also tried reproducing it with
BRD, and wasn't able.

I'll take a look.
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
  2017-07-25 22:22 ` Ross Zwisler
@ 2017-07-25 22:27   ` Kani, Toshimitsu
  2017-07-26  8:21   ` Johannes Thumshirn
  1 sibling, 0 replies; 13+ messages in thread
From: Kani, Toshimitsu @ 2017-07-25 22:27 UTC (permalink / raw)
  To: ross.zwisler; +Cc: linux-fsdevel, hirofumi, linux-nvdimm

On Tue, 2017-07-25 at 16:22 -0600, Ross Zwisler wrote:
> On Tue, Jul 25, 2017 at 09:37:38PM +0000, Kani, Toshimitsu wrote:
> > Hi,
> > 
> > Copying files to vfat FS on an NVDIMM device hits
> > BUG_ON(!PageLocked(page)) in try_to_free_buffers().  It happens on
> > 4.13-rc1, and happens on older kernels as well.
> > 
> > A simple reproducer is shown below.  It is 100% reproducible on my
> > setup (8GB of regular memory and 16GB of NVDIMM).  It usually hits
> > in the 3rd or 4th file copy and does not repeat with the while-
> > loop.  Interestingly, it hits only when an NVDIMM device is set as
> > raw or memory mode.  It does not hit with sector mode.
> 
> Interesting, thanks for the report..  I was able to reproduce this in
> my KVM setup with a virtualized NVDIMM using v4.12.  I also tried
> reproducing it with BRD, and wasn't able.
> 
> I'll take a look.

Great!! Thanks Ross!
-Toshi

_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
  2017-07-25 22:22 ` Ross Zwisler
  2017-07-25 22:27   ` Kani, Toshimitsu
@ 2017-07-26  8:21   ` Johannes Thumshirn
  2017-07-26  9:23     ` OGAWA Hirofumi
  1 sibling, 1 reply; 13+ messages in thread
From: Johannes Thumshirn @ 2017-07-26  8:21 UTC (permalink / raw)
  To: Ross Zwisler, Kani, Toshimitsu, linux-nvdimm, hirofumi, linux-fsdevel

On Tue, Jul 25, 2017 at 04:22:47PM -0600, Ross Zwisler wrote:
> Interesting, thanks for the report..  I was able to reproduce this in my KVM
> setup with a virtualized NVDIMM using v4.12.  I also tried reproducing it with
> BRD, and wasn't able.
> 
> I'll take a look.

Hi Ross and Toshi,

can you please keep me on Cc for the thread and possible patches? I'd be
willing to play test monkey as well.

Byte,
	Johannes
-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
  2017-07-26  8:21   ` Johannes Thumshirn
@ 2017-07-26  9:23     ` OGAWA Hirofumi
  2017-07-26 14:23       ` Ross Zwisler
  2017-07-26 17:11       ` Matthew Wilcox
  0 siblings, 2 replies; 13+ messages in thread
From: OGAWA Hirofumi @ 2017-07-26  9:23 UTC (permalink / raw)
  To: Johannes Thumshirn; +Cc: linux-fsdevel, linux-nvdimm

"Kani, Toshimitsu" <toshi.kani@hpe.com> writes:

>  kernel BUG at fs/buffer.c:3305!
>  invalid opcode: 0000 [#1] SMP
>   :
>  Workqueue: writeback wb_workfn (flush-259:0)
>  task: ffff8d02595b8000 task.stack: ffffa22242400000
>  RIP: 0010:try_to_free_buffers+0xd2/0xe0
>  RSP: 0018:ffffa22242403830 EFLAGS: 00010246
>  RAX: 00afffc000001028 RBX: 0000000000000008 RCX: ffff8d012dcf19c0
>  RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffc468e3b52b80
>  RBP: ffffa22242403858 R08: 0000000000000000 R09: 000000000002067c
>  R10: ffff8d027ffe6000 R11: 0000000000000000 R12: 0000000000000000
>  R13: ffff8d022fccdbe0 R14: ffffc468e3b52b80 R15: ffffa22242403ad0
>  FS:  0000000000000000(0000) GS:ffff8d027fd40000(0000)

The locking of this path seems to be broken. The guy familiar to
bdev_write_page() path will made real fix though, The following patch
should be explaining enough what is wrong.

In short, clean_buffers() must be called before unlocking lock_page().

Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
---

 fs/block_dev.c |    2 --
 fs/mpage.c     |    1 +
 mm/page_io.c   |    1 +
 3 files changed, 2 insertions(+), 2 deletions(-)

diff -puN fs/mpage.c~bdev_write_page-fix fs/mpage.c
--- linux/fs/mpage.c~bdev_write_page-fix	2017-07-26 18:05:53.078204737 +0900
+++ linux-hirofumi/fs/mpage.c	2017-07-26 18:07:03.960043665 +0900
@@ -605,6 +605,7 @@ alloc_new:
 			if (!bdev_write_page(bdev, blocks[0] << (blkbits - 9),
 								page, wbc)) {
 				clean_buffers(page, first_unmapped);
+				unlock_page(page);
 				goto out;
 			}
 		}
diff -puN mm/page_io.c~bdev_write_page-fix mm/page_io.c
--- linux/mm/page_io.c~bdev_write_page-fix	2017-07-26 18:06:16.807150810 +0900
+++ linux-hirofumi/mm/page_io.c	2017-07-26 18:06:23.425135771 +0900
@@ -308,6 +308,7 @@ int __swap_writepage(struct page *page,
 
 	ret = bdev_write_page(sis->bdev, swap_page_sector(page), page, wbc);
 	if (!ret) {
+		unlock_page(page);
 		count_vm_event(PSWPOUT);
 		return 0;
 	}
diff -puN fs/block_dev.c~bdev_write_page-fix fs/block_dev.c
--- linux/fs/block_dev.c~bdev_write_page-fix	2017-07-26 18:08:53.490794861 +0900
+++ linux-hirofumi/fs/block_dev.c	2017-07-26 18:08:58.375783767 +0900
@@ -714,8 +714,6 @@ int bdev_write_page(struct block_device
 	result = ops->rw_page(bdev, sector + get_start_sect(bdev), page, true);
 	if (result)
 		end_page_writeback(page);
-	else
-		unlock_page(page);
 	blk_queue_exit(bdev->bd_queue);
 	return result;
 }
_
-- 
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
  2017-07-26  9:23     ` OGAWA Hirofumi
@ 2017-07-26 14:23       ` Ross Zwisler
  2017-07-26 16:08         ` Dan Williams
  2017-07-26 17:11       ` Matthew Wilcox
  1 sibling, 1 reply; 13+ messages in thread
From: Ross Zwisler @ 2017-07-26 14:23 UTC (permalink / raw)
  To: OGAWA Hirofumi; +Cc: linux-fsdevel, linux-nvdimm

On Wed, Jul 26, 2017 at 06:23:08PM +0900, OGAWA Hirofumi wrote:
> "Kani, Toshimitsu" <toshi.kani@hpe.com> writes:
> 
> >  kernel BUG at fs/buffer.c:3305!
> >  invalid opcode: 0000 [#1] SMP
> >   :
> >  Workqueue: writeback wb_workfn (flush-259:0)
> >  task: ffff8d02595b8000 task.stack: ffffa22242400000
> >  RIP: 0010:try_to_free_buffers+0xd2/0xe0
> >  RSP: 0018:ffffa22242403830 EFLAGS: 00010246
> >  RAX: 00afffc000001028 RBX: 0000000000000008 RCX: ffff8d012dcf19c0
> >  RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffc468e3b52b80
> >  RBP: ffffa22242403858 R08: 0000000000000000 R09: 000000000002067c
> >  R10: ffff8d027ffe6000 R11: 0000000000000000 R12: 0000000000000000
> >  R13: ffff8d022fccdbe0 R14: ffffc468e3b52b80 R15: ffffa22242403ad0
> >  FS:  0000000000000000(0000) GS:ffff8d027fd40000(0000)
> 
> The locking of this path seems to be broken. The guy familiar to
> bdev_write_page() path will made real fix though, The following patch
> should be explaining enough what is wrong.

Is there someone in particular who is familiar with bdev_write_page() that is
working on this fix, or does someone need to pick this up?
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
  2017-07-26 14:23       ` Ross Zwisler
@ 2017-07-26 16:08         ` Dan Williams
  2017-07-26 17:03           ` Christoph Hellwig
  0 siblings, 1 reply; 13+ messages in thread
From: Dan Williams @ 2017-07-26 16:08 UTC (permalink / raw)
  To: Ross Zwisler, OGAWA Hirofumi, Johannes Thumshirn, Kani,
	Toshimitsu, linux-nvdimm, linux-fsdevel

On Wed, Jul 26, 2017 at 7:23 AM, Ross Zwisler
<ross.zwisler@linux.intel.com> wrote:
> On Wed, Jul 26, 2017 at 06:23:08PM +0900, OGAWA Hirofumi wrote:
>> "Kani, Toshimitsu" <toshi.kani@hpe.com> writes:
>>
>> >  kernel BUG at fs/buffer.c:3305!
>> >  invalid opcode: 0000 [#1] SMP
>> >   :
>> >  Workqueue: writeback wb_workfn (flush-259:0)
>> >  task: ffff8d02595b8000 task.stack: ffffa22242400000
>> >  RIP: 0010:try_to_free_buffers+0xd2/0xe0
>> >  RSP: 0018:ffffa22242403830 EFLAGS: 00010246
>> >  RAX: 00afffc000001028 RBX: 0000000000000008 RCX: ffff8d012dcf19c0
>> >  RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffc468e3b52b80
>> >  RBP: ffffa22242403858 R08: 0000000000000000 R09: 000000000002067c
>> >  R10: ffff8d027ffe6000 R11: 0000000000000000 R12: 0000000000000000
>> >  R13: ffff8d022fccdbe0 R14: ffffc468e3b52b80 R15: ffffa22242403ad0
>> >  FS:  0000000000000000(0000) GS:ffff8d027fd40000(0000)
>>
>> The locking of this path seems to be broken. The guy familiar to
>> bdev_write_page() path will made real fix though, The following patch
>> should be explaining enough what is wrong.
>
> Is there someone in particular who is familiar with bdev_write_page() that is
> working on this fix, or does someone need to pick this up?

Another question, does ->rw_page() really buy us that much with the
pmem driver? If applications want to enjoy the lowest latency access
they can just use DAX. There's now only 4 drivers that use rw_page
since nvme dropped its usage and I'd be inclined to just rip it out.
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
  2017-07-26 16:08         ` Dan Williams
@ 2017-07-26 17:03           ` Christoph Hellwig
  0 siblings, 0 replies; 13+ messages in thread
From: Christoph Hellwig @ 2017-07-26 17:03 UTC (permalink / raw)
  To: Dan Williams; +Cc: linux-nvdimm, linux-fsdevel, OGAWA Hirofumi

On Wed, Jul 26, 2017 at 09:08:00AM -0700, Dan Williams wrote:
> Another question, does ->rw_page() really buy us that much with the
> pmem driver? If applications want to enjoy the lowest latency access
> they can just use DAX. There's now only 4 drivers that use rw_page
> since nvme dropped its usage and I'd be inclined to just rip it out.

nvme never supported rw_page (there was a page for it, but it
fortunately never got merged).

rw_page are massive pain the ass and the method should go away.
For make_request drivers that actually operate synchronous (e.g.
the ramdisk) it's not much of a benefit, and even for normally
asynchronous drivers like nvme the block layer polling interface
is much more suitable.
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
  2017-07-26  9:23     ` OGAWA Hirofumi
  2017-07-26 14:23       ` Ross Zwisler
@ 2017-07-26 17:11       ` Matthew Wilcox
  2017-07-27 16:12         ` Kani, Toshimitsu
  1 sibling, 1 reply; 13+ messages in thread
From: Matthew Wilcox @ 2017-07-26 17:11 UTC (permalink / raw)
  To: OGAWA Hirofumi; +Cc: linux-fsdevel, linux-nvdimm

On Wed, Jul 26, 2017 at 06:23:08PM +0900, OGAWA Hirofumi wrote:
> The locking of this path seems to be broken. The guy familiar to
> bdev_write_page() path will made real fix though, The following patch
> should be explaining enough what is wrong.
> 
> In short, clean_buffers() must be called before unlocking lock_page().

Thanks for that.  This should fix the problem while not leaking the
unlock_page call outside bdev_write_page.

--- 8< ---

Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>

diff --git a/fs/block_dev.c b/fs/block_dev.c
index 9941dc8342df..3fbe75bdd257 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -716,10 +716,12 @@ int bdev_write_page(struct block_device *bdev, sector_t sector,
 
 	set_page_writeback(page);
 	result = ops->rw_page(bdev, sector + get_start_sect(bdev), page, true);
-	if (result)
+	if (result) {
 		end_page_writeback(page);
-	else
+	} else {
+		clean_page_buffers(page);
 		unlock_page(page);
+	}
 	blk_queue_exit(bdev->bd_queue);
 	return result;
 }
diff --git a/fs/mpage.c b/fs/mpage.c
index 2e4c41ccb5c9..d97b003f1607 100644
--- a/fs/mpage.c
+++ b/fs/mpage.c
@@ -468,6 +468,16 @@ static void clean_buffers(struct page *page, unsigned first_unmapped)
 		try_to_free_buffers(page);
 }
 
+/*
+ * For situations where we want to clean all buffers attached to a page.
+ * We don't need to calculate how many buffers are attached to the page,
+ * we just need to specify a number larger than the maximum number of buffers.
+ */
+void clean_page_buffers(struct page *page)
+{
+	clean_buffers(page, PAGE_SIZE);
+}
+
 static int __mpage_writepage(struct page *page, struct writeback_control *wbc,
 		      void *data)
 {
@@ -605,10 +615,8 @@ static int __mpage_writepage(struct page *page, struct writeback_control *wbc,
 	if (bio == NULL) {
 		if (first_unmapped == blocks_per_page) {
 			if (!bdev_write_page(bdev, blocks[0] << (blkbits - 9),
-								page, wbc)) {
-				clean_buffers(page, first_unmapped);
+								page, wbc))
 				goto out;
-			}
 		}
 		bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9),
 				BIO_MAX_PAGES, GFP_NOFS|__GFP_HIGH);
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h
index c8dae555eccf..446b24cac67d 100644
--- a/include/linux/buffer_head.h
+++ b/include/linux/buffer_head.h
@@ -232,6 +232,7 @@ int generic_write_end(struct file *, struct address_space *,
 				loff_t, unsigned, unsigned,
 				struct page *, void *);
 void page_zero_new_buffers(struct page *page, unsigned from, unsigned to);
+void clean_page_buffers(struct page *page);
 int cont_write_begin(struct file *, struct address_space *, loff_t,
 			unsigned, unsigned, struct page **, void **,
 			get_block_t *, loff_t *);
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
  2017-07-26 17:11       ` Matthew Wilcox
@ 2017-07-27 16:12         ` Kani, Toshimitsu
  2017-07-27 18:03           ` Ross Zwisler
  2017-09-20 21:04           ` Kani, Toshimitsu
  0 siblings, 2 replies; 13+ messages in thread
From: Kani, Toshimitsu @ 2017-07-27 16:12 UTC (permalink / raw)
  To: hirofumi, willy; +Cc: linux-fsdevel, linux-nvdimm

On Wed, 2017-07-26 at 10:11 -0700, Matthew Wilcox wrote:
> On Wed, Jul 26, 2017 at 06:23:08PM +0900, OGAWA Hirofumi wrote:
> > The locking of this path seems to be broken. The guy familiar to
> > bdev_write_page() path will made real fix though, The following
> > patch should be explaining enough what is wrong.
> > 
> > In short, clean_buffers() must be called before unlocking
> > lock_page().
> 
> Thanks for that.  This should fix the problem while not leaking the
> unlock_page call outside bdev_write_page.
> 
> --- 8< ---
> 
> Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>

Thanks Willy and Hirofumi for the quick fix!  I've tested the change,
and it works fine.

Tested-by: Toshi Kani <toshi.kani@hpe.com>

Out of curiosity, I am still wondering about the following: 
 - Why is this issue exposed with FAT FS, but not with other FSs?
 - Why did I not see this issue with BTT?

Thanks,
-Toshi
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
  2017-07-27 16:12         ` Kani, Toshimitsu
@ 2017-07-27 18:03           ` Ross Zwisler
  2017-07-27 18:20             ` Kani, Toshimitsu
  2017-09-20 21:04           ` Kani, Toshimitsu
  1 sibling, 1 reply; 13+ messages in thread
From: Ross Zwisler @ 2017-07-27 18:03 UTC (permalink / raw)
  To: Kani, Toshimitsu; +Cc: linux-nvdimm, willy, linux-fsdevel, hirofumi

On Thu, Jul 27, 2017 at 04:12:18PM +0000, Kani, Toshimitsu wrote:
> On Wed, 2017-07-26 at 10:11 -0700, Matthew Wilcox wrote:
> > On Wed, Jul 26, 2017 at 06:23:08PM +0900, OGAWA Hirofumi wrote:
> > > The locking of this path seems to be broken. The guy familiar to
> > > bdev_write_page() path will made real fix though, The following
> > > patch should be explaining enough what is wrong.
> > > 
> > > In short, clean_buffers() must be called before unlocking
> > > lock_page().
> > 
> > Thanks for that.  This should fix the problem while not leaking the
> > unlock_page call outside bdev_write_page.
> > 
> > --- 8< ---
> > 
> > Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
> 
> Thanks Willy and Hirofumi for the quick fix!  I've tested the change,
> and it works fine.
> 
> Tested-by: Toshi Kani <toshi.kani@hpe.com>
> 
> Out of curiosity, I am still wondering about the following: 
>  - Why is this issue exposed with FAT FS, but not with other FSs?
>  - Why did I not see this issue with BTT?

I also didn't see it with FAT + BRD, so I think the answer to both of the
above is just that the timings were different.
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
  2017-07-27 18:03           ` Ross Zwisler
@ 2017-07-27 18:20             ` Kani, Toshimitsu
  0 siblings, 0 replies; 13+ messages in thread
From: Kani, Toshimitsu @ 2017-07-27 18:20 UTC (permalink / raw)
  To: ross.zwisler; +Cc: linux-fsdevel, willy, hirofumi, linux-nvdimm

On Thu, 2017-07-27 at 12:03 -0600, Ross Zwisler wrote:
> On Thu, Jul 27, 2017 at 04:12:18PM +0000, Kani, Toshimitsu wrote:
> > On Wed, 2017-07-26 at 10:11 -0700, Matthew Wilcox wrote:
> > > On Wed, Jul 26, 2017 at 06:23:08PM +0900, OGAWA Hirofumi wrote:
> > > > The locking of this path seems to be broken. The guy familiar
> > > > to bdev_write_page() path will made real fix though, The
> > > > following patch should be explaining enough what is wrong.
> > > > 
> > > > In short, clean_buffers() must be called before unlocking
> > > > lock_page().
> > > 
> > > Thanks for that.  This should fix the problem while not leaking
> > > the unlock_page call outside bdev_write_page.
> > > 
> > > --- 8< ---
> > > 
> > > Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
> > 
> > Thanks Willy and Hirofumi for the quick fix!  I've tested the
> > change, and it works fine.
> > 
> > Tested-by: Toshi Kani <toshi.kani@hpe.com>
> > 
> > Out of curiosity, I am still wondering about the following: 
> >  - Why is this issue exposed with FAT FS, but not with other FSs?
> >  - Why did I not see this issue with BTT?
> 
> I also didn't see it with FAT + BRD, so I think the answer to both of
> the above is just that the timings were different.

Yeah, that may well be the case.  Just a tough nature for testing.

Thanks!
-Toshi
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305!
  2017-07-27 16:12         ` Kani, Toshimitsu
  2017-07-27 18:03           ` Ross Zwisler
@ 2017-09-20 21:04           ` Kani, Toshimitsu
  1 sibling, 0 replies; 13+ messages in thread
From: Kani, Toshimitsu @ 2017-09-20 21:04 UTC (permalink / raw)
  To: hirofumi, willy; +Cc: linux-fsdevel, linux-nvdimm

On Thu, 2017-07-27 at 16:12 +0000, Kani, Toshimitsu wrote:
> On Wed, 2017-07-26 at 10:11 -0700, Matthew Wilcox wrote:
> > On Wed, Jul 26, 2017 at 06:23:08PM +0900, OGAWA Hirofumi wrote:
> > > The locking of this path seems to be broken. The guy familiar to
> > > bdev_write_page() path will made real fix though, The following
> > > patch should be explaining enough what is wrong.
> > > 
> > > In short, clean_buffers() must be called before unlocking
> > > lock_page().
> > 
> > Thanks for that.  This should fix the problem while not leaking the
> > unlock_page call outside bdev_write_page.
> > 
> > --- 8< ---
> > 
> > Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
> 
> Thanks Willy and Hirofumi for the quick fix!  I've tested the change,
> and it works fine.
> 
> Tested-by: Toshi Kani <toshi.kani@hpe.com>

Since removing rw_page would have to wait till 4.15, can we go with this
fix for 4.14?  I confirmed that Matthew's patch [1] applies cleanly to
4.14-rc1.  This patch can also be applied to stable kernels.

Matthew, can you resend this patch with description?

[1] https://www.spinics.net/lists/linux-fsdevel/msg113835.html

Thanks,
-Toshi
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2017-09-20 21:01 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-25 21:37 FIle copy to FAT FS on NVDIMM hits BUG_ON at fs/buffer.c:3305! Kani, Toshimitsu
2017-07-25 22:22 ` Ross Zwisler
2017-07-25 22:27   ` Kani, Toshimitsu
2017-07-26  8:21   ` Johannes Thumshirn
2017-07-26  9:23     ` OGAWA Hirofumi
2017-07-26 14:23       ` Ross Zwisler
2017-07-26 16:08         ` Dan Williams
2017-07-26 17:03           ` Christoph Hellwig
2017-07-26 17:11       ` Matthew Wilcox
2017-07-27 16:12         ` Kani, Toshimitsu
2017-07-27 18:03           ` Ross Zwisler
2017-07-27 18:20             ` Kani, Toshimitsu
2017-09-20 21:04           ` Kani, Toshimitsu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).