Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1307536 > unrolled thread
| Started by | Geliang Tang <geliangtang@163.com> |
|---|---|
| First post | 2016-01-12 16:30 +0100 |
| Last post | 2016-01-13 15:10 +0100 |
| Articles | 4 — 2 participants |
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.
Re: [kdave:misc-cleanups-4.5 9/9] fs/btrfs/backref.c:565:1-20: iterator with update on line 577 Geliang Tang <geliangtang@163.com> - 2016-01-12 16:30 +0100
[PATCH v3] btrfs: use list_for_each_entry* in backref.c Geliang Tang <geliangtang@163.com> - 2016-01-12 16:30 +0100
Re: [PATCH v3] btrfs: use list_for_each_entry* in backref.c David Sterba <dsterba@suse.cz> - 2016-01-12 19:20 +0100
[PATCH] btrfs: fix iterator with update error in backref.c Geliang Tang <geliangtang@163.com> - 2016-01-13 15:10 +0100
| From | Geliang Tang <geliangtang@163.com> |
|---|---|
| Date | 2016-01-12 16:30 +0100 |
| Subject | Re: [kdave:misc-cleanups-4.5 9/9] fs/btrfs/backref.c:565:1-20: iterator with update on line 577 |
| Message-ID | <qQ93s-2Pd-13@gated-at.bofh.it> |
On Tue, Jan 12, 2016 at 07:07:24AM +0100, Julia Lawall wrote: > I really have no idea if this is safe or not. > > julia > > On Tue, 12 Jan 2016, kbuild test robot wrote: > > > CC: kbuild-all@01.org > > TO: Geliang Tang <geliangtang@163.com> > > CC: David Sterba <dsterba@suse.com> > > > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux misc-cleanups-4.5 > > head: a7ca42256d9fad572fb7f2c471514d7d3572b1db > > commit: a7ca42256d9fad572fb7f2c471514d7d3572b1db [9/9] btrfs: use list_for_each_entry* in backref.c > > :::::: branch date: 5 days ago > > :::::: commit date: 5 days ago > > > > >> fs/btrfs/backref.c:565:1-20: iterator with update on line 577 Sorry for the trouble caused. It's probably unsafe. I updated my patch to fix this problem. - Geliang Geliang Tang (1): btrfs: use list_for_each_entry* in backref.c fs/btrfs/backref.c | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) -- 2.5.0
[toc] | [next] | [standalone]
| From | Geliang Tang <geliangtang@163.com> |
|---|---|
| Date | 2016-01-12 16:30 +0100 |
| Subject | [PATCH v3] btrfs: use list_for_each_entry* in backref.c |
| Message-ID | <qQ93s-2Pd-23@gated-at.bofh.it> |
| In reply to | #1307536 |
Use list_for_each_entry*() to simplify the code.
Signed-off-by: Geliang Tang <geliangtang@163.com>
---
Changes in v3:
- fix 'fs/btrfs/backref.c:565:1-20: iterator with update on line 577'
Changes in v2:
- Use list_for_each_entry_safe_continue() in __merge_refs().
---
fs/btrfs/backref.c | 25 +++++++------------------
1 file changed, 7 insertions(+), 18 deletions(-)
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c
index d453d62..b90cd37 100644
--- a/fs/btrfs/backref.c
+++ b/fs/btrfs/backref.c
@@ -520,13 +520,10 @@ static inline int ref_for_same_block(struct __prelim_ref *ref1,
static int __add_missing_keys(struct btrfs_fs_info *fs_info,
struct list_head *head)
{
- struct list_head *pos;
+ struct __prelim_ref *ref;
struct extent_buffer *eb;
- list_for_each(pos, head) {
- struct __prelim_ref *ref;
- ref = list_entry(pos, struct __prelim_ref, list);
-
+ list_for_each_entry(ref, head, list) {
if (ref->parent)
continue;
if (ref->key_for_search.type)
@@ -563,23 +560,15 @@ static int __add_missing_keys(struct btrfs_fs_info *fs_info,
*/
static void __merge_refs(struct list_head *head, int mode)
{
- struct list_head *pos1;
+ struct __prelim_ref *pos1;
- list_for_each(pos1, head) {
- struct list_head *n2;
- struct list_head *pos2;
- struct __prelim_ref *ref1;
+ list_for_each_entry(pos1, head, list) {
+ struct __prelim_ref *pos2 = pos1, *tmp;
- ref1 = list_entry(pos1, struct __prelim_ref, list);
-
- for (pos2 = pos1->next, n2 = pos2->next; pos2 != head;
- pos2 = n2, n2 = pos2->next) {
- struct __prelim_ref *ref2;
- struct __prelim_ref *xchg;
+ list_for_each_entry_safe_continue(pos2, tmp, head, list) {
+ struct __prelim_ref *xchg, *ref1 = pos1, *ref2 = pos2;
struct extent_inode_elem *eie;
- ref2 = list_entry(pos2, struct __prelim_ref, list);
-
if (!ref_for_same_block(ref1, ref2))
continue;
if (mode == 1) {
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | David Sterba <dsterba@suse.cz> |
|---|---|
| Date | 2016-01-12 19:20 +0100 |
| Subject | Re: [PATCH v3] btrfs: use list_for_each_entry* in backref.c |
| Message-ID | <qQbHZ-4HB-29@gated-at.bofh.it> |
| In reply to | #1307538 |
On Tue, Jan 12, 2016 at 11:23:16PM +0800, Geliang Tang wrote: > Use list_for_each_entry*() to simplify the code. > > Signed-off-by: Geliang Tang <geliangtang@163.com> The patch has been pulled to 4.5 queue already, please do an incremental against branch integration-4.5 (in Chris' git git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs.git) Thanks.
[toc] | [prev] | [next] | [standalone]
| From | Geliang Tang <geliangtang@163.com> |
|---|---|
| Date | 2016-01-13 15:10 +0100 |
| Subject | [PATCH] btrfs: fix iterator with update error in backref.c |
| Message-ID | <qQuhA-Oj-29@gated-at.bofh.it> |
| In reply to | #1307728 |
Fix the following error:
fs/btrfs/backref.c:565:1-20: iterator with update on line 577
Fixes: a7ca422('btrfs: use list_for_each_entry* in backref.c')
Signed-off-by: Geliang Tang <geliangtang@163.com>
---
fs/btrfs/backref.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c
index 08405a3..b90cd37 100644
--- a/fs/btrfs/backref.c
+++ b/fs/btrfs/backref.c
@@ -560,13 +560,13 @@ static int __add_missing_keys(struct btrfs_fs_info *fs_info,
*/
static void __merge_refs(struct list_head *head, int mode)
{
- struct __prelim_ref *ref1;
+ struct __prelim_ref *pos1;
- list_for_each_entry(ref1, head, list) {
- struct __prelim_ref *ref2 = ref1, *tmp;
+ list_for_each_entry(pos1, head, list) {
+ struct __prelim_ref *pos2 = pos1, *tmp;
- list_for_each_entry_safe_continue(ref2, tmp, head, list) {
- struct __prelim_ref *xchg;
+ list_for_each_entry_safe_continue(pos2, tmp, head, list) {
+ struct __prelim_ref *xchg, *ref1 = pos1, *ref2 = pos2;
struct extent_inode_elem *eie;
if (!ref_for_same_block(ref1, ref2))
--
2.5.0
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web