+ if (unlikely(d->opd_reserved_mb_high == 0 &&
+ d->opd_reserved_mb_low == 0)) {
+ /* Use ~0.1% by default to disable object allocation,
+ * and ~0.2% to enable, size in MB, set both watermark
+ */
+ spin_lock(&d->opd_pre_lock);
+ if (d->opd_reserved_mb_high == 0 &&
+ d->opd_reserved_mb_low == 0) {
+ d->opd_reserved_mb_low =
+ ((msfs->os_bsize >> 10) *
+ msfs->os_blocks) >> 20;
+ if (d->opd_reserved_mb_low == 0)
+ d->opd_reserved_mb_low = 1;
+ d->opd_reserved_mb_high =
+ (d->opd_reserved_mb_low << 1) + 1;
+ }
+ spin_unlock(&d->opd_pre_lock);
+ }
+ /* in MB */
+ available = (msfs->os_bavail * (msfs->os_bsize >> 10)) >> 10;
+ if (msfs->os_ffree < 32)
+ msfs->os_state |= OS_STATE_ENOINO;
+ else if (msfs->os_ffree > 64)
+ msfs->os_state &= ~OS_STATE_ENOINO;
+
+ if (available < d->opd_reserved_mb_low)
+ msfs->os_state |= OS_STATE_ENOSPC;
+ else if (available > d->opd_reserved_mb_high)
+ msfs->os_state &= ~OS_STATE_ENOSPC;
+ if (msfs->os_state & (OS_STATE_ENOINO | OS_STATE_ENOSPC)) {