init_waitqueue_head(&dmabuf->poll);
        dmabuf->cb_in.poll = dmabuf->cb_out.poll = &dmabuf->poll;
        dmabuf->cb_in.active = dmabuf->cb_out.active = 0;
-       mutex_init(&dmabuf->lock);
 +      INIT_LIST_HEAD(&dmabuf->attachments);
  
        if (!resv) {
 -              resv = (struct dma_resv *)&dmabuf[1];
 -              dma_resv_init(resv);
 +              dmabuf->resv = (struct dma_resv *)&dmabuf[1];
 +              dma_resv_init(dmabuf->resv);
 +      } else {
 +              dmabuf->resv = resv;
        }
 -      dmabuf->resv = resv;
  
 -      file = dma_buf_getfile(dmabuf, exp_info->flags);
 -      if (IS_ERR(file)) {
 -              ret = PTR_ERR(file);
 +      ret = dma_buf_stats_setup(dmabuf, file);
 +      if (ret)
                goto err_dmabuf;
 -      }
  
 +      file->private_data = dmabuf;
 +      file->f_path.dentry->d_fsdata = dmabuf;
        dmabuf->file = file;
  
 -      INIT_LIST_HEAD(&dmabuf->attachments);
 -
        mutex_lock(&db_list.lock);
        list_add(&dmabuf->list_node, &db_list.head);
        mutex_unlock(&db_list.lock);