George Skivington scored two tries as London Irish shocked Gloucester to end a run of six Premiership defeats.
Freddie Burns and Steven Shingler kicked early penalties before Skivington twice crossed to help the Exiles to a 15-6 lead at the interval.
Burns kept Gloucester's hopes alive, scoring a further two penalties in the second period.
But Irish held on despite late pressure to secure their first victory in all competitions since 11 November.
Burns and Shingler exchanged penalties in the early stages, as Gloucester made a much more tentative start than they did in their impressive 47-3 victory over the Exiles in the Challenge Cup last month.
And, with the visitors growing in confidence, Skivington bundled over for the first try of the match to put Irish ahead, although Shingler missed the conversion.
Burns then struck another penalty for Gloucester to reduce the deficit to two.
But, with an error-filled first period drawing to a close, Skivington struck again to ensure the half-time score reflected London Irish's dominance.
Following good work from Pat Phibbs, Skivington dived over for his second try of the match, before Shingler converted to take the score at the midway point to 15-6.
The home side wasted a chance to reduce the arrears early in the second half, with Burns missing a long-range penalty attempt.
With Gloucester continuing to press forward, Burns put the disappointment of that miss behind him to score successive penalties, the second from almost 40 metres, to fuel hopes of a fight-back.
But Irish again responded, with Shingler successfully kicking a penalty of his own to keep the the hosts at bay.
Gloucester's frustrations boiled over in the closing stages, with Will James receiving a yellow card to ensure the hosts would finish the match with 14 men.
And with the numerical advantage, Irish were able to hold on, securing their first win in four meetings between the clubs this season.
Following the result, Gloucester, who are now without a try in three Premiership matches, drop to fifth while London Irish remain 11th.
VIEW FROM THE DRESSING ROOM
Gloucester Director of Rugby Nigel Davies told BBC Radio Gloucestershire:
Media playback is not supported on this device.
"Emotionally we didn't turn up for this fixture and with such a fantastic crowd here today, there are no excuses. As a group we failed, we accept that and we're sorry.
"They came here with a solid game, but really it was about our errors. Not being able to hold onto the ball, not being able to get field position and not having any part of the game.
"Sometimes you accept that you lose matches when you're not good enough, but that wasn't the case today, we just didn't turn up emotionally and there was too much error in our game.
"It's important we bounce back, it's the nature of the game and you're going to lose matches. It's certainly not where we want to be but we're working hard to get there."
Gloucester: Cook, Sharples, Tindall, Twelvetrees, Monahan, F. Burns, Cowan, Murphy, Edmonds, Knight, Savage, James, Kalamafoni, Qera, B. Morgan.
Replacements: Robson for Cowan (51), Wood for Murphy (51), Dawidiuk for Edmonds (61), Cox for Qera (51).
Sin Bin: James (77).
London Irish: Homer, Joseph, Tagicakibau, Shingler, Yarde, Humphreys, Phibbs, Lahiff, Paice, Aulika, Skivington, Evans, Garvey, Sinclair, Hala'ufia.
Replacements: Geraghty for Humphreys (50), Moates for Phibbs (73), Lawson for Paice (38), Halavatau for Aulika (68), Gibson for Garvey (73).
Ref: David Rose (RFU).