oinfo->dqi_gi.dqi_free_entry =
                                        be32_to_cpu(lvb->lvb_free_entry);
        } else {
-               status = ocfs2_read_quota_block(oinfo->dqi_gqinode, 0, &bh);
+               status = ocfs2_read_quota_phys_block(oinfo->dqi_gqinode,
+                                                    oinfo->dqi_giblk, &bh);
                if (status) {
                        mlog_errno(status);
                        goto bail;
 
        struct ocfs2_lock_res dqi_gqlock;       /* Lock protecting quota information structure */
        struct buffer_head *dqi_gqi_bh; /* Buffer head with global quota file inode - set only if inode lock is obtained */
        int dqi_gqi_count;              /* Number of holders of dqi_gqi_bh */
+       u64 dqi_giblk;                  /* Number of block with global information header */
        struct buffer_head *dqi_lqi_bh; /* Buffer head with local quota file inode */
-       struct buffer_head *dqi_ibh;    /* Buffer with information header */
+       struct buffer_head *dqi_libh;   /* Buffer with local information header */
        struct qtree_mem_dqinfo dqi_gi; /* Info about global file */
        struct delayed_work dqi_sync_work;      /* Work for syncing dquots */
        struct ocfs2_quota_recovery *dqi_rec;   /* Pointer to recovery
 
        struct ocfs2_global_disk_dqinfo dinfo;
        struct mem_dqinfo *info = sb_dqinfo(sb, type);
        struct ocfs2_mem_dqinfo *oinfo = info->dqi_priv;
+       u64 pcount;
        int status;
 
        mlog_entry_void();
                mlog_errno(status);
                goto out_err;
        }
+
+       status = ocfs2_extent_map_get_blocks(gqinode, 0, &oinfo->dqi_giblk,
+                                            &pcount, NULL);
+       if (status < 0)
+               goto out_unlock;
+
+       status = ocfs2_qinfo_lock(oinfo, 0);
+       if (status < 0)
+               goto out_unlock;
        status = sb->s_op->quota_read(sb, type, (char *)&dinfo,
                                      sizeof(struct ocfs2_global_disk_dqinfo),
                                      OCFS2_GLOBAL_INFO_OFF);
+       ocfs2_qinfo_unlock(oinfo, 0);
        ocfs2_unlock_global_qf(oinfo, 0);
        if (status != sizeof(struct ocfs2_global_disk_dqinfo)) {
                mlog(ML_ERROR, "Cannot read global quota info (%d).\n",
 out_err:
        mlog_exit(status);
        return status;
+out_unlock:
+       ocfs2_unlock_global_qf(oinfo, 0);
+       mlog_errno(status);
+       goto out_err;
 }
 
 /* Write information to global quota file. Expects exlusive lock on quota
 
        INIT_LIST_HEAD(&oinfo->dqi_chunk);
        oinfo->dqi_rec = NULL;
        oinfo->dqi_lqi_bh = NULL;
-       oinfo->dqi_ibh = NULL;
+       oinfo->dqi_libh = NULL;
 
        status = ocfs2_global_read_info(sb, type);
        if (status < 0)
        info->dqi_flags = le32_to_cpu(ldinfo->dqi_flags);
        oinfo->dqi_chunks = le32_to_cpu(ldinfo->dqi_chunks);
        oinfo->dqi_blocks = le32_to_cpu(ldinfo->dqi_blocks);
-       oinfo->dqi_ibh = bh;
+       oinfo->dqi_libh = bh;
 
        /* We crashed when using local quota file? */
        if (!(info->dqi_flags & OLQF_CLEAN)) {
 {
        struct mem_dqinfo *info = sb_dqinfo(sb, type);
        struct buffer_head *bh = ((struct ocfs2_mem_dqinfo *)info->dqi_priv)
-                                               ->dqi_ibh;
+                                               ->dqi_libh;
        int status;
 
        status = ocfs2_modify_bh(sb_dqopt(sb)->files[type], bh, olq_update_info,
        /* Mark local file as clean */
        info->dqi_flags |= OLQF_CLEAN;
        status = ocfs2_modify_bh(sb_dqopt(sb)->files[type],
-                                oinfo->dqi_ibh,
+                                oinfo->dqi_libh,
                                 olq_update_info,
                                 info);
        if (status < 0) {
 
 out:
        ocfs2_inode_unlock(sb_dqopt(sb)->files[type], 1);
-       brelse(oinfo->dqi_ibh);
+       brelse(oinfo->dqi_libh);
        brelse(oinfo->dqi_lqi_bh);
        kfree(oinfo);
        return 0;