diff options
author | trz <trz> | 2006-09-21 21:19:06 +0000 |
---|---|---|
committer | trz <trz> | 2006-09-21 21:19:06 +0000 |
commit | 77c3c4b3a6065638ddf6a6ec45b9694fff40bc0a (patch) | |
tree | 625a24acc417adc58bfe6dedd63637f7cefc52c3 /runtime/transport/relayfs.c | |
parent | 8abe0c138937e37b9efd93a8ace12f960e38c010 (diff) | |
download | systemtap-steved-77c3c4b3a6065638ddf6a6ec45b9694fff40bc0a.tar.gz systemtap-steved-77c3c4b3a6065638ddf6a6ec45b9694fff40bc0a.tar.xz systemtap-steved-77c3c4b3a6065638ddf6a6ec45b9694fff40bc0a.zip |
Use semaphore if mutex not available
Diffstat (limited to 'runtime/transport/relayfs.c')
-rw-r--r-- | runtime/transport/relayfs.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/runtime/transport/relayfs.c b/runtime/transport/relayfs.c index defe0087..1b616b7e 100644 --- a/runtime/transport/relayfs.c +++ b/runtime/transport/relayfs.c @@ -137,6 +137,24 @@ static void _stp_remove_relay_dir(struct dentry *dir) #endif } +static inline void _stp_lock_inode(struct inode *inode) +{ +#ifdef DEFINE_MUTEX + mutex_lock(&inode->i_mutex); +#else + down(&inode->i_sem); +#endif +} + +static inline void _stp_unlock_inode(struct inode *inode) +{ +#ifdef DEFINE_MUTEX + mutex_unlock(&inode->i_mutex); +#else + up(&inode->i_sem); +#endif +} + static struct dentry *_stp_get_relay_root(void) { struct file_system_type *fs; @@ -157,9 +175,9 @@ static struct dentry *_stp_get_relay_root(void) return NULL; sb = list_entry(fs->fs_supers.next, struct super_block, s_instances); - mutex_lock(&sb->s_root->d_inode->i_mutex); + _stp_lock_inode(sb->s_root->d_inode); root = lookup_one_len(dirname, sb->s_root, strlen(dirname)); - mutex_unlock(&sb->s_root->d_inode->i_mutex); + _stp_unlock_inode(sb->s_root->d_inode); if (!IS_ERR(root)) dput(root); |