.. | .. |
---|
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); |
---|