* [PATCH] staging: ion: fix corruption of ion_import_dma_buf
@ 2015-09-09 7:41 Shawn Lin
2015-09-09 17:19 ` Laura Abbott
0 siblings, 1 reply; 5+ messages in thread
From: Shawn Lin @ 2015-09-09 7:41 UTC (permalink / raw)
To: Greg Kroah-Hartman, arve, Riley Andrews; +Cc: linux-kernel, devel, Shawn Lin
we found this issue but still exit in lastest kernel. Simply
keep ion_handle_create under mutex_lock to avoid this race.
WARNING: CPU: 2 PID: 2648 at drivers/staging/android/ion/ion.c:512 ion_handle_add+0xb4/0xc0()
ion_handle_add: buffer already found.
Modules linked in: iwlmvm iwlwifi mac80211 cfg80211 compat
CPU: 2 PID: 2648 Comm: TimedEventQueue Tainted: G W 3.14.0 #7
00000000 00000000 9a3efd2c 80faf273 9a3efd6c 9a3efd5c 80935dc9 811d7fd3
9a3efd88 00000a58 812208a0 00000200 80e128d4 80e128d4 8d4ae00c a8cd8600
a8cd8094 9a3efd74 80935e0e 00000009 9a3efd6c 811d7fd3 9a3efd88 9a3efd9c
Call Trace:
[<80faf273>] dump_stack+0x48/0x69
[<80935dc9>] warn_slowpath_common+0x79/0x90
[<80e128d4>] ? ion_handle_add+0xb4/0xc0
[<80e128d4>] ? ion_handle_add+0xb4/0xc0
[<80935e0e>] warn_slowpath_fmt+0x2e/0x30
[<80e128d4>] ion_handle_add+0xb4/0xc0
[<80e144cc>] ion_import_dma_buf+0x8c/0x110
[<80c517c4>] reg_init+0x364/0x7d0
[<80993363>] ? futex_wait+0x123/0x210
[<80992e0e>] ? get_futex_key+0x16e/0x1e0
[<8099308f>] ? futex_wake+0x5f/0x120
[<80c51e19>] vpu_service_ioctl+0x1e9/0x500
[<80994aec>] ? do_futex+0xec/0x8e0
[<80971080>] ? prepare_to_wait_event+0xc0/0xc0
[<80c51c30>] ? reg_init+0x7d0/0x7d0
[<80a22562>] do_vfs_ioctl+0x2d2/0x4c0
[<80b198ad>] ? inode_has_perm.isra.41+0x2d/0x40
[<80b199cf>] ? file_has_perm+0x7f/0x90
[<80b1a5f7>] ? selinux_file_ioctl+0x47/0xf0
[<80a227a8>] SyS_ioctl+0x58/0x80
[<80fb45e8>] syscall_call+0x7/0x7
[<80fb0000>] ? mmc_do_calc_max_discard+0xab/0xe4
Fixes: 83271f626 ("ion: hold reference to handle...")
Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
---
drivers/staging/android/ion/ion.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
index eec878e..32e7b5c 100644
--- a/drivers/staging/android/ion/ion.c
+++ b/drivers/staging/android/ion/ion.c
@@ -1179,13 +1179,13 @@ struct ion_handle *ion_import_dma_buf(struct ion_client *client, int fd)
mutex_unlock(&client->lock);
goto end;
}
- mutex_unlock(&client->lock);
handle = ion_handle_create(client, buffer);
- if (IS_ERR(handle))
+ if (IS_ERR(handle)) {
+ mutex_unlock(&client->lock);
goto end;
+ }
- mutex_lock(&client->lock);
ret = ion_handle_add(client, handle);
mutex_unlock(&client->lock);
if (ret) {
--
2.3.7
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] staging: ion: fix corruption of ion_import_dma_buf 2015-09-09 7:41 [PATCH] staging: ion: fix corruption of ion_import_dma_buf Shawn Lin @ 2015-09-09 17:19 ` Laura Abbott 2015-09-10 5:41 ` Colin Cross 0 siblings, 1 reply; 5+ messages in thread From: Laura Abbott @ 2015-09-09 17:19 UTC (permalink / raw) To: Shawn Lin, Greg Kroah-Hartman, arve, Riley Andrews, Colin Cross, John Stultz Cc: linux-kernel, devel (adding Colin and John) On 09/09/2015 12:41 AM, Shawn Lin wrote: > we found this issue but still exit in lastest kernel. Simply > keep ion_handle_create under mutex_lock to avoid this race. > > WARNING: CPU: 2 PID: 2648 at drivers/staging/android/ion/ion.c:512 ion_handle_add+0xb4/0xc0() > ion_handle_add: buffer already found. > Modules linked in: iwlmvm iwlwifi mac80211 cfg80211 compat > CPU: 2 PID: 2648 Comm: TimedEventQueue Tainted: G W 3.14.0 #7 > 00000000 00000000 9a3efd2c 80faf273 9a3efd6c 9a3efd5c 80935dc9 811d7fd3 > 9a3efd88 00000a58 812208a0 00000200 80e128d4 80e128d4 8d4ae00c a8cd8600 > a8cd8094 9a3efd74 80935e0e 00000009 9a3efd6c 811d7fd3 9a3efd88 9a3efd9c > Call Trace: > [<80faf273>] dump_stack+0x48/0x69 > [<80935dc9>] warn_slowpath_common+0x79/0x90 > [<80e128d4>] ? ion_handle_add+0xb4/0xc0 > [<80e128d4>] ? ion_handle_add+0xb4/0xc0 > [<80935e0e>] warn_slowpath_fmt+0x2e/0x30 > [<80e128d4>] ion_handle_add+0xb4/0xc0 > [<80e144cc>] ion_import_dma_buf+0x8c/0x110 > [<80c517c4>] reg_init+0x364/0x7d0 > [<80993363>] ? futex_wait+0x123/0x210 > [<80992e0e>] ? get_futex_key+0x16e/0x1e0 > [<8099308f>] ? futex_wake+0x5f/0x120 > [<80c51e19>] vpu_service_ioctl+0x1e9/0x500 > [<80994aec>] ? do_futex+0xec/0x8e0 > [<80971080>] ? prepare_to_wait_event+0xc0/0xc0 > [<80c51c30>] ? reg_init+0x7d0/0x7d0 > [<80a22562>] do_vfs_ioctl+0x2d2/0x4c0 > [<80b198ad>] ? inode_has_perm.isra.41+0x2d/0x40 > [<80b199cf>] ? file_has_perm+0x7f/0x90 > [<80b1a5f7>] ? selinux_file_ioctl+0x47/0xf0 > [<80a227a8>] SyS_ioctl+0x58/0x80 > [<80fb45e8>] syscall_call+0x7/0x7 > [<80fb0000>] ? mmc_do_calc_max_discard+0xab/0xe4 > > Fixes: 83271f626 ("ion: hold reference to handle...") > Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> > --- > > drivers/staging/android/ion/ion.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c > index eec878e..32e7b5c 100644 > --- a/drivers/staging/android/ion/ion.c > +++ b/drivers/staging/android/ion/ion.c > @@ -1179,13 +1179,13 @@ struct ion_handle *ion_import_dma_buf(struct ion_client *client, int fd) > mutex_unlock(&client->lock); > goto end; > } > - mutex_unlock(&client->lock); > > handle = ion_handle_create(client, buffer); > - if (IS_ERR(handle)) > + if (IS_ERR(handle)) { > + mutex_unlock(&client->lock); > goto end; > + } > > - mutex_lock(&client->lock); > ret = ion_handle_add(client, handle); > mutex_unlock(&client->lock); > if (ret) { > So the patch looks correct but the locking change there seems like it was added deliberately. Colin/John, do you remember why the locking for ion_import_dma_buf changed? Was there a deadlock condition somewhere? Thanks, Laura ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] staging: ion: fix corruption of ion_import_dma_buf 2015-09-09 17:19 ` Laura Abbott @ 2015-09-10 5:41 ` Colin Cross 2015-09-10 16:44 ` Laura Abbott 0 siblings, 1 reply; 5+ messages in thread From: Colin Cross @ 2015-09-10 5:41 UTC (permalink / raw) To: Laura Abbott Cc: Shawn Lin, Greg Kroah-Hartman, Arve Hjønnevåg, Riley Andrews, John Stultz, lkml, devel@driverdev.osuosl.org On Wed, Sep 9, 2015 at 10:19 AM, Laura Abbott <labbott@redhat.com> wrote: > (adding Colin and John) > > > On 09/09/2015 12:41 AM, Shawn Lin wrote: >> >> we found this issue but still exit in lastest kernel. Simply >> keep ion_handle_create under mutex_lock to avoid this race. >> >> WARNING: CPU: 2 PID: 2648 at drivers/staging/android/ion/ion.c:512 >> ion_handle_add+0xb4/0xc0() >> ion_handle_add: buffer already found. >> Modules linked in: iwlmvm iwlwifi mac80211 cfg80211 compat >> CPU: 2 PID: 2648 Comm: TimedEventQueue Tainted: G W 3.14.0 #7 >> 00000000 00000000 9a3efd2c 80faf273 9a3efd6c 9a3efd5c 80935dc9 811d7fd3 >> 9a3efd88 00000a58 812208a0 00000200 80e128d4 80e128d4 8d4ae00c a8cd8600 >> a8cd8094 9a3efd74 80935e0e 00000009 9a3efd6c 811d7fd3 9a3efd88 9a3efd9c >> Call Trace: >> [<80faf273>] dump_stack+0x48/0x69 >> [<80935dc9>] warn_slowpath_common+0x79/0x90 >> [<80e128d4>] ? ion_handle_add+0xb4/0xc0 >> [<80e128d4>] ? ion_handle_add+0xb4/0xc0 >> [<80935e0e>] warn_slowpath_fmt+0x2e/0x30 >> [<80e128d4>] ion_handle_add+0xb4/0xc0 >> [<80e144cc>] ion_import_dma_buf+0x8c/0x110 >> [<80c517c4>] reg_init+0x364/0x7d0 >> [<80993363>] ? futex_wait+0x123/0x210 >> [<80992e0e>] ? get_futex_key+0x16e/0x1e0 >> [<8099308f>] ? futex_wake+0x5f/0x120 >> [<80c51e19>] vpu_service_ioctl+0x1e9/0x500 >> [<80994aec>] ? do_futex+0xec/0x8e0 >> [<80971080>] ? prepare_to_wait_event+0xc0/0xc0 >> [<80c51c30>] ? reg_init+0x7d0/0x7d0 >> [<80a22562>] do_vfs_ioctl+0x2d2/0x4c0 >> [<80b198ad>] ? inode_has_perm.isra.41+0x2d/0x40 >> [<80b199cf>] ? file_has_perm+0x7f/0x90 >> [<80b1a5f7>] ? selinux_file_ioctl+0x47/0xf0 >> [<80a227a8>] SyS_ioctl+0x58/0x80 >> [<80fb45e8>] syscall_call+0x7/0x7 >> [<80fb0000>] ? mmc_do_calc_max_discard+0xab/0xe4 >> >> Fixes: 83271f626 ("ion: hold reference to handle...") >> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> >> --- >> >> drivers/staging/android/ion/ion.c | 6 +++--- >> 1 file changed, 3 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/staging/android/ion/ion.c >> b/drivers/staging/android/ion/ion.c >> index eec878e..32e7b5c 100644 >> --- a/drivers/staging/android/ion/ion.c >> +++ b/drivers/staging/android/ion/ion.c >> @@ -1179,13 +1179,13 @@ struct ion_handle *ion_import_dma_buf(struct >> ion_client *client, int fd) >> mutex_unlock(&client->lock); >> goto end; >> } >> - mutex_unlock(&client->lock); >> >> handle = ion_handle_create(client, buffer); >> - if (IS_ERR(handle)) >> + if (IS_ERR(handle)) { >> + mutex_unlock(&client->lock); >> goto end; >> + } >> >> - mutex_lock(&client->lock); >> ret = ion_handle_add(client, handle); >> mutex_unlock(&client->lock); >> if (ret) { >> > > So the patch looks correct but the locking change there seems like it was > added > deliberately. Colin/John, do you remember why the locking for > ion_import_dma_buf > changed? Was there a deadlock condition somewhere? > > Thanks, > Laura I can't see any reason to not hold the mutex across ion_handle_create. The patch that introduced the bug (83271f6262c91a49df325c52bec8f00f4de294ca, ion: hold reference to handle after ion_uhandle_get) required that the mutex not be held around the call to ion_handle_put, but didn't affect ion_handle_create. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] staging: ion: fix corruption of ion_import_dma_buf 2015-09-10 5:41 ` Colin Cross @ 2015-09-10 16:44 ` Laura Abbott 2015-09-10 23:51 ` Shawn Lin 0 siblings, 1 reply; 5+ messages in thread From: Laura Abbott @ 2015-09-10 16:44 UTC (permalink / raw) To: Colin Cross Cc: Shawn Lin, Greg Kroah-Hartman, Arve Hjønnevåg, Riley Andrews, John Stultz, lkml, devel@driverdev.osuosl.org On 09/09/2015 10:41 PM, Colin Cross wrote: > On Wed, Sep 9, 2015 at 10:19 AM, Laura Abbott <labbott@redhat.com> wrote: >> (adding Colin and John) >> >> >> On 09/09/2015 12:41 AM, Shawn Lin wrote: >>> >>> we found this issue but still exit in lastest kernel. Simply >>> keep ion_handle_create under mutex_lock to avoid this race. >>> >>> WARNING: CPU: 2 PID: 2648 at drivers/staging/android/ion/ion.c:512 >>> ion_handle_add+0xb4/0xc0() >>> ion_handle_add: buffer already found. >>> Modules linked in: iwlmvm iwlwifi mac80211 cfg80211 compat >>> CPU: 2 PID: 2648 Comm: TimedEventQueue Tainted: G W 3.14.0 #7 >>> 00000000 00000000 9a3efd2c 80faf273 9a3efd6c 9a3efd5c 80935dc9 811d7fd3 >>> 9a3efd88 00000a58 812208a0 00000200 80e128d4 80e128d4 8d4ae00c a8cd8600 >>> a8cd8094 9a3efd74 80935e0e 00000009 9a3efd6c 811d7fd3 9a3efd88 9a3efd9c >>> Call Trace: >>> [<80faf273>] dump_stack+0x48/0x69 >>> [<80935dc9>] warn_slowpath_common+0x79/0x90 >>> [<80e128d4>] ? ion_handle_add+0xb4/0xc0 >>> [<80e128d4>] ? ion_handle_add+0xb4/0xc0 >>> [<80935e0e>] warn_slowpath_fmt+0x2e/0x30 >>> [<80e128d4>] ion_handle_add+0xb4/0xc0 >>> [<80e144cc>] ion_import_dma_buf+0x8c/0x110 >>> [<80c517c4>] reg_init+0x364/0x7d0 >>> [<80993363>] ? futex_wait+0x123/0x210 >>> [<80992e0e>] ? get_futex_key+0x16e/0x1e0 >>> [<8099308f>] ? futex_wake+0x5f/0x120 >>> [<80c51e19>] vpu_service_ioctl+0x1e9/0x500 >>> [<80994aec>] ? do_futex+0xec/0x8e0 >>> [<80971080>] ? prepare_to_wait_event+0xc0/0xc0 >>> [<80c51c30>] ? reg_init+0x7d0/0x7d0 >>> [<80a22562>] do_vfs_ioctl+0x2d2/0x4c0 >>> [<80b198ad>] ? inode_has_perm.isra.41+0x2d/0x40 >>> [<80b199cf>] ? file_has_perm+0x7f/0x90 >>> [<80b1a5f7>] ? selinux_file_ioctl+0x47/0xf0 >>> [<80a227a8>] SyS_ioctl+0x58/0x80 >>> [<80fb45e8>] syscall_call+0x7/0x7 >>> [<80fb0000>] ? mmc_do_calc_max_discard+0xab/0xe4 >>> >>> Fixes: 83271f626 ("ion: hold reference to handle...") >>> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> >>> --- >>> >>> drivers/staging/android/ion/ion.c | 6 +++--- >>> 1 file changed, 3 insertions(+), 3 deletions(-) >>> >>> diff --git a/drivers/staging/android/ion/ion.c >>> b/drivers/staging/android/ion/ion.c >>> index eec878e..32e7b5c 100644 >>> --- a/drivers/staging/android/ion/ion.c >>> +++ b/drivers/staging/android/ion/ion.c >>> @@ -1179,13 +1179,13 @@ struct ion_handle *ion_import_dma_buf(struct >>> ion_client *client, int fd) >>> mutex_unlock(&client->lock); >>> goto end; >>> } >>> - mutex_unlock(&client->lock); >>> >>> handle = ion_handle_create(client, buffer); >>> - if (IS_ERR(handle)) >>> + if (IS_ERR(handle)) { >>> + mutex_unlock(&client->lock); >>> goto end; >>> + } >>> >>> - mutex_lock(&client->lock); >>> ret = ion_handle_add(client, handle); >>> mutex_unlock(&client->lock); >>> if (ret) { >>> >> >> So the patch looks correct but the locking change there seems like it was >> added >> deliberately. Colin/John, do you remember why the locking for >> ion_import_dma_buf >> changed? Was there a deadlock condition somewhere? >> >> Thanks, >> Laura > > I can't see any reason to not hold the mutex across ion_handle_create. > The patch that introduced the bug > (83271f6262c91a49df325c52bec8f00f4de294ca, ion: hold reference to > handle after ion_uhandle_get) required that the mutex not be held > around the call to ion_handle_put, but didn't affect > ion_handle_create. Thanks for confirming. With that, Reviewed-by: Laura Abbott <labbott@redhat.com> ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] staging: ion: fix corruption of ion_import_dma_buf 2015-09-10 16:44 ` Laura Abbott @ 2015-09-10 23:51 ` Shawn Lin 0 siblings, 0 replies; 5+ messages in thread From: Shawn Lin @ 2015-09-10 23:51 UTC (permalink / raw) To: Laura Abbott, Colin Cross Cc: shawn.lin, Greg Kroah-Hartman, Arve Hjønnevåg, Riley Andrews, John Stultz, lkml, devel@driverdev.osuosl.org 在 2015/9/11 0:44, Laura Abbott 写道: > On 09/09/2015 10:41 PM, Colin Cross wrote: >> On Wed, Sep 9, 2015 at 10:19 AM, Laura Abbott <labbott@redhat.com> wrote: >>> (adding Colin and John) >>> >>> >>> On 09/09/2015 12:41 AM, Shawn Lin wrote: >>>> >>>> we found this issue but still exit in lastest kernel. Simply >>>> keep ion_handle_create under mutex_lock to avoid this race. >>>> >>>> WARNING: CPU: 2 PID: 2648 at drivers/staging/android/ion/ion.c:512 >>>> ion_handle_add+0xb4/0xc0() >>>> ion_handle_add: buffer already found. >>>> Modules linked in: iwlmvm iwlwifi mac80211 cfg80211 compat >>>> CPU: 2 PID: 2648 Comm: TimedEventQueue Tainted: G W 3.14.0 #7 >>>> 00000000 00000000 9a3efd2c 80faf273 9a3efd6c 9a3efd5c 80935dc9 >>>> 811d7fd3 >>>> 9a3efd88 00000a58 812208a0 00000200 80e128d4 80e128d4 8d4ae00c >>>> a8cd8600 >>>> a8cd8094 9a3efd74 80935e0e 00000009 9a3efd6c 811d7fd3 9a3efd88 >>>> 9a3efd9c >>>> Call Trace: >>>> [<80faf273>] dump_stack+0x48/0x69 >>>> [<80935dc9>] warn_slowpath_common+0x79/0x90 >>>> [<80e128d4>] ? ion_handle_add+0xb4/0xc0 >>>> [<80e128d4>] ? ion_handle_add+0xb4/0xc0 >>>> [<80935e0e>] warn_slowpath_fmt+0x2e/0x30 >>>> [<80e128d4>] ion_handle_add+0xb4/0xc0 >>>> [<80e144cc>] ion_import_dma_buf+0x8c/0x110 >>>> [<80c517c4>] reg_init+0x364/0x7d0 >>>> [<80993363>] ? futex_wait+0x123/0x210 >>>> [<80992e0e>] ? get_futex_key+0x16e/0x1e0 >>>> [<8099308f>] ? futex_wake+0x5f/0x120 >>>> [<80c51e19>] vpu_service_ioctl+0x1e9/0x500 >>>> [<80994aec>] ? do_futex+0xec/0x8e0 >>>> [<80971080>] ? prepare_to_wait_event+0xc0/0xc0 >>>> [<80c51c30>] ? reg_init+0x7d0/0x7d0 >>>> [<80a22562>] do_vfs_ioctl+0x2d2/0x4c0 >>>> [<80b198ad>] ? inode_has_perm.isra.41+0x2d/0x40 >>>> [<80b199cf>] ? file_has_perm+0x7f/0x90 >>>> [<80b1a5f7>] ? selinux_file_ioctl+0x47/0xf0 >>>> [<80a227a8>] SyS_ioctl+0x58/0x80 >>>> [<80fb45e8>] syscall_call+0x7/0x7 >>>> [<80fb0000>] ? mmc_do_calc_max_discard+0xab/0xe4 >>>> >>>> Fixes: 83271f626 ("ion: hold reference to handle...") >>>> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> >>>> --- >>>> >>>> drivers/staging/android/ion/ion.c | 6 +++--- >>>> 1 file changed, 3 insertions(+), 3 deletions(-) >>>> >>>> diff --git a/drivers/staging/android/ion/ion.c >>>> b/drivers/staging/android/ion/ion.c >>>> index eec878e..32e7b5c 100644 >>>> --- a/drivers/staging/android/ion/ion.c >>>> +++ b/drivers/staging/android/ion/ion.c >>>> @@ -1179,13 +1179,13 @@ struct ion_handle *ion_import_dma_buf(struct >>>> ion_client *client, int fd) >>>> mutex_unlock(&client->lock); >>>> goto end; >>>> } >>>> - mutex_unlock(&client->lock); >>>> >>>> handle = ion_handle_create(client, buffer); >>>> - if (IS_ERR(handle)) >>>> + if (IS_ERR(handle)) { >>>> + mutex_unlock(&client->lock); >>>> goto end; >>>> + } >>>> >>>> - mutex_lock(&client->lock); >>>> ret = ion_handle_add(client, handle); >>>> mutex_unlock(&client->lock); >>>> if (ret) { >>>> >>> >>> So the patch looks correct but the locking change there seems like it >>> was >>> added >>> deliberately. Colin/John, do you remember why the locking for >>> ion_import_dma_buf >>> changed? Was there a deadlock condition somewhere? >>> >>> Thanks, >>> Laura >> >> I can't see any reason to not hold the mutex across ion_handle_create. >> The patch that introduced the bug >> (83271f6262c91a49df325c52bec8f00f4de294ca, ion: hold reference to >> handle after ion_uhandle_get) required that the mutex not be held >> around the call to ion_handle_put, but didn't affect >> ion_handle_create. > > Thanks for confirming. With that, > Thanks for reviewing this patch, Laura. :) > Reviewed-by: Laura Abbott <labbott@redhat.com> > > > > -- Best Regards Shawn Lin ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-09-10 23:51 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-09-09 7:41 [PATCH] staging: ion: fix corruption of ion_import_dma_buf Shawn Lin 2015-09-09 17:19 ` Laura Abbott 2015-09-10 5:41 ` Colin Cross 2015-09-10 16:44 ` Laura Abbott 2015-09-10 23:51 ` Shawn Lin
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.