fs.c void iunlock(struct inode *ip)

トップページ
jupiteroak.hatenablog.com


fs.c
https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L315

void iunlock(struct inode *ip)
{
  if(ip == 0 || !holdingsleep(&ip->lock) || ip->ref < 1)
    panic("iunlock");

  releasesleep(&ip->lock);
}

iunlock関数は、引数で渡されたiノードのスリープロックを解放します。

引数 struct inode *ip
操作対象となるiノードのアドレスです。


処理の内容

不正なiノードではないことを確認する

if(ip == 0 || !holdingsleep(&ip->lock) || ip->ref < 1)
    panic("iunlock");

①引数ipで指定されたiノードが存在しない、または、②現在実行中のプロセスがiノードに関連しているスリープロックを保持していない、または、③iノードの参照回数が0の場合は、panic関数を呼び出してメッセージを出力します。

スリープロックを解放する

releasesleep(&ip->lock);

releasesleep関数を呼び出して、iノードに関連しているスリープロックを解放します。