I have to support pushd and popd from userspace in a filesystem that I have designed.

In my filesystem driver, to implement it I have done the following 

for popd - the driver implementation is 
https://github.com/disdi/hepunion/blob/master/fs/hepunion/hepunion.h#L386
#define pop_root() \
current->fsuid = context->uid; \
current->fsgid = context->gid; \
recursive_mutex_unlock(&context->id_lock)


for pushd - the driver implementation is 
https://github.com/disdi/hepunion/blob/master/fs/hepunion/hepunion.h#L393
#define push_root() \
recursive_mutex_lock(&context->id_lock); \
context->uid = current->fsuid; \
context->gid = current->fsgid; \
current->fsuid = 0; \
current->fsgid = 0


But this implementation is failing at run time.
This is the script with which I am testing this driver. All pushd and propd are not working in this script.

After trying many other alternatives, I think overriding commits would be a better choice. So then I would try overriding commits as the below link
http://lxr.free-electrons.com/source/fs/open.c?v=3.8#L312

Regards,
Saket Sinha
Can somebody help