Skip to content

Commit 4ef51e8

Browse files
author
Al Viro
committed
Merge branch 'for-linus' into for-next
2 parents b853a16 + e4f9551 commit 4ef51e8

File tree

9 files changed

+85
-79
lines changed

9 files changed

+85
-79
lines changed

fs/dcache.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,13 +1239,13 @@ static void d_walk(struct dentry *parent, void *data,
12391239
/* might go back up the wrong parent if we have had a rename. */
12401240
if (need_seqretry(&rename_lock, seq))
12411241
goto rename_retry;
1242-
next = child->d_child.next;
1243-
while (unlikely(child->d_flags & DCACHE_DENTRY_KILLED)) {
1242+
/* go into the first sibling still alive */
1243+
do {
1244+
next = child->d_child.next;
12441245
if (next == &this_parent->d_subdirs)
12451246
goto ascend;
12461247
child = list_entry(next, struct dentry, d_child);
1247-
next = next->next;
1248-
}
1248+
} while (unlikely(child->d_flags & DCACHE_DENTRY_KILLED));
12491249
rcu_read_unlock();
12501250
goto resume;
12511251
}

fs/ncpfs/dir.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,6 +1145,8 @@ static int ncp_rename(struct inode *old_dir, struct dentry *old_dentry,
11451145
case 0x00:
11461146
ncp_dbg(1, "renamed %pd -> %pd\n",
11471147
old_dentry, new_dentry);
1148+
ncp_d_prune(old_dentry);
1149+
ncp_d_prune(new_dentry);
11481150
break;
11491151
case 0x9E:
11501152
error = -ENAMETOOLONG;

fs/ufs/balloc.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ void ufs_free_fragments(struct inode *inode, u64 fragment, unsigned count)
5151

5252
if (ufs_fragnum(fragment) + count > uspi->s_fpg)
5353
ufs_error (sb, "ufs_free_fragments", "internal error");
54-
55-
lock_ufs(sb);
54+
55+
mutex_lock(&UFS_SB(sb)->s_lock);
5656

5757
cgno = ufs_dtog(uspi, fragment);
5858
bit = ufs_dtogd(uspi, fragment);
@@ -115,13 +115,13 @@ void ufs_free_fragments(struct inode *inode, u64 fragment, unsigned count)
115115
if (sb->s_flags & MS_SYNCHRONOUS)
116116
ubh_sync_block(UCPI_UBH(ucpi));
117117
ufs_mark_sb_dirty(sb);
118-
119-
unlock_ufs(sb);
118+
119+
mutex_unlock(&UFS_SB(sb)->s_lock);
120120
UFSD("EXIT\n");
121121
return;
122122

123123
failed:
124-
unlock_ufs(sb);
124+
mutex_unlock(&UFS_SB(sb)->s_lock);
125125
UFSD("EXIT (FAILED)\n");
126126
return;
127127
}
@@ -151,7 +151,7 @@ void ufs_free_blocks(struct inode *inode, u64 fragment, unsigned count)
151151
goto failed;
152152
}
153153

154-
lock_ufs(sb);
154+
mutex_lock(&UFS_SB(sb)->s_lock);
155155

156156
do_more:
157157
overflow = 0;
@@ -211,12 +211,12 @@ void ufs_free_blocks(struct inode *inode, u64 fragment, unsigned count)
211211
}
212212

213213
ufs_mark_sb_dirty(sb);
214-
unlock_ufs(sb);
214+
mutex_unlock(&UFS_SB(sb)->s_lock);
215215
UFSD("EXIT\n");
216216
return;
217217

218218
failed_unlock:
219-
unlock_ufs(sb);
219+
mutex_unlock(&UFS_SB(sb)->s_lock);
220220
failed:
221221
UFSD("EXIT (FAILED)\n");
222222
return;
@@ -357,7 +357,7 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
357357
usb1 = ubh_get_usb_first(uspi);
358358
*err = -ENOSPC;
359359

360-
lock_ufs(sb);
360+
mutex_lock(&UFS_SB(sb)->s_lock);
361361
tmp = ufs_data_ptr_to_cpu(sb, p);
362362

363363
if (count + ufs_fragnum(fragment) > uspi->s_fpb) {
@@ -378,19 +378,19 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
378378
"fragment %llu, tmp %llu\n",
379379
(unsigned long long)fragment,
380380
(unsigned long long)tmp);
381-
unlock_ufs(sb);
381+
mutex_unlock(&UFS_SB(sb)->s_lock);
382382
return INVBLOCK;
383383
}
384384
if (fragment < UFS_I(inode)->i_lastfrag) {
385385
UFSD("EXIT (ALREADY ALLOCATED)\n");
386-
unlock_ufs(sb);
386+
mutex_unlock(&UFS_SB(sb)->s_lock);
387387
return 0;
388388
}
389389
}
390390
else {
391391
if (tmp) {
392392
UFSD("EXIT (ALREADY ALLOCATED)\n");
393-
unlock_ufs(sb);
393+
mutex_unlock(&UFS_SB(sb)->s_lock);
394394
return 0;
395395
}
396396
}
@@ -399,7 +399,7 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
399399
* There is not enough space for user on the device
400400
*/
401401
if (!capable(CAP_SYS_RESOURCE) && ufs_freespace(uspi, UFS_MINFREE) <= 0) {
402-
unlock_ufs(sb);
402+
mutex_unlock(&UFS_SB(sb)->s_lock);
403403
UFSD("EXIT (FAILED)\n");
404404
return 0;
405405
}
@@ -424,7 +424,7 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
424424
ufs_clear_frags(inode, result + oldcount,
425425
newcount - oldcount, locked_page != NULL);
426426
}
427-
unlock_ufs(sb);
427+
mutex_unlock(&UFS_SB(sb)->s_lock);
428428
UFSD("EXIT, result %llu\n", (unsigned long long)result);
429429
return result;
430430
}
@@ -439,7 +439,7 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
439439
fragment + count);
440440
ufs_clear_frags(inode, result + oldcount, newcount - oldcount,
441441
locked_page != NULL);
442-
unlock_ufs(sb);
442+
mutex_unlock(&UFS_SB(sb)->s_lock);
443443
UFSD("EXIT, result %llu\n", (unsigned long long)result);
444444
return result;
445445
}
@@ -477,15 +477,15 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
477477
*err = 0;
478478
UFS_I(inode)->i_lastfrag = max(UFS_I(inode)->i_lastfrag,
479479
fragment + count);
480-
unlock_ufs(sb);
480+
mutex_unlock(&UFS_SB(sb)->s_lock);
481481
if (newcount < request)
482482
ufs_free_fragments (inode, result + newcount, request - newcount);
483483
ufs_free_fragments (inode, tmp, oldcount);
484484
UFSD("EXIT, result %llu\n", (unsigned long long)result);
485485
return result;
486486
}
487487

