hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/fs/orangefs/namei.c
....@@ -58,7 +58,6 @@
5858 goto out;
5959
6060 ref = new_op->downcall.resp.create.refn;
61
- op_release(new_op);
6261
6362 inode = orangefs_new_inode(dir->i_sb, dir, S_IFREG | mode, 0, &ref);
6463 if (IS_ERR(inode)) {
....@@ -77,21 +76,19 @@
7776
7877 d_instantiate_new(dentry, inode);
7978 orangefs_set_timeout(dentry);
80
- ORANGEFS_I(inode)->getattr_time = jiffies - 1;
81
- ORANGEFS_I(inode)->getattr_mask = STATX_BASIC_STATS;
8279
8380 gossip_debug(GOSSIP_NAME_DEBUG,
8481 "%s: dentry instantiated for %pd\n",
8582 __func__,
8683 dentry);
8784
88
- dir->i_mtime = dir->i_ctime = current_time(dir);
8985 memset(&iattr, 0, sizeof iattr);
90
- iattr.ia_valid |= ATTR_MTIME;
91
- orangefs_inode_setattr(dir, &iattr);
92
- mark_inode_dirty_sync(dir);
86
+ iattr.ia_valid |= ATTR_MTIME | ATTR_CTIME;
87
+ iattr.ia_mtime = iattr.ia_ctime = current_time(dir);
88
+ __orangefs_setattr(dir, &iattr);
9389 ret = 0;
9490 out:
91
+ op_release(new_op);
9592 gossip_debug(GOSSIP_NAME_DEBUG,
9693 "%s: %pd: returning %d\n",
9794 __func__,
....@@ -157,7 +154,7 @@
157154 new_op->downcall.resp.lookup.refn.fs_id,
158155 ret);
159156
160
- if (ret >= 0) {
157
+ if (ret == 0) {
161158 orangefs_set_timeout(dentry);
162159 inode = orangefs_iget(dir->i_sb, &new_op->downcall.resp.lookup.refn);
163160 } else if (ret == -ENOENT) {
....@@ -210,11 +207,10 @@
210207 if (!ret) {
211208 drop_nlink(inode);
212209
213
- dir->i_mtime = dir->i_ctime = current_time(dir);
214210 memset(&iattr, 0, sizeof iattr);
215
- iattr.ia_valid |= ATTR_MTIME;
216
- orangefs_inode_setattr(dir, &iattr);
217
- mark_inode_dirty_sync(dir);
211
+ iattr.ia_valid |= ATTR_MTIME | ATTR_CTIME;
212
+ iattr.ia_mtime = iattr.ia_ctime = current_time(dir);
213
+ __orangefs_setattr(dir, &iattr);
218214 }
219215 return ret;
220216 }
....@@ -228,7 +224,7 @@
228224 struct orangefs_object_kref ref;
229225 struct inode *inode;
230226 struct iattr iattr;
231
- int mode = 755;
227
+ int mode = 0755;
232228 int ret;
233229
234230 gossip_debug(GOSSIP_NAME_DEBUG, "%s: called\n", __func__);
....@@ -269,7 +265,6 @@
269265 }
270266
271267 ref = new_op->downcall.resp.sym.refn;
272
- op_release(new_op);
273268
274269 inode = orangefs_new_inode(dir->i_sb, dir, S_IFLNK | mode, 0, &ref);
275270 if (IS_ERR(inode)) {
....@@ -292,21 +287,19 @@
292287
293288 d_instantiate_new(dentry, inode);
294289 orangefs_set_timeout(dentry);
295
- ORANGEFS_I(inode)->getattr_time = jiffies - 1;
296
- ORANGEFS_I(inode)->getattr_mask = STATX_BASIC_STATS;
297290
298291 gossip_debug(GOSSIP_NAME_DEBUG,
299292 "Inode (Symlink) %pU -> %pd\n",
300293 get_khandle_from_ino(inode),
301294 dentry);
302295
303
- dir->i_mtime = dir->i_ctime = current_time(dir);
304296 memset(&iattr, 0, sizeof iattr);
305
- iattr.ia_valid |= ATTR_MTIME;
306
- orangefs_inode_setattr(dir, &iattr);
307
- mark_inode_dirty_sync(dir);
297
+ iattr.ia_valid |= ATTR_MTIME | ATTR_CTIME;
298
+ iattr.ia_mtime = iattr.ia_ctime = current_time(dir);
299
+ __orangefs_setattr(dir, &iattr);
308300 ret = 0;
309301 out:
302
+ op_release(new_op);
310303 return ret;
311304 }
312305
....@@ -346,7 +339,6 @@
346339 }
347340
348341 ref = new_op->downcall.resp.mkdir.refn;
349
- op_release(new_op);
350342
351343 inode = orangefs_new_inode(dir->i_sb, dir, S_IFDIR | mode, 0, &ref);
352344 if (IS_ERR(inode)) {
....@@ -361,8 +353,6 @@
361353
362354 d_instantiate_new(dentry, inode);
363355 orangefs_set_timeout(dentry);
364
- ORANGEFS_I(inode)->getattr_time = jiffies - 1;
365
- ORANGEFS_I(inode)->getattr_mask = STATX_BASIC_STATS;
366356
367357 gossip_debug(GOSSIP_NAME_DEBUG,
368358 "Inode (Directory) %pU -> %pd\n",
....@@ -373,12 +363,12 @@
373363 * NOTE: we have no good way to keep nlink consistent for directories
374364 * across clients; keep constant at 1.
375365 */
376
- dir->i_mtime = dir->i_ctime = current_time(dir);
377366 memset(&iattr, 0, sizeof iattr);
378
- iattr.ia_valid |= ATTR_MTIME;
379
- orangefs_inode_setattr(dir, &iattr);
380
- mark_inode_dirty_sync(dir);
367
+ iattr.ia_valid |= ATTR_MTIME | ATTR_CTIME;
368
+ iattr.ia_mtime = iattr.ia_ctime = current_time(dir);
369
+ __orangefs_setattr(dir, &iattr);
381370 out:
371
+ op_release(new_op);
382372 return ret;
383373 }
384374
....@@ -389,6 +379,7 @@
389379 unsigned int flags)
390380 {
391381 struct orangefs_kernel_op_s *new_op;
382
+ struct iattr iattr;
392383 int ret;
393384
394385 if (flags)
....@@ -398,7 +389,10 @@
398389 "orangefs_rename: called (%pd2 => %pd2) ct=%d\n",
399390 old_dentry, new_dentry, d_count(new_dentry));
400391
401
- ORANGEFS_I(new_dentry->d_parent->d_inode)->getattr_time = jiffies - 1;
392
+ memset(&iattr, 0, sizeof iattr);
393
+ iattr.ia_valid |= ATTR_MTIME | ATTR_CTIME;
394
+ iattr.ia_mtime = iattr.ia_ctime = current_time(new_dir);
395
+ __orangefs_setattr(new_dir, &iattr);
402396
403397 new_op = op_alloc(ORANGEFS_VFS_OP_RENAME);
404398 if (!new_op)