Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:Update
btrfsmaintenance
btrfsmaintenance-exclusive-tasks.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File btrfsmaintenance-exclusive-tasks.patch of Package btrfsmaintenance
From: Jeff Mahoney <jeffm@suse.com> Subject: btrfsmaintenance: Make balance, scrub, and trim mutually exclusive tasks Patch-mainline: Never, upstream uses systemd unit files When scheduled simultaneously, balance, scrub, and trim can cause the file system to stall due to balance generating large numbers of transactions and trim taking the commit root sem across potentially time consuming operatations, which in turn limits the when transactions can be committed. The original idea for this was from Oliver Kurz <okurz@suse.com>, who wrote it for systemd unit files. Signed-off-by: Jeff Mahoney <jeffm@suse.com> --- btrfs-balance.sh | 12 +++++++++--- btrfs-scrub.sh | 8 +++++++- btrfs-trim.sh | 4 +++- common.sh | 35 +++++++++++++++++++++++++++++++++++ sysconfig.btrfsmaintenance | 13 +++++++++++++ 5 files changed, 67 insertions(+), 5 deletions(-) --- a/btrfs-balance.sh +++ b/btrfs-balance.sh @@ -19,8 +19,14 @@ if [ -f /etc/default/btrfsmaintenance ] . /etc/default/btrfsmaintenance fi +. $(dirname "$(realpath "$0")")/common.sh + LOGIDENTIFIER='btrfs-balance' +btrfs_balance() { + run_task btrfs balance "$@" +} + { OIFS="$IFS" IFS=: @@ -33,15 +39,15 @@ for MM in $BTRFS_BALANCE_MOUNTPOINTS; do echo "Before balance of $MM" btrfs filesystem df "$MM" df -H "$MM" - btrfs balance start -dusage=0 "$MM" + btrfs_balance start -dusage=0 "$MM" for BB in $BTRFS_BALANCE_DUSAGE; do # quick round to clean up the unused block groups btrfs balance start -v -dusage=$BB "$MM" done - btrfs balance start -musage=0 "$MM" + btrfs_balance start -musage=0 "$MM" for BB in $BTRFS_BALANCE_MUSAGE; do # quick round to clean up the unused block groups - btrfs balance start -v -musage="$BB" "$MM" + btrfs_balance start -v -musage="$BB" "$MM" done echo "After balance of $MM" btrfs filesystem df "$MM" --- a/btrfs-scrub.sh +++ b/btrfs-scrub.sh @@ -19,6 +19,12 @@ if [ -f /etc/default/btrfsmaintenance ] . /etc/default/btrfsmaintenance fi +. $(dirname "$(realpath "$0")")/common.sh + +btrfs_scrub() { + run_task btrfs scrub "$@" +} + LOGIDENTIFIER='btrfs-scrub' readonly= @@ -42,7 +48,7 @@ for MNT in $BTRFS_SCRUB_MOUNTPOINTS; do echo "Path $MNT is not btrfs, skipping" continue fi - btrfs scrub start -Bd $ioprio $readonly "$MNT" + btrfs_scrub start -Bd $ioprio $readonly "$MNT" if [ "$?" != "0" ]; then echo "Scrub cancelled at $MNT" exit 1 --- a/btrfs-trim.sh +++ b/btrfs-trim.sh @@ -19,6 +19,8 @@ if [ -f /etc/default/btrfsmaintenance ] . /etc/default/btrfsmaintenance fi +. $(dirname "$(realpath "$0")")/common.sh + LOGIDENTIFIER='btrfs-trim' { @@ -31,7 +33,7 @@ for MNT in $BTRFS_TRIM_MOUNTPOINTS; do continue fi echo "Running fstrim on $MNT" - fstrim "$MNT" + run_task fstrim "$MNT" done } | \ --- /dev/null +++ b/common.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# +# Copyright (c) 2019 SUSE LINUX +# +# please send bugfixes or comments to http://www.suse.com/feedback. + +# +# paranoia settings +# +umask 022 +PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH + +if [ -f /etc/sysconfig/btrfsmaintenance ] ; then + . /etc/sysconfig/btrfsmaintenance +fi + +if [ -f /etc/default/btrfsmaintenance ] ; then + . /etc/default/btrfsmaintenance +fi + +btrfs_fsid() { + btrfs filesystem show "$1" | sed -n -e '/uuid:/ {s/^.*uuid: //;p }' +} + +run_task() { + MNT="${@:$#}" + UUID=$(btrfs_fsid "$MNT") + + if test "$BTRFS_ALLOW_CONCURRENCY" = "true"; then + "$@" + else + /usr/bin/flock /run/btrfs-maintenance-running."$UUID" "$@" + fi +} --- a/sysconfig.btrfsmaintenance +++ b/sysconfig.btrfsmaintenance @@ -118,3 +118,16 @@ BTRFS_TRIM_PERIOD="weekly" # Which mountpoints/filesystems to trim periodically. # (Colon separated paths) BTRFS_TRIM_MOUNTPOINTS="/" + +## Path: System/File systems/btrfs +## Description: Configuration to allow concurrent jobs +## Type: boolean +## Default: "false" +# +# These maintenance tasks may compete for resources with each other, blocking +# out other tasks from using the file systems. This option will force +# these jobs to run in FIFO order when scheduled at overlapping times. This +# may include tasks scheduled to run when a system resumes or boots when +# the timer for these tasks(s) elapsed while the system was suspended +# or powered off. +BTRFS_ALLOW_CONCURRENCY="false"
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor