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: Trond Myklebust <Trond.Myklebust@netapp.com>

+1 -2
+1 -2
net/sunrpc/xdr.c
··· 191 do { 192 /* Are any pointers crossing a page boundary? */ 193 if (pgto_base == 0) { 194 - flush_dcache_page(*pgto); 195 pgto_base = PAGE_CACHE_SIZE; 196 pgto--; 197 } ··· 210 vto = kmap_atomic(*pgto, KM_USER0); 211 vfrom = kmap_atomic(*pgfrom, KM_USER1); 212 memmove(vto + pgto_base, vfrom + pgfrom_base, copy); 213 kunmap_atomic(vfrom, KM_USER1); 214 kunmap_atomic(vto, KM_USER0); 215 216 } while ((len -= copy) != 0); 217 - flush_dcache_page(*pgto); 218 } 219 220 /*
··· 191 do { 192 /* Are any pointers crossing a page boundary? */ 193 if (pgto_base == 0) { 194 pgto_base = PAGE_CACHE_SIZE; 195 pgto--; 196 } ··· 211 vto = kmap_atomic(*pgto, KM_USER0); 212 vfrom = kmap_atomic(*pgfrom, KM_USER1); 213 memmove(vto + pgto_base, vfrom + pgfrom_base, copy); 214 + flush_dcache_page(*pgto); 215 kunmap_atomic(vfrom, KM_USER1); 216 kunmap_atomic(vto, KM_USER0); 217 218 } while ((len -= copy) != 0); 219 } 220 221 /*