Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 267aeb6c authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'for-linus' of git://git.open-osd.org/linux-open-osd

* 'for-linus' of git://git.open-osd.org/linux-open-osd:
  exofs: Fix double page_unlock BUG in write_begin/end
parents d6bcfd1a f17b1f9f
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -54,6 +54,9 @@ struct page_collect {
	unsigned nr_pages;
	unsigned long length;
	loff_t pg_first; /* keep 64bit also in 32-arches */
	bool read_4_write; /* This means two things: that the read is sync
			    * And the pages should not be unlocked.
			    */
};

static void _pcol_init(struct page_collect *pcol, unsigned expected_pages,
@@ -71,6 +74,7 @@ static void _pcol_init(struct page_collect *pcol, unsigned expected_pages,
	pcol->nr_pages = 0;
	pcol->length = 0;
	pcol->pg_first = -1;
	pcol->read_4_write = false;
}

static void _pcol_reset(struct page_collect *pcol)
@@ -347,6 +351,7 @@ static int readpage_strip(void *data, struct page *page)
		if (PageError(page))
			ClearPageError(page);

		if (!pcol->read_4_write)
			unlock_page(page);
		EXOFS_DBGMSG("readpage_strip(0x%lx, 0x%lx) empty page,"
			     " splitting\n", inode->i_ino, page->index);
@@ -428,6 +433,7 @@ static int _readpage(struct page *page, bool is_sync)
	/* readpage_strip might call read_exec(,is_sync==false) at several
	 * places but not if we have a single page.
	 */
	pcol.read_4_write = is_sync;
	ret = readpage_strip(&pcol, page);
	if (ret) {
		EXOFS_ERR("_readpage => %d\n", ret);