#!/bin/bash

MD_DEVICE=$1

if [ -e /sys/block/${MD_DEVICE}/queue/nr_requests ]; then
    echo 4096 > /sys/block/${MD_DEVICE}/queue/read_ahead_kb
fi
if [ -e /sys/block/${MD_DEVICE}/queue/nr_requests ]; then
    echo 128 > /sys/block/${MD_DEVICE}/queue/nr_requests
fi

if [ -e /sys/block/${MD_DEVICE}/md/raid_disks ]; then
    RAID_DISKS=$(cat /sys/block/${MD_DEVICE}/md/raid_disks)

    if [ -e /sys/block/${MD_DEVICE}/md/level ]; then
        RAID_LEVEL=$(cat /sys/block/${MD_DEVICE}/md/level)

        if [ "$RAID_LEVEL" == "raid5" ]; then
            VALID_DISKS=$((RAID_DISKS - 1))
        elif [ "$RAID_LEVEL" == "raid6" ]; then
            VALID_DISKS=$((RAID_DISKS - 2))
        else
            echo "can't support RAID level: $RAID_LEVEL"
            exit 1
        fi

        echo "this md valid_disks: $VALID_DISKS"

        STRIPE_CACHE_SIZE=4096
        READAHEAD_KB=$((VALID_DISKS * 128))

        echo $STRIPE_CACHE_SIZE > /sys/block/${MD_DEVICE}/md/stripe_cache_size
        if [ $READAHEAD_KB -gt 0 ]; then
            echo $READAHEAD_KB > /sys/block/${MD_DEVICE}/queue/read_ahead_kb
        fi
        echo "Updated $MD_DEVICE: stripe_cache_size set to $STRIPE_CACHE_SIZE, read_ahead_kb set to $READAHEAD_KB"
    else
        echo "can't find raid_level"
        exit 1
    fi
else
    echo "can't find raid disks"
    exit 1
fi
