Index: includes/file.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/file.inc,v
retrieving revision 1.232
diff -u -r1.232 file.inc
--- includes/file.inc	26 Sep 2010 23:31:35 -0000	1.232
+++ includes/file.inc	27 Sep 2010 22:36:13 -0000
@@ -661,7 +661,7 @@
   $result = $query->execute();
 
   // If the row has more than the specified count decrement it by that number.
-  if (!$result) {
+  if (!$result && $count > 0) {
     $query = db_update('file_usage')
       ->condition('module', $module)
       ->condition('fid', $file->fid);
@@ -670,9 +670,7 @@
         ->condition('type', $type)
         ->condition('id', $id);
     }
-    if ($count) {
-      $query->expression('count', 'count - :count', array(':count' => $count));
-    }
+    $query->expression('count', 'count - :count', array(':count' => $count));
     $query->execute();
   }
 }
Index: modules/simpletest/tests/file.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/file.test,v
retrieving revision 1.69
diff -u -r1.69 file.test
--- modules/simpletest/tests/file.test	26 Sep 2010 23:31:36 -0000	1.69
+++ modules/simpletest/tests/file.test	27 Sep 2010 22:36:14 -0000
@@ -1971,25 +1971,36 @@
         'module' => 'testing',
         'type' => 'bar',
         'id' => 2,
-        'count' => 2
+        'count' => 3,
       ))
       ->execute();
 
+    // Normal decrement.
     file_usage_delete($file, 'testing', 'bar', 2);
     $count = db_select('file_usage', 'f')
       ->fields('f', array('count'))
       ->condition('f.fid', $file->fid)
       ->execute()
       ->fetchField();
-    $this->assertEqual(1, $count, t('The count was decremented correctly.'));
+    $this->assertEqual(2, $count, t('The count was decremented correctly.'));
 
+    // Multiple decrement and removal.
+    file_usage_delete($file, 'testing', 'bar', 2, 2);
+    $count = db_select('file_usage', 'f')
+      ->fields('f', array('count'))
+      ->condition('f.fid', $file->fid)
+      ->execute()
+      ->fetchField();
+    $this->assertIdentical(FALSE, $count, t('The count was removed entirely when empty.'));
+
+    // Non-existent decrement.
     file_usage_delete($file, 'testing', 'bar', 2);
     $count = db_select('file_usage', 'f')
       ->fields('f', array('count'))
       ->condition('f.fid', $file->fid)
       ->execute()
       ->fetchField();
-    $this->assertEqual(0, $count, t('The count was decremented correctly.'));
+    $this->assertIdentical(FALSE, $count, t('Decrementing non-exist record complete.'));
   }
 }
 
