fixed, taken from the linux kernel