OK I will answer my question in case someone comes across the same issue. My problem is I had an unfair disk scheduler. For Linux, there are many types of IO schedulers (deadline, cfq, noop). CFQ is a fair scheduler and it is the default in many linux distributions...except mine I guess! I changed the scheduler to CFQ and now it is working fine. You can check your current scheduler using the command
cat /sys/block/{device name}/queue/scheduler
You can set your IO scheduler using the command
echo cfq > /sys/block/{device name}/queue/scheduler