ufs: fix reserved blocks check
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 14 Jun 2017 19:41:17 +0000 (15:41 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 14 Jun 2017 19:46:05 +0000 (15:46 -0400)
a) honour ->s_minfree; don't just go with default (5)
b) don't bother with capability checks until we know we'll need them

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/ufs/balloc.c

index d642cc0..52d1ef4 100644 (file)
@@ -400,10 +400,12 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
        /*
         * There is not enough space for user on the device
         */
-       if (!capable(CAP_SYS_RESOURCE) && ufs_freespace(uspi, UFS_MINFREE) <= 0) {
-               mutex_unlock(&UFS_SB(sb)->s_lock);
-               UFSD("EXIT (FAILED)\n");
-               return 0;
+       if (unlikely(ufs_freespace(uspi, uspi->s_minfree) <= 0)) {
+               if (!capable(CAP_SYS_RESOURCE)) {
+                       mutex_unlock(&UFS_SB(sb)->s_lock);
+                       UFSD("EXIT (FAILED)\n");
+                       return 0;
+               }
        }
 
        if (goal >= uspi->s_size)