Two men in masks are chasing after a van. They hit the van and cause it to crash. The men are really cops - Vincent Downs (Jamie Foxx) and Sean Cass (T.I.). They fight the men in the van and kill one as more thugs show up with guns. Vincent and Sean shoot the men and steal a duffel bag with 25 kilograms of cocaine in it.
Vincent is an Internal Affairs officer who has been conducting a two-year investigation into a crime ring. He knows Sean is a courier for the ring, but his top targets are casino owner Stanley Rubino (Dermot Mulroney), and the boss behind everything, Rob Novak (Scoot McNairy).
Detective Jennifer Bryant (Michelle Monaghan) walks into her department with a cut on her face. She speaks to a police psychologist about a recent incident in which she attempted to take down a meth lab but was assaulted by a junkie. Now many of her colleagues think she is in over her head and should take time off, but she is determined to get in on the drug ring case.
Vincent and Sean are sent back to the scene of their crime. They pick up some evidence as Vincent and Jennifer meet for the first time. There is obvious tension between them as they both feel the need to take control of the case.
Vincent goes to the hospital to pick up his son Thomas (Octavius J. Johnson) for sports practice. Vincent finds out that his ex-wife Dena (Gabrielle Union) is engaged to another man. Both Dena and Thomas know Vincent has been distant since he took on the case, but they were never made aware of the case itself. Vincent is driving Thomas away when the two are ambushed on the parkway. Two men attack them, resulting in Thomas being snatched and Vincent getting stabbed in the abdomen. Almost immediately, Vincent receives a call from Rubino. He knows Vincent took the coke and demands that he bring it to the Luxus casino that he owns within three hours, or Novak will retaliate against Vincent and his family.
Sean finds Vincent tending to his wound. Vincent blows up on Sean and orders him to bring him the bag of coke before they are all in trouble.
Novak tortures his cousin, who is a DEA informant and one of the men that Vincent and Sean hit when they stole the coke. He has the man hung upside down with balls shot at him before Novak orders his goons to cut out his cousin's tongue.
Vincent brings the coke in a trash bag to the Luxus and puts it up in the ceiling over a stall in the men's bathroom. He goes upstairs to meet with Rubino to negotiate for Thomas's return. However, Jennifer arrives at the casino with her partner Doug Dennison (David Harbour). She goes knocking through the stalls when the bathroom attendant tells her that Vincent was going around there as well. Jennifer finds the bag and takes it to the women's locker room in the spa.
When it is discovered that the drugs are missing, Vincent tries to go find them himself. Meanwhile, Novak arrives at the casino and begins pressing Rubino for the coke or else Novak's father (who operates an even bigger crime circle) will have something to say about it.
Vincent brings Rubino a bag of sugar to fool them as they hand Thomas over to Vincent. They start making their way out of the casino when Novak learns that he was given sugar. One of Rubino's large thugs chases after Vincent and Thomas as they go down by the kitchen. Vincent's stab wound starts seeping, and he admits to his son that he is part of a large drug case. The thug then finds the two and starts fighting Vincent in the kitchen. Thomas attempts to intervene to help his father. Vincent subdues the thug by throwing him through a window into an office.
Vincent and Thomas try escaping through the club, but the thug re-captures Thomas. Dena continues to call Vincent as he tries to hide the fact that Thomas was taken from him while he continues to try and rescue him, though he does let her know he is at the Luxus.
Vincent poses as a hotel employee in order to get by unnoticed. He runs into Jennifer, who identifies him and goes after him. They have a fight in one of the rooms before Vincent cuffs Jennifer to the bed. He explains his involvement in the case and reveals he is IA, having been undercover for two years and having to keep it from his family.
Vincent goes to the locker room to find the bag, but it's gone from the locker. He is found by Dennison and starts a fight with him. Vincent knocks him out in the hot tub but pulls him out so he won't drown.
Thomas manages to get away since the bad guys left the door open. He takes Rubino's phone and contacts Vincent to let him know where he is. At the same time, Dena becomes aware that something bad is going on, so she leaves the hospital and rushes to the casino.
The thugs find Vincent and Thomas in the club once again. The big thug from earlier fights Vincent again as Novak starts shooting up the place. Vincent breaks off a champagne bottle and sticks the broken end in the thug's neck before getting himself and Thomas out of there.
In the parking garage, Vincent encounters Sean, who has learned that Vincent is IA. Another thug approaches them with a gun, leading to himself and Sean shooting each other. Vincent tries to wake Sean up, but he appears dead.
Vincent looks at Rubino's phone and sees a message from Dennison. He's on Novak's payroll and has informed his bosses that the drugs are missing and that Vincent could place them.
Jennifer and Dennison find the thug and Sean in the parking garage. Dennison goes to Sean, who is still alive. When Dennison asks Sean if Vincent knows of Dennison's involvement, Sean just tells him to go fuck himself. Dennison suffocates Sean to death while still lying to Jennifer.
Vincent and Thomas try to get out of the casino as the bad guys chase after them. Rubino tries to get away, but he is arrested by Jennifer, Dennison, and a group of other officers. Vincent and Thomas take a sports car from the lobby and drive into the garage as Novak straps up and puts on a mask. In the garage, Novak starts shooting tear gas canisters all around the place as Vincent and Thomas try to get away. More thugs come in, just as Dena shows up with her own gun. The thugs get killed before Novak has Vincent and his family cornered. Vincent steps out and tries to negotiate with Novak, but Novak shoots Vincent in the chest. Vincent falls to the ground and shoots Novak in the neck and heart, killing him.
Vincent manages to call Jennifer's phone and play back Dennison's voicemail so she can hear. Now that she knows the truth, she attempts to shoot Dennison, but he grabs her gun and shoots her first. He then kills Rubino and the driver, causing the car to flip over and crash. The other officers arrive and get Dennison out. He claims that Rubino went crazy and that he killed Jennifer, but she crawls out of the car and tells the other officers to arrest Dennison.
Vincent and Jennifer are both taken to the hospital. Both of them eventually wake up, with Dena and Thomas sitting by Vincent's bed. Jennifer goes to Vincent's room. He tells her she's a great cop.
The CSI team is sweeping up the garage where Novak and his thugs lie dead. Novak's phone rings, and it's his dad calling. A DEA agent on their payroll answers the phone and tells Novak's dad that there's been a problem.