/* Read information header from global quota file */
 int ocfs2_global_read_info(struct super_block *sb, int type)
 {
-       struct inode *gqinode = NULL;
        unsigned int ino[OCFS2_MAXQUOTAS] = { USER_QUOTA_SYSTEM_INODE,
                                              GROUP_QUOTA_SYSTEM_INODE };
        struct ocfs2_global_disk_dqinfo dinfo;
        u64 pcount;
        int status;
 
+       oinfo->dqi_gi.dqi_sb = sb;
+       oinfo->dqi_gi.dqi_type = type;
+       ocfs2_qinfo_lock_res_init(&oinfo->dqi_gqlock, oinfo);
+       oinfo->dqi_gi.dqi_entry_size = sizeof(struct ocfs2_global_disk_dqblk);
+       oinfo->dqi_gi.dqi_ops = &ocfs2_global_ops;
+       oinfo->dqi_gqi_bh = NULL;
+       oinfo->dqi_gqi_count = 0;
+
        /* Read global header */
-       gqinode = ocfs2_get_system_file_inode(OCFS2_SB(sb), ino[type],
+       oinfo->dqi_gqinode = ocfs2_get_system_file_inode(OCFS2_SB(sb), ino[type],
                        OCFS2_INVALID_SLOT);
-       if (!gqinode) {
+       if (!oinfo->dqi_gqinode) {
                mlog(ML_ERROR, "failed to get global quota inode (type=%d)\n",
                        type);
                status = -EINVAL;
                goto out_err;
        }
-       oinfo->dqi_gi.dqi_sb = sb;
-       oinfo->dqi_gi.dqi_type = type;
-       oinfo->dqi_gi.dqi_entry_size = sizeof(struct ocfs2_global_disk_dqblk);
-       oinfo->dqi_gi.dqi_ops = &ocfs2_global_ops;
-       oinfo->dqi_gqi_bh = NULL;
-       oinfo->dqi_gqi_count = 0;
-       oinfo->dqi_gqinode = gqinode;
+
        status = ocfs2_lock_global_qf(oinfo, 0);
        if (status < 0) {
                mlog_errno(status);
                goto out_err;
        }
 
-       status = ocfs2_extent_map_get_blocks(gqinode, 0, &oinfo->dqi_giblk,
+       status = ocfs2_extent_map_get_blocks(oinfo->dqi_gqinode, 0, &oinfo->dqi_giblk,
                                             &pcount, NULL);
        if (status < 0)
                goto out_unlock;