mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 11:18:52 +03:00
Rebase master to b108
This commit is contained in:
+12
-12
@@ -19,7 +19,7 @@
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
/*
|
||||
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
|
||||
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
@@ -1077,10 +1077,6 @@ dsl_dir_set_reservation_check(void *arg1, void *arg2, dmu_tx_t *tx)
|
||||
uint64_t *reservationp = arg2;
|
||||
uint64_t new_reservation = *reservationp;
|
||||
uint64_t used, avail;
|
||||
int64_t delta;
|
||||
|
||||
if (new_reservation > INT64_MAX)
|
||||
return (EOVERFLOW);
|
||||
|
||||
/*
|
||||
* If we are doing the preliminary check in open context, the
|
||||
@@ -1091,8 +1087,6 @@ dsl_dir_set_reservation_check(void *arg1, void *arg2, dmu_tx_t *tx)
|
||||
|
||||
mutex_enter(&dd->dd_lock);
|
||||
used = dd->dd_phys->dd_used_bytes;
|
||||
delta = MAX(used, new_reservation) -
|
||||
MAX(used, dd->dd_phys->dd_reserved);
|
||||
mutex_exit(&dd->dd_lock);
|
||||
|
||||
if (dd->dd_parent) {
|
||||
@@ -1102,11 +1096,17 @@ dsl_dir_set_reservation_check(void *arg1, void *arg2, dmu_tx_t *tx)
|
||||
avail = dsl_pool_adjustedsize(dd->dd_pool, B_FALSE) - used;
|
||||
}
|
||||
|
||||
if (delta > 0 && delta > avail)
|
||||
return (ENOSPC);
|
||||
if (delta > 0 && dd->dd_phys->dd_quota > 0 &&
|
||||
new_reservation > dd->dd_phys->dd_quota)
|
||||
return (ENOSPC);
|
||||
if (MAX(used, new_reservation) > MAX(used, dd->dd_phys->dd_reserved)) {
|
||||
uint64_t delta = MAX(used, new_reservation) -
|
||||
MAX(used, dd->dd_phys->dd_reserved);
|
||||
|
||||
if (delta > avail)
|
||||
return (ENOSPC);
|
||||
if (dd->dd_phys->dd_quota > 0 &&
|
||||
new_reservation > dd->dd_phys->dd_quota)
|
||||
return (ENOSPC);
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user