static int nilfs_dat_prepare_entry(struct inode *dat,
                                   struct nilfs_palloc_req *req, int create)
 {
-       return nilfs_palloc_get_entry_block(dat, req->pr_entry_nr,
-                                           create, &req->pr_entry_bh);
+       int ret;
+
+       ret = nilfs_palloc_get_entry_block(dat, req->pr_entry_nr,
+                                          create, &req->pr_entry_bh);
+       if (unlikely(ret == -ENOENT)) {
+               nilfs_err(dat->i_sb,
+                         "DAT doesn't have a block to manage vblocknr = %llu",
+                         (unsigned long long)req->pr_entry_nr);
+               /*
+                * Return internal code -EINVAL to notify bmap layer of
+                * metadata corruption.
+                */
+               ret = -EINVAL;
+       }
+       return ret;
 }
 
 static void nilfs_dat_commit_entry(struct inode *dat,
 
 int nilfs_dat_prepare_start(struct inode *dat, struct nilfs_palloc_req *req)
 {
-       int ret;
-
-       ret = nilfs_dat_prepare_entry(dat, req, 0);
-       WARN_ON(ret == -ENOENT);
-       return ret;
+       return nilfs_dat_prepare_entry(dat, req, 0);
 }
 
 void nilfs_dat_commit_start(struct inode *dat, struct nilfs_palloc_req *req,
        int ret;
 
        ret = nilfs_dat_prepare_entry(dat, req, 0);
-       if (ret < 0) {
-               WARN_ON(ret == -ENOENT);
+       if (ret < 0)
                return ret;
-       }
 
        kaddr = kmap_atomic(req->pr_entry_bh->b_page);
        entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,