编辑文件abcd (Vim abcd) ganesha执行过程分析:
1._OP_LOOKUP abcd 返回 NFS4ERR_NOENT 正常
2.执行_OP_OPEN .abcd.swp(OPEN4_NOCREATE),(返回一次fsal_lookup失败)返回NFS4ERR_NOENT 正常
因为在open4_ex中判断arg->openhow.opentype != OPEN4_CREATE(此处为OPEN4_NOCREATE)所以比第3步提前退出。
3.再次执行_OP_OPEN .abcd.swp(OPEN4_CREATE),(返回两次lookup失败)打开成功。
前面执行流程与第二步骤一样,所以这里会lookuo失败两次。
4.执行_OP_OPEN .abcd.swpx,(返回一次fsal_lookup失败)返回NFS4ERR_NOENT 正常
5.再次执行_OP_OPEN .abcd.swpx,(返回两次lookup失败)打开成功
6.Remove .abcd.swpx 正常
7.Lookup .abcd.spwx 返回NFS4ERR_NOENT 正常
8.Remove .abcd.swp 正常
9.Lookup .abcd.spx 返回NFS4ERR_NOENT 正常
注:
执性open两次区别:opetype第一次OPEN4_NOCREATE,第二次OPEN4_CREATE
Vim 过程2:中途会删除.swpx .swp文件
CREATE-/home/mnt2/.abcd.swp
CREATE-/home/mnt2/.abcd.swpx
DELETE-/home/mnt2/.abcd.swpx
DELETE-/home/mnt2/.abcd.swp
CREATE-/home/mnt2/.abcd.swp
MODIFY-/home/mnt2/.abcd.swp
MODIFY-/home/mnt2/.abcd.swp
测试脚本:
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' --event modify,delete,create,attrib /home/mnt2 | while read date time file event
do
case $event in
MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
echo $event'-'$file
;;
MOVED_FROM|MOVED_FROM,ISDIR|DELETE|DELETE,ISDIR)
echo $event'-'$file
;;
esac
done