| .. | .. |
|---|
| 13 | 13 | #include <linux/sunrpc/clnt.h> |
|---|
| 14 | 14 | #include <linux/nfs_fs.h> |
|---|
| 15 | 15 | #include <linux/sched.h> |
|---|
| 16 | | -#include <linux/wait.h> |
|---|
| 16 | +#include <linux/swait.h> |
|---|
| 17 | 17 | #include <linux/namei.h> |
|---|
| 18 | 18 | #include <linux/fsnotify.h> |
|---|
| 19 | 19 | |
|---|
| .. | .. |
|---|
| 52 | 52 | rpc_restart_call_prepare(task); |
|---|
| 53 | 53 | } |
|---|
| 54 | 54 | |
|---|
| 55 | +#ifdef CONFIG_PREEMPT_RT_BASE |
|---|
| 56 | +static void nfs_down_anon(struct semaphore *sema) |
|---|
| 57 | +{ |
|---|
| 58 | + down(sema); |
|---|
| 59 | +} |
|---|
| 60 | + |
|---|
| 61 | +static void nfs_up_anon(struct semaphore *sema) |
|---|
| 62 | +{ |
|---|
| 63 | + up(sema); |
|---|
| 64 | +} |
|---|
| 65 | + |
|---|
| 66 | +#else |
|---|
| 67 | +static void nfs_down_anon(struct rw_semaphore *rwsem) |
|---|
| 68 | +{ |
|---|
| 69 | + down_read_non_owner(rwsem); |
|---|
| 70 | +} |
|---|
| 71 | + |
|---|
| 72 | +static void nfs_up_anon(struct rw_semaphore *rwsem) |
|---|
| 73 | +{ |
|---|
| 74 | + up_read_non_owner(rwsem); |
|---|
| 75 | +} |
|---|
| 76 | +#endif |
|---|
| 77 | + |
|---|
| 55 | 78 | /** |
|---|
| 56 | 79 | * nfs_async_unlink_release - Release the sillydelete data. |
|---|
| 57 | 80 | * @task: rpc_task of the sillydelete |
|---|
| .. | .. |
|---|
| 65 | 88 | struct dentry *dentry = data->dentry; |
|---|
| 66 | 89 | struct super_block *sb = dentry->d_sb; |
|---|
| 67 | 90 | |
|---|
| 68 | | - up_read_non_owner(&NFS_I(d_inode(dentry->d_parent))->rmdir_sem); |
|---|
| 91 | + nfs_up_anon(&NFS_I(d_inode(dentry->d_parent))->rmdir_sem); |
|---|
| 69 | 92 | d_lookup_done(dentry); |
|---|
| 70 | 93 | nfs_free_unlinkdata(data); |
|---|
| 71 | 94 | dput(dentry); |
|---|
| .. | .. |
|---|
| 118 | 141 | struct inode *dir = d_inode(dentry->d_parent); |
|---|
| 119 | 142 | struct dentry *alias; |
|---|
| 120 | 143 | |
|---|
| 121 | | - down_read_non_owner(&NFS_I(dir)->rmdir_sem); |
|---|
| 144 | + nfs_down_anon(&NFS_I(dir)->rmdir_sem); |
|---|
| 122 | 145 | alias = d_alloc_parallel(dentry->d_parent, &data->args.name, &data->wq); |
|---|
| 123 | 146 | if (IS_ERR(alias)) { |
|---|
| 124 | | - up_read_non_owner(&NFS_I(dir)->rmdir_sem); |
|---|
| 147 | + nfs_up_anon(&NFS_I(dir)->rmdir_sem); |
|---|
| 125 | 148 | return 0; |
|---|
| 126 | 149 | } |
|---|
| 127 | 150 | if (!d_in_lookup(alias)) { |
|---|
| .. | .. |
|---|
| 143 | 166 | ret = 0; |
|---|
| 144 | 167 | spin_unlock(&alias->d_lock); |
|---|
| 145 | 168 | dput(alias); |
|---|
| 146 | | - up_read_non_owner(&NFS_I(dir)->rmdir_sem); |
|---|
| 169 | + nfs_up_anon(&NFS_I(dir)->rmdir_sem); |
|---|
| 147 | 170 | /* |
|---|
| 148 | 171 | * If we'd displaced old cached devname, free it. At that |
|---|
| 149 | 172 | * point dentry is definitely not a root, so we won't need |
|---|
| .. | .. |
|---|
| 183 | 206 | goto out_free_name; |
|---|
| 184 | 207 | } |
|---|
| 185 | 208 | data->res.dir_attr = &data->dir_attr; |
|---|
| 186 | | - init_waitqueue_head(&data->wq); |
|---|
| 209 | + init_swait_queue_head(&data->wq); |
|---|
| 187 | 210 | |
|---|
| 188 | 211 | status = -EBUSY; |
|---|
| 189 | 212 | spin_lock(&dentry->d_lock); |
|---|