* book:
  * http://oss.software.ibm.com/developerworks/opensource/linux390/index.shtml
  */
-static struct appldata_mem_data {
+struct appldata_mem_data {
        u64 timestamp;
        u32 sync_count_1;       /* after VM collected the record data, */
        u32 sync_count_2;       /* sync_count_1 and sync_count_2 should be the
        u64 pgmajfault;         /* page faults (major only) */
 // <-- New in 2.6
 
-} __attribute__((packed)) appldata_mem_data;
+} __packed;
 
 
 /*
        .record_nr = APPLDATA_RECORD_MEM_ID,
        .size      = sizeof(struct appldata_mem_data),
        .callback  = &appldata_get_mem_data,
-       .data      = &appldata_mem_data,
        .owner     = THIS_MODULE,
        .mod_lvl   = {0xF0, 0xF0},              /* EBCDIC "00" */
 };
  */
 static int __init appldata_mem_init(void)
 {
-       return appldata_register_ops(&ops);
+       int ret;
+
+       ops.data = kzalloc(sizeof(struct appldata_mem_data), GFP_KERNEL);
+       if (!ops.data)
+               return -ENOMEM;
+
+       ret = appldata_register_ops(&ops);
+       if (ret)
+               kfree(ops.data);
+
+       return ret;
 }
 
 /*
 static void __exit appldata_mem_exit(void)
 {
        appldata_unregister_ops(&ops);
+       kfree(ops.data);
 }