Tracking Device Using Arduino UNO, GSM and GPS
void loop() {
    ....
    loop();
    ....
}


That's an instant death warrant right there. You can kiss your stack goodbye as it crashes mercilessly into your heap. Never ever ever call loop() from anywhere. 

Your decision as to whether or not to get the GPS data is completely flawed. It will run the function once when it finds "Staff" and never again (unless it sees "Staff" again on serial). It doesn't keep finding the same thing over and over again unless you keep sending it over and over again.

And come to that - how exactly are you sending "Staff" and "Stop" through GSM? I assume by SMS message, however I see no code there to actively retrieve the SMS messages from the SIM. So you'll never see anything anyway.

You need to completely re-think your whole program methodology:


Look for new SMS messages
If any exist then read one and delete it.
If the message contained "Staff" then enable sending mode. If the message contained "Stop" then disable sending mode.
If sending mode is enabled and enough time has passed since the last sending then get the GPS data and send it.


You notice the sending of the GPS data is separated from the SMS reception. It's not the reception of the SMS that controls the GSM but the "mode" your program is running in. The SMS just controls that mode.

This is a crude form of Finite State Machine.