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

Commit bce3481c authored by Trond Myklebust's avatar Trond Myklebust
Browse files

This fixes a panic doing the first READDIR or READDIRPLUS call when:



* the client is ia64 or any platform that actually implements
    flush_dcache_page(), and

  * the server returns fsinfo.dtpref >= client's PAGE_SIZE, and

  * the server does *not* return post-op attributes for the directory
    in the READDIR reply.

Problem diagnosed by Greg Banks <gnb@melbourne.sgi.com>

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 83715ad5
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -191,7 +191,6 @@ _shift_data_right_pages(struct page **pages, size_t pgto_base,
	do {
		/* Are any pointers crossing a page boundary? */
		if (pgto_base == 0) {
			flush_dcache_page(*pgto);
			pgto_base = PAGE_CACHE_SIZE;
			pgto--;
		}
@@ -211,11 +210,11 @@ _shift_data_right_pages(struct page **pages, size_t pgto_base,
		vto = kmap_atomic(*pgto, KM_USER0);
		vfrom = kmap_atomic(*pgfrom, KM_USER1);
		memmove(vto + pgto_base, vfrom + pgfrom_base, copy);
		flush_dcache_page(*pgto);
		kunmap_atomic(vfrom, KM_USER1);
		kunmap_atomic(vto, KM_USER0);

	} while ((len -= copy) != 0);
	flush_dcache_page(*pgto);
}

/*