struct io_cb_data *cbd = ll_init_cb();
obd_count pages = 0;
struct brw_page *pga, *pgp;
- int j;
+ __u64 id = data->ioc_obdo1.o_id;
+ int gfp_mask = (id & 1) ? GFP_HIGHUSER : GFP_KERNEL;
+ int verify = (id != 0);
unsigned long off;
- int highmem;
- int verify;
- __u64 id;
+ int j;
if (!cbd)
GOTO(out, err = -ENOMEM);
}
memset(&smd, 0, sizeof(smd));
- id = smd.lmd_object_id = data->ioc_obdo1.o_id;
- highmem = (id & 1) != 0;
- verify = (id != 0);
-
+ smd.lmd_object_id = id;
+
off = data->ioc_offset;
for (j = 0, pgp = pga; j < pages; j++, off += PAGE_SIZE, pgp++){
- pgp->pg = alloc_pages(highmem ? GFP_HIGHUSER : GFP_KERNEL, 0);
+ pgp->pg = alloc_pages(gfp_mask, 0);
if (!pgp->pg) {
CERROR("no memory for brw pages\n");
GOTO(brw_cleanup, err = -ENOMEM);
pgp->off = off;
pgp->flag = 0;
- if (verify && (rw == OBD_BRW_WRITE)) {
- page_debug_setup(kmap(pgp->pg), pgp->count,
- pgp->off, id);
+ if (verify) {
+ void *addr = kmap(pgp->pg);
+
+ if (rw == OBD_BRW_WRITE)
+ page_debug_setup(addr, pgp->count,
+ pgp->off, id);
+ else
+ memset(addr, 0xba, PAGE_SIZE);
kunmap(pgp->pg);
}
}
brw_cleanup:
for (j = 0, pgp = pga; j < pages; j++, pgp++) {
if (pgp->pg != NULL) {
- if (verify)
- {
+ if (verify) {
void *addr = kmap(pgp->pg);
- int err2 = page_debug_check("test_brw", addr,
- PAGE_SIZE, pgp->off,id);
-
+ int err2;
+
+ err2 = page_debug_check("test_brw",
+ addr,
+ PAGE_SIZE,
+ pgp->off,id);
if (!err)
err = err2;
+ kunmap(pgp->pg);
}
- kunmap(pgp->pg);
__free_pages(pgp->pg, 0);
}
}
* by Peter Braam <braam@clusterfs.com>
*/
-static char rcsid[] __attribute ((unused)) = "$Id: echo.c,v 1.26 2002/08/22 13:34:20 eeb Exp $";
-#define OBDECHO_VERSION "$Revision: 1.26 $"
+static char rcsid[] __attribute ((unused)) = "$Id: echo.c,v 1.27 2002/08/29 00:51:53 adilger Exp $";
+#define OBDECHO_VERSION "$Revision: 1.27 $"
#define EXPORT_SYMTAB
*desc_private = (void *)DESC_PRIV;
for (i = 0; i < objcount; i++, obj++) {
- int highmem = (obj->ioo_id & 1) != 0;
- int verify = obj->ioo_id != 0;
+ int gfp_mask = (obj->ioo_id & 1) ? GFP_HIGHUSER : GFP_KERNEL;
+ int verify = obj->ioo_id != 0;
int j;
for (j = 0 ; j < obj->ioo_bufcnt ; j++, nb++, r++) {
- r->page = alloc_pages(highmem ? GFP_HIGHUSER : GFP_KERNEL, 0);
+ r->page = alloc_pages(gfp_mask, 0);
if (!r->page) {
CERROR("can't get page %d/%d for id "LPU64"\n",
j, obj->ioo_bufcnt, obj->ioo_id);
CDEBUG(D_PAGE, "$$$$ get page %p, addr %p@"LPU64"\n",
r->page, r->addr, r->offset);
- if (verify && (cmd & OBD_BRW_READ) != 0)
+ if (verify && cmd == OBD_BRW_READ)
page_debug_setup(r->addr, r->len, r->offset,
obj->ioo_id);
+ else if (verify)
+ memset(r->addr, 0xec, r->len);
}
}
CDEBUG(D_PAGE, "%ld pages allocated after prep\n", echo_pages);
CDEBUG(D_PAGE, "$$$$ use page %p, addr %p@"LPU64"\n",
r->page, addr, r->offset);
- if (verify && (cmd & OBD_BRW_WRITE))
+ if (verify)
page_debug_check("echo", addr, r->len,
r->offset, obj->ioo_id);