If you ever have encountered a problem that you are unable to write the extended fuse or efuse to any AVR microcontroller with USBasp ISP programmer and ProgISP, there's a solution for that. It happens because of the outdated firmware existing on your USBasp AVR programmer. Updating the firmware to the latest version can fix this problem.
When you have this problem, you will be able to configure low fuse (lfuse), high fuse (hfuse) and lock bits. But you won't be able to write the extended fuse byte. Even if you try to write the efuse, ProgISP will tell it was written succesfully. But when you try to read the efuse again, it would not have changed. But for some reason, avrdude version 6.3 was able to set all the fuses correctly and I was able to verify them through ProgISP. I encountered this problem when trying to write fuses on an ATmega32U4 microcontroller. Some microcontrollers such as the ATmega8/8A used in some Arduino boards do not have this fuse byte.
The solution was to update the USBasp firmware. I thought my new programmer that claims itself as "version 2.0" had the latest firmware. Anyway you can download the latest firmware in binary format from the official website https://www.fischl.de/usbasp/
The USBasp programmers you can buy from many sites will be coming with old firmware. So it's a good idea to update the firmware once you have it. You can update the firmware with a second USBasp programmer or you can use an Arduino board as an ISP programmer.