*/
 struct affs_inode_info {
        atomic_t i_opencnt;
-       struct semaphore i_link_lock;           /* Protects internal inode access. */
-       struct semaphore i_ext_lock;            /* Protects internal inode access. */
+       struct mutex i_link_lock;               /* Protects internal inode access. */
+       struct mutex i_ext_lock;                /* Protects internal inode access. */
 #define i_hash_lock i_ext_lock
        u32      i_blkcnt;                      /* block count */
        u32      i_extcnt;                      /* extended block count */
 static inline void
 affs_lock_link(struct inode *inode)
 {
-       down(&AFFS_I(inode)->i_link_lock);
+       mutex_lock(&AFFS_I(inode)->i_link_lock);
 }
 static inline void
 affs_unlock_link(struct inode *inode)
 {
-       up(&AFFS_I(inode)->i_link_lock);
+       mutex_unlock(&AFFS_I(inode)->i_link_lock);
 }
 static inline void
 affs_lock_dir(struct inode *inode)
 {
-       down(&AFFS_I(inode)->i_hash_lock);
+       mutex_lock_nested(&AFFS_I(inode)->i_hash_lock, SINGLE_DEPTH_NESTING);
 }
 static inline void
 affs_unlock_dir(struct inode *inode)
 {
-       up(&AFFS_I(inode)->i_hash_lock);
+       mutex_unlock(&AFFS_I(inode)->i_hash_lock);
 }
 static inline void
 affs_lock_ext(struct inode *inode)
 {
-       down(&AFFS_I(inode)->i_ext_lock);
+       mutex_lock(&AFFS_I(inode)->i_ext_lock);
 }
 static inline void
 affs_unlock_ext(struct inode *inode)
 {
-       up(&AFFS_I(inode)->i_ext_lock);
+       mutex_unlock(&AFFS_I(inode)->i_ext_lock);
 }
 
 {
        struct affs_inode_info *ei = (struct affs_inode_info *) foo;
 
-       sema_init(&ei->i_link_lock, 1);
-       sema_init(&ei->i_ext_lock, 1);
+       mutex_init(&ei->i_link_lock);
+       mutex_init(&ei->i_ext_lock);
        inode_init_once(&ei->vfs_inode);
 }