It never works when I needed it either. Use fuser and/or lsof to find out which process still has a file open on that FS and try to stop that process 1st.
To list the process numbers of local processes using the /etc/passwd file, enter:
fuser /etc/passwd
To list the process numbers and user login names of processes using the /etc/filesystems file, enter:
fuser -u /etc/filesystems
To terminate all of the processes using a given file system, enter:
fuser -k -x -u -c /dev/hd1
or
fuser -kxuc /home
Either command lists the process number and user name, and then terminates each process that is using the /dev/hd1 (/home) file system. Only the root user can terminate processes that belong to another user. You might want to use this command if you are trying to unmount the /dev/hd1 file system and a process that is accessing the /dev/hd1 file system prevents this.
To list all processes that are using a file which has been deleted from a given file system, enter:
fuser -d /usr
and for AIX lsof see here IBM Developer+AIX+lsof&cd=1&hl=en&ct=clnk