In linux, why can't we have a mutex inside an isr() routine for protecting a shared resource ?
Because a lock operation on a mutex can sleep and it's illegal to sleep in an ISR. Use a spinlock instead.