Re: [PATCH] btrfs: use list_for_each_entry_safe() when delete items

2013-08-31 Thread Azat Khuzhin
On Tue, Jul 30, 2013 at 7:40 AM, Miao Xie mi...@cn.fujitsu.com wrote:
 On mon, 29 Jul 2013 11:48:32 +0400, Azat Khuzhin wrote:
 On Sat, Jul 27, 2013 at 2:12 PM, Azat Khuzhin a3at.m...@gmail.com wrote:
 Replace list_for_each_entry() by list_for_each_entry_safe() in
 __btrfs_close_devices()

 There is another place that delete items lock_stripe_add(), but there we
 don't need safe version, because after deleting we exit from loop.

 Signed-off-by: Azat Khuzhin a3at.m...@gmail.com
 ---
  fs/btrfs/volumes.c |4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

 diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
 index 78b8717..1d1b595 100644
 --- a/fs/btrfs/volumes.c
 +++ b/fs/btrfs/volumes.c
 @@ -616,13 +616,13 @@ static void free_device(struct rcu_head *head)

  static int __btrfs_close_devices(struct btrfs_fs_devices *fs_devices)
  {
 -   struct btrfs_device *device;
 +   struct btrfs_device *device, *next;

 if (--fs_devices-opened  0)
 return 0;

 mutex_lock(fs_devices-device_list_mutex);
 -   list_for_each_entry(device, fs_devices-devices, dev_list) {
 +   list_for_each_entry_safe(device, next, fs_devices-devices, 
 dev_list) {
 struct btrfs_device *new_device;
 struct rcu_string *name;

 There is kfree(device); at the end of loop, maybe there must goto
 again; after it?
 (instead of this patch)

Ugh. I was looking into another function!


 Your fix is right, we needn't search from the head once again.

 The other fix way is:
 call_rcu(device-rcu, free_device);
 +   device = new_device;
  }
 but from the viewpoint of the readability, this way is not so good.

 Reviewed-by: Miao Xie mi...@cn.fujitsu.com

Thanks!
Miao, should I resend patch with you reviewed-by?




 --
 1.7.10.4








-- 
Respectfully
Azat Khuzhin
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] btrfs: use list_for_each_entry_safe() when delete items

2013-07-29 Thread Azat Khuzhin
On Sat, Jul 27, 2013 at 2:12 PM, Azat Khuzhin a3at.m...@gmail.com wrote:
 Replace list_for_each_entry() by list_for_each_entry_safe() in
 __btrfs_close_devices()

 There is another place that delete items lock_stripe_add(), but there we
 don't need safe version, because after deleting we exit from loop.

 Signed-off-by: Azat Khuzhin a3at.m...@gmail.com
 ---
  fs/btrfs/volumes.c |4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

 diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
 index 78b8717..1d1b595 100644
 --- a/fs/btrfs/volumes.c
 +++ b/fs/btrfs/volumes.c
 @@ -616,13 +616,13 @@ static void free_device(struct rcu_head *head)

  static int __btrfs_close_devices(struct btrfs_fs_devices *fs_devices)
  {
 -   struct btrfs_device *device;
 +   struct btrfs_device *device, *next;

 if (--fs_devices-opened  0)
 return 0;

 mutex_lock(fs_devices-device_list_mutex);
 -   list_for_each_entry(device, fs_devices-devices, dev_list) {
 +   list_for_each_entry_safe(device, next, fs_devices-devices, 
 dev_list) {
 struct btrfs_device *new_device;
 struct rcu_string *name;

There is kfree(device); at the end of loop, maybe there must goto
again; after it?
(instead of this patch)


 --
 1.7.10.4




-- 
Respectfully
Azat Khuzhin
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] btrfs: use list_for_each_entry_safe() when delete items

2013-07-29 Thread Miao Xie
On mon, 29 Jul 2013 11:48:32 +0400, Azat Khuzhin wrote:
 On Sat, Jul 27, 2013 at 2:12 PM, Azat Khuzhin a3at.m...@gmail.com wrote:
 Replace list_for_each_entry() by list_for_each_entry_safe() in
 __btrfs_close_devices()

 There is another place that delete items lock_stripe_add(), but there we
 don't need safe version, because after deleting we exit from loop.

 Signed-off-by: Azat Khuzhin a3at.m...@gmail.com
 ---
  fs/btrfs/volumes.c |4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

 diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
 index 78b8717..1d1b595 100644
 --- a/fs/btrfs/volumes.c
 +++ b/fs/btrfs/volumes.c
 @@ -616,13 +616,13 @@ static void free_device(struct rcu_head *head)

  static int __btrfs_close_devices(struct btrfs_fs_devices *fs_devices)
  {
 -   struct btrfs_device *device;
 +   struct btrfs_device *device, *next;

 if (--fs_devices-opened  0)
 return 0;

 mutex_lock(fs_devices-device_list_mutex);
 -   list_for_each_entry(device, fs_devices-devices, dev_list) {
 +   list_for_each_entry_safe(device, next, fs_devices-devices, 
 dev_list) {
 struct btrfs_device *new_device;
 struct rcu_string *name;
 
 There is kfree(device); at the end of loop, maybe there must goto
 again; after it?
 (instead of this patch)

Your fix is right, we needn't search from the head once again.

The other fix way is:
call_rcu(device-rcu, free_device);
+   device = new_device;
 }
but from the viewpoint of the readability, this way is not so good.

Reviewed-by: Miao Xie mi...@cn.fujitsu.com

 

 --
 1.7.10.4

 
 
 

--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html