Btrfs: add more error checking to btrfs_dirty_inode
authorChris Mason <chris.mason@oracle.com>
Thu, 27 May 2010 14:23:00 +0000 (10:23 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 27 May 2010 14:23:00 +0000 (10:23 -0400)
The ENOSPC code will now return ENOSPC to btrfs_start_transaction.
btrfs_dirty_inode needs to check for this and error out appropriately.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/inode.c

index 6866c36c26fb9a67ba1ed3d933ab029686ffca71..2551b80183998aeebaffab5a72b477b6212921be 100644 (file)
@@ -4312,12 +4312,23 @@ void btrfs_dirty_inode(struct inode *inode)
                /* whoops, lets try again with the full transaction */
                btrfs_end_transaction(trans, root);
                trans = btrfs_start_transaction(root, 1);
+               if (IS_ERR(trans)) {
+                       if (printk_ratelimit()) {
+                               printk(KERN_ERR "btrfs: fail to "
+                                      "dirty  inode %lu error %ld\n",
+                                      inode->i_ino, PTR_ERR(trans));
+                       }
+                       return;
+               }
                btrfs_set_trans_block_group(trans, inode);
 
                ret = btrfs_update_inode(trans, root, inode);
                if (ret) {
-                       printk(KERN_ERR"btrfs: fail to dirty inode %lu error %d\n",
-                               inode->i_ino, ret);
+                       if (printk_ratelimit()) {
+                               printk(KERN_ERR "btrfs: fail to "
+                                      "dirty  inode %lu error %d\n",
+                                      inode->i_ino, ret);
+                       }
                }
        }
        btrfs_end_transaction(trans, root);