INIT_LIST_HEAD(&nfsi->access_cache_inode_lru);
        INIT_LIST_HEAD(&nfsi->commit_info.list);
        atomic_long_set(&nfsi->nrequests, 0);
-       nfsi->commit_info.ncommit = 0;
+       atomic_long_set(&nfsi->commit_info.ncommit, 0);
        atomic_set(&nfsi->commit_info.rpcs_out, 0);
        init_rwsem(&nfsi->rmdir_sem);
        mutex_init(&nfsi->commit_mutex);
 
 {
        set_bit(PG_CLEAN, &req->wb_flags);
        nfs_list_add_request(req, dst);
-       cinfo->mds->ncommit++;
+       atomic_long_inc(&cinfo->mds->ncommit);
 }
 EXPORT_SYMBOL_GPL(nfs_request_add_commit_list_locked);
 
        if (!test_and_clear_bit(PG_CLEAN, &(req)->wb_flags))
                return;
        nfs_list_remove_request(req);
-       cinfo->mds->ncommit--;
+       atomic_long_dec(&cinfo->mds->ncommit);
 }
 EXPORT_SYMBOL_GPL(nfs_request_remove_commit_list);
 
 unsigned long
 nfs_reqs_to_commit(struct nfs_commit_info *cinfo)
 {
-       return cinfo->mds->ncommit;
+       return atomic_long_read(&cinfo->mds->ncommit);
 }
 
 /* NFS_I(cinfo->inode)->commit_mutex held by caller */
 {
        int ret = 0;
 
+       if (!atomic_long_read(&cinfo->mds->ncommit))
+               return 0;
        mutex_lock(&NFS_I(cinfo->inode)->commit_mutex);
-       if (cinfo->mds->ncommit > 0) {
+       if (atomic_long_read(&cinfo->mds->ncommit) > 0) {
                const int max = INT_MAX;
 
                ret = nfs_scan_commit_list(&cinfo->mds->list, dst,
        int ret = 0;
 
        /* no commits means nothing needs to be done */
-       if (!nfsi->commit_info.ncommit)
+       if (!atomic_long_read(&nfsi->commit_info.ncommit))
                return ret;
 
        if (wbc->sync_mode == WB_SYNC_NONE) {