I'm a little late to the game, sorry.. But: > + > + spin_lock_irqsave(&ip->i_iodone_lock, flags); > + list_replace_init(&ip->i_iodone_list, &completion_list); > + spin_unlock_irqrestore(&ip->i_iodone_lock, flags); I really don't like this new per-inode lock, and the irq disabling at all. Especially as the pattern perfectly fits the lockless lists (llists). Can you check if these work here?