488-
unlock_ufs(sb);
488+
mutex_unlock(&UFS_SB(sb)->s_lock);
489489
UFSD("EXIT (FAILED)\n");
490490
return 0;
491491
}

fs/ufs/dir.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ ino_t ufs_inode_by_name(struct inode *dir, const struct qstr *qstr)
8787

8888
/* Releases the page */
8989
void ufs_set_link(struct inode *dir, struct ufs_dir_entry *de,
90-
struct page *page, struct inode *inode)
90+
struct page *page, struct inode *inode,
91+
bool update_times)
9192
{
9293
loff_t pos = page_offset(page) +
9394
(char *) de - (char *) page_address(page);
@@ -103,7 +104,8 @@ void ufs_set_link(struct inode *dir, struct ufs_dir_entry *de,
103104

104105
err = ufs_commit_chunk(page, pos, len);
105106
ufs_put_page(page);
106-
dir->i_mtime = dir->i_ctime = CURRENT_TIME_SEC;
107+
if (update_times)
108+
dir->i_mtime = dir->i_ctime = CURRENT_TIME_SEC;
107109
mark_inode_dirty(dir);
108110
}
109111

fs/ufs/ialloc.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,19 +69,19 @@ void ufs_free_inode (struct inode * inode)
6969

7070
ino = inode->i_ino;
7171

72-
lock_ufs(sb);
72+
mutex_lock(&UFS_SB(sb)->s_lock);
7373

7474
if (!((ino > 1) && (ino < (uspi->s_ncg * uspi->s_ipg )))) {
7575
ufs_warning(sb, "ufs_free_inode", "reserved inode or nonexistent inode %u\n", ino);
76-
unlock_ufs(sb);
76+
mutex_unlock(&UFS_SB(sb)->s_lock);
7777
return;
7878
}
7979

8080
cg = ufs_inotocg (ino);
8181
bit = ufs_inotocgoff (ino);
8282
ucpi = ufs_load_cylinder (sb, cg);
8383
if (!ucpi) {
84-
unlock_ufs(sb);
84+
mutex_unlock(&UFS_SB(sb)->s_lock);
8585
return;
8686
}
8787
ucg = ubh_get_ucg(UCPI_UBH(ucpi));
@@ -115,7 +115,7 @@ void ufs_free_inode (struct inode * inode)
115115
ubh_sync_block(UCPI_UBH(ucpi));
116116

117117
ufs_mark_sb_dirty(sb);
118-
unlock_ufs(sb);
118+
mutex_unlock(&UFS_SB(sb)->s_lock);
119119
UFSD("EXIT\n");
120120
}
121121

@@ -193,7 +193,7 @@ struct inode *ufs_new_inode(struct inode *dir, umode_t mode)
193193
sbi = UFS_SB(sb);
194194
uspi = sbi->s_uspi;
195195

196-
lock_ufs(sb);
196+
mutex_lock(&sbi->s_lock);
197197

198198
/*
199199
* Try to place the inode in its parent directory
@@ -331,21 +331,21 @@ struct inode *ufs_new_inode(struct inode *dir, umode_t mode)
331331
sync_dirty_buffer(bh);
332332
brelse(bh);
333333
}
334-
unlock_ufs(sb);
334+
mutex_unlock(&sbi->s_lock);
335335

336336
UFSD("allocating inode %lu\n", inode->i_ino);
337337
UFSD("EXIT\n");
338338
return inode;
339339

340340
fail_remove_inode:
341-
unlock_ufs(sb);
341+
mutex_unlock(&sbi->s_lock);
342342
clear_nlink(inode);
343343
unlock_new_inode(inode);
344344
iput(inode);
345345
UFSD("EXIT (FAILED): err %d\n", err);
346346
return ERR_PTR(err);
347347
failed:
348-
unlock_ufs(sb);
348+
mutex_unlock(&sbi->s_lock);
349349
make_bad_inode(inode);
350350
iput (inode);
351351
UFSD("EXIT (FAILED): err %d\n", err);

fs/ufs/inode.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -903,6 +903,9 @@ void ufs_evict_inode(struct inode * inode)
903903
invalidate_inode_buffers(inode);
904904
clear_inode(inode);
905905

906-
if (want_delete)
906+
if (want_delete) {
907+
lock_ufs(inode->i_sb);
907908
ufs_free_inode(inode);
909+
unlock_ufs(inode->i_sb);
910+
}
908911
}

0 commit comments

Comments
 (0)