#!/bin/sh

#
# Generates sorted readahead files
#
# Copyright (C) 2007  Red Hat, Inc.
# Karel Zak <kzak@redhat.com>
#

TYPES="early later"
READAHEAD_CMD="/sbin/readahead"
READAHEAD_BASE="/etc/readahead.d"
MERGE_LISTS=false

[ -x "$READAHEAD_CMD" ] || exit 0

if [ -z "$RENICED" ]; then
    export RENICED=yes
    exec /sbin/start-stop-daemon --start -N +19 -I idle \
	    --exec $READAHEAD_CMD --startas $0
fi

if [ -f /lib/init/rw/readahead ]; then
    . /lib/init/rw/readahead
    if $MOUNTED_USR && $MOUNTED_VAR; then
	MERGE_LISTS=true
    fi
fi

for LTYPE in $TYPES; do
	if [ -s "$READAHEAD_BASE/custom.$LTYPE" ]; then
		FLS="$READAHEAD_BASE/custom.$LTYPE"
	else
		FLS=$(ls $READAHEAD_BASE/*.$LTYPE 2>/dev/null )
	fi
	
	if [ -n "$FLS" ]; then
		$READAHEAD_CMD --sort --output=$READAHEAD_BASE/$LTYPE.sorted $FLS >/dev/null 2>&1
	fi
done

if $MERGE_LISTS; then
    tmpf="$(mktemp)"

    extra_opts=--sort

    major=$(stat -c '%D' . | cut -b1)
    if [ -f "/sys/dev/block/${major}:0/queue/rotational" ]; then
	rotational="$(cat "/sys/dev/block/${major}:0/queue/rotational")"
	if [ "$rotational" = "0" ]; then
	    extra_opts=--build
	fi
    fi

    for LTYPE in $TYPES; do
	f="$READAHEAD_BASE/$LTYPE.sorted"
	[ -f "$f" ] || continue
	cut -d\  -f2- "$f" >> "$tmpf"
    done
    if [ -s "$tmpf" ]; then
	$READAHEAD_CMD $extra_opts --output="$READAHEAD_BASE/early.sorted" "$tmpf" >/dev/null 2>&1
	: > "$READAHEAD_BASE/later.sorted"
    fi
    rm -f "$tmpf"
fi
