Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1456363 > unrolled thread
| Started by | Chao Yu <yuchao0@huawei.com> |
|---|---|
| First post | 2016-08-04 14:20 +0200 |
| Last post | 2016-08-04 14:20 +0200 |
| Articles | 1 — 1 participant |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 2/2] f2fs: avoid potential deadlock in f2fs_move_file_range Chao Yu <yuchao0@huawei.com> - 2016-08-04 14:20 +0200
| From | Chao Yu <yuchao0@huawei.com> |
|---|---|
| Date | 2016-08-04 14:20 +0200 |
| Subject | [PATCH 2/2] f2fs: avoid potential deadlock in f2fs_move_file_range |
| Message-ID | <s2pMZ-qc-1@gated-at.bofh.it> |
Thread A Thread B
- inode_lock fileA
- inode_lock fileB
- inode_lock fileA
- inode_lock fileB
We may encounter above potential deadlock during moving file range in
concurrent scenario. This patch fixes the issue by using inode_trylock
instead.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
fs/f2fs/file.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 409f0ec..ebf2703 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -2169,8 +2169,12 @@ static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
return -EOPNOTSUPP;
inode_lock(src);
- if (src != dst)
- inode_lock(dst);
+ if (src != dst) {
+ if (!inode_trylock(dst)) {
+ ret = -EBUSY;
+ goto out;
+ }
+ }
ret = -EINVAL;
if (pos_in + len > src->i_size || pos_in + len < pos_in)
@@ -2228,6 +2232,7 @@ static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
out_unlock:
if (src != dst)
inode_unlock(dst);
+out:
inode_unlock(src);
return ret;
}
--
2.8.2.311.gee88674
Back to top | Article view | linux.kernel
csiph-web