hc
2023-11-07 5e8555e3ea324daaf0e38422bcba48c4df33a0d9
kernel/fs/nfs/dir.c
....@@ -457,7 +457,7 @@
457457 void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry)
458458 {
459459 struct qstr filename = QSTR_INIT(entry->name, entry->len);
460
- DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
460
+ DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq);
461461 struct dentry *dentry;
462462 struct dentry *alias;
463463 struct inode *dir = d_inode(parent);
....@@ -1520,7 +1520,7 @@
15201520 struct file *file, unsigned open_flags,
15211521 umode_t mode)
15221522 {
1523
- DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
1523
+ DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq);
15241524 struct nfs_open_context *ctx;
15251525 struct dentry *res;
15261526 struct iattr attr = { .ia_valid = ATTR_OPEN };
....@@ -1858,7 +1858,11 @@
18581858
18591859 trace_nfs_rmdir_enter(dir, dentry);
18601860 if (d_really_is_positive(dentry)) {
1861
+#ifdef CONFIG_PREEMPT_RT_BASE
1862
+ down(&NFS_I(d_inode(dentry))->rmdir_sem);
1863
+#else
18611864 down_write(&NFS_I(d_inode(dentry))->rmdir_sem);
1865
+#endif
18621866 error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name);
18631867 /* Ensure the VFS deletes this inode */
18641868 switch (error) {
....@@ -1868,7 +1872,11 @@
18681872 case -ENOENT:
18691873 nfs_dentry_handle_enoent(dentry);
18701874 }
1875
+#ifdef CONFIG_PREEMPT_RT_BASE
1876
+ up(&NFS_I(d_inode(dentry))->rmdir_sem);
1877
+#else
18711878 up_write(&NFS_I(d_inode(dentry))->rmdir_sem);
1879
+#endif
18721880 } else
18731881 error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name);
18741882 trace_nfs_rmdir_exit(dir, dentry, error);