@jigold First, with some odds and ends -
When you update an existing VM with a new disk configuration, it will attempt to update the VM with whatever that new configuration is. While the VM is updating to the new configuration, the VM will be in the 'updating' state, and the update operation will not complete. I am not sure if a global lock is needed, but a lock for each VM will work as well.
The approach you are taking looks good and should work, but keep in mind that the LUN on your VM object might not line up with the LUN on your OS. For troubleshooting failures, look at the failed operation and try to see what the VM's configuration was before & after the operation, along with the configuration you are passing. You should be able to find an inconsistency with the two.
If your VMs are not properly updating to a desired state and not giving a proper error, you can speak with support to see what is happening.