Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#WIP, [buildbot, proof-of-concept (*3), new #2129 + #3115] #3360

Conversation

kernelOfTruth
Copy link
Contributor

Compared to #3216 this is yet another improvement & building block towards getting the correct order of commits & reverts

Sending the preliminary commits & changes off to the buildbot to see how things with the new ABD (with metadata support) + lock contention on arcs_mtx changes work out

the latest commit might not work yet since the commits gradually build on each other

Since the next commit dac17ff ( "Illumos - 5408 managing ZFS cache devices requires lots of RAM" ) has lots of changes & the last one 7168285 ( "5497 lock contention on arcs_mtx" ) probably, too due to a diverged base

I'll defer that addition to later & as time allows ...

edit:

best approach probably would be to combine #2129 's approach to metadata handling with the one from dweeezil@dac17ff ( "Illumos - 5408 managing ZFS cache devices requires lots of RAM" )

which appears to be quite an undertaking - and looks currently to be way above my skillset :(

thanks to @tuxoko 's for his excellent work & quick update of the pull-request 👍

edit2:

quick link to the tree https://github.com/kernelOfTruth/zfs/commits/zfs_master_29.04.2015%2B2129%2B3115

attempt to get dac17ff ( "Illumos - 5408 managing ZFS cache devices requires lots of RAM" working - might need "5497 lock contention on arcs_mtx" though to satisfy the buildbots

tuxoko added 24 commits April 29, 2015 22:17
Starting from linux-2.6.37, {kmap,kunmap}_atomic takes 1 argument instead of 2.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
zfsolinux currently uses vmalloc backed slab for ARC buffers. There are some
major problems with this approach. One is that 32-bit system have only a
handful of vmalloc space. Another is that the fragmentation in slab will easily
trigger OOM in busy system.

With ABD, we use scatterlist to allocate data buffers. In this approach we can
allocate in HIGHMEM, which alleviates vmalloc space pressure on 32-bit. Also,
we don't have to rely on slab, so there's no fragmentation issue.

But for metadata buffers, we still uses linear buffer from slab. The reason for
this is that there are a lot of *_phys pointers directly point to metadata
buffers. So it's kind of impractical to change all those code.

Currently, ABD is not enabled and its API will treat them as normal buffers.
We will enable it once all relevant code is modified to use the API.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Modify/Add incremental fletcher function prototype to match abd_iterate_rfunc
callback type. Also, reduce duplicated code a bit in zfs_fletcher.c.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
1. Use abd_t in arc_buf_t->b_data, dmu_buf_t->db_data, zio_t->io_data and
zio_transform_t->zt_orig_data
2. zio_* function take abd_t for data

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
1. Add checksum function for abd_t
2. Use abd_t version checksum function in zio_checksum_table
3. Make zio_checksum_compute and zio_checksum_error handle abd_t

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
…d zil.c

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Use ABD API on related pointers and functions.(b_data, db_data, zio_*(), etc.)

Suggested-by: DHE <git@dehacked.net>
Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
PAGE_SIZE in userspace is not a literal constant, which would result in build
error on older gcc. So don't turn it on when doing generic debug build.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
This patch adds non-highmem scatter ABD and also adds a new set of functions,
namely abd_buf_segment and friends, for accessing those ABD.

This is a preparation for metadata scatter ABD.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Some metadata types are not required or not easily to use scatter ABD. So to
allow ARC to accommodate both types of metadata, we introduce a new flag
ARC_BUFC_SCATTER to indicate the type of the ABD. This flag only applies to
metadata because userdata always use scatter ABD.

Now that we cannot use `type == ARC_BUFC_METADATA' to check whether is
metadata, we need to use the macro ARC_BUFC_IS_META.

Things such as arcs_list doesn't care about the scatter flag. For them, we
use the macro ARC_BUFC_TYPE_MASK to mask out the scatter flag.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
We add a new member ot_scatter to dmu_ot to determine the ABD type for each
DMU type. We temporary set them all to FALSE, until some types are ready to
handle scatter abd.

BP_GET_BUFC_TYPE and DBUF_GET_BUFC_TYPE will returns with the scatter flag set
up accordingly, so they can be passed to arc_buf_alloc as they were, and the
ARC subsystem will returns the correct ABD type.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Use non-highmem scatter ABD for indirect block, i.e. level > 0. abd_array
should be used to access the blkptr.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Use non-highmem scatter ABD for dnode array blocks, abd_array should be used
to access the dnodes.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Merge upto 6186e29
Illumos 5592 - NULL pointer dereference in dsl_prop_notify_all_cb()

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>

Conflicts:
	module/zfs/dbuf.c
	module/zfs/dnode.c
	module/zfs/dsl_dataset.c
	module/zfs/dsl_dir.c
	module/zfs/zap.c
abd_alloc_scatter always allocate nr*PAGE_SIZE memory. So in order to save
memory, we allow it to fallback to do linear allocation when size is less than
PAGE_SIZE.

Note that orignally, we requires that zio->io_data remains the same type
before it reaches lower level, vdev_{queue,cache,disk}. After this patch,
however, transformation like compression may change a scatter io_data to
linear. This is fine, because every scatter ABD aware API can also take linear
ABD, but not vice versa. So we relax the type check in push transform to check
linear only.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
@kernelOfTruth kernelOfTruth changed the title #WIP, [buildbot, proof-of-concept (*2)/testing, new #2129 + #3115] #WIP, [buildbot, proof-of-concept (*3)/testing, new #2129 + #3115] Apr 30, 2015
@kernelOfTruth kernelOfTruth changed the title #WIP, [buildbot, proof-of-concept (*3)/testing, new #2129 + #3115] #WIP, [buildbot, proof-of-concept (*3), new #2129 + #3115] Apr 30, 2015
@kernelOfTruth
Copy link
Contributor Author

preliminary (unfinished) work on dweeezil@dac17ff ( "Illumos - 5408 managing ZFS cache devices requires lots of RAM" ) is at:

kernelOfTruth@3874c39

some errors

due to the changes from #2129 were being kept in commit kernelOfTruth@17744d0 ("Illumos 5369 - arc flags should be an enum") and not being integrated & rewritten yet:

In file included from ../../include/sys/dmu.h:48:0,
                 from ../../include/sys/spa.h:566,
                 from ../../module/zfs/arc.c:130:
../../module/zfs/arc.c: In function ‘l2arc_compress_buf’:
../../include/sys/abd.h:79:37: warning: dereferencing ‘void *’ pointer
 #define ABD_IS_SCATTER(abd) (!((abd)->abd_flags & ABD_F_LINEAR))
                                     ^
../../include/sys/abd.h:80:30: note: in expansion of macro ‘ABD_IS_SCATTER’
 #define ABD_IS_LINEAR(abd) (!ABD_IS_SCATTER(abd))
                              ^
../../include/sys/abd.h:157:6: note: in expansion of macro ‘ABD_IS_LINEAR’
  if (ABD_IS_LINEAR(a)) {   \
      ^
../../include/sys/abd.h:173:15: note: in expansion of macro ‘abd_borrow_buf’
  void *___b = abd_borrow_buf(a, n); \
               ^
../../module/zfs/arc.c:5422:10: note: in expansion of macro ‘abd_borrow_buf_copy’
  ddata = abd_borrow_buf_copy(hdr->b_l1hdr.b_tmp_cdata, l2hdr->b_asize);
          ^
../../include/sys/abd.h:79:37: error: request for member ‘abd_flags’ in something not a structure or union
 #define ABD_IS_SCATTER(abd) (!((abd)->abd_flags & ABD_F_LINEAR))
                                     ^
../../include/sys/abd.h:80:30: note: in expansion of macro ‘ABD_IS_SCATTER’
 #define ABD_IS_LINEAR(abd) (!ABD_IS_SCATTER(abd))
                              ^
../../include/sys/abd.h:157:6: note: in expansion of macro ‘ABD_IS_LINEAR’
  if (ABD_IS_LINEAR(a)) {   \
      ^
../../include/sys/abd.h:173:15: note: in expansion of macro ‘abd_borrow_buf’
  void *___b = abd_borrow_buf(a, n); \
               ^
../../module/zfs/arc.c:5422:10: note: in expansion of macro ‘abd_borrow_buf_copy’
  ddata = abd_borrow_buf_copy(hdr->b_l1hdr.b_tmp_cdata, l2hdr->b_asize);
          ^
../../include/sys/abd.h:75:7: warning: dereferencing ‘void *’ pointer
  (abd)->abd_buf;     \
       ^
../../include/sys/abd.h:158:10: note: in expansion of macro ‘ABD_TO_BUF’
   ___b = ABD_TO_BUF(a);  \
          ^
../../include/sys/abd.h:173:15: note: in expansion of macro ‘abd_borrow_buf’
  void *___b = abd_borrow_buf(a, n); \
               ^
../../module/zfs/arc.c:5422:10: note: in expansion of macro ‘abd_borrow_buf_copy’
  ddata = abd_borrow_buf_copy(hdr->b_l1hdr.b_tmp_cdata, l2hdr->b_asize);
          ^
../../include/sys/abd.h:75:7: error: request for member ‘abd_buf’ in something not a structure or union
  (abd)->abd_buf;     \
       ^
../../include/sys/abd.h:158:10: note: in expansion of macro ‘ABD_TO_BUF’
   ___b = ABD_TO_BUF(a);  \
          ^
../../include/sys/abd.h:173:15: note: in expansion of macro ‘abd_borrow_buf’
  void *___b = abd_borrow_buf(a, n); \
               ^
../../module/zfs/arc.c:5422:10: note: in expansion of macro ‘abd_borrow_buf_copy’
  ddata = abd_borrow_buf_copy(hdr->b_l1hdr.b_tmp_cdata, l2hdr->b_asize);
          ^
../../include/sys/abd.h:79:37: warning: dereferencing ‘void *’ pointer
 #define ABD_IS_SCATTER(abd) (!((abd)->abd_flags & ABD_F_LINEAR))
                                     ^
../../include/sys/abd.h:80:30: note: in expansion of macro ‘ABD_IS_SCATTER’
 #define ABD_IS_LINEAR(abd) (!ABD_IS_SCATTER(abd))
                              ^
../../include/sys/abd.h:174:7: note: in expansion of macro ‘ABD_IS_LINEAR’
  if (!ABD_IS_LINEAR(a))   \
       ^
../../module/zfs/arc.c:5422:10: note: in expansion of macro ‘abd_borrow_buf_copy’
  ddata = abd_borrow_buf_copy(hdr->b_l1hdr.b_tmp_cdata, l2hdr->b_asize);
          ^
../../include/sys/abd.h:79:37: error: request for member ‘abd_flags’ in something not a structure or union
 #define ABD_IS_SCATTER(abd) (!((abd)->abd_flags & ABD_F_LINEAR))
                                     ^
../../include/sys/abd.h:80:30: note: in expansion of macro ‘ABD_IS_SCATTER’
 #define ABD_IS_LINEAR(abd) (!ABD_IS_SCATTER(abd))
                              ^
../../include/sys/abd.h:174:7: note: in expansion of macro ‘ABD_IS_LINEAR’
  if (!ABD_IS_LINEAR(a))   \
       ^
../../module/zfs/arc.c:5422:10: note: in expansion of macro ‘abd_borrow_buf_copy’
  ddata = abd_borrow_buf_copy(hdr->b_l1hdr.b_tmp_cdata, l2hdr->b_asize);
          ^
../../include/sys/abd.h:79:37: warning: dereferencing ‘void *’ pointer
 #define ABD_IS_SCATTER(abd) (!((abd)->abd_flags & ABD_F_LINEAR))
                                     ^
../../include/sys/abd.h:80:30: note: in expansion of macro ‘ABD_IS_SCATTER’
 #define ABD_IS_LINEAR(abd) (!ABD_IS_SCATTER(abd))
                              ^
../../include/sys/abd.h:185:6: note: in expansion of macro ‘ABD_IS_LINEAR’
  if (ABD_IS_LINEAR(a))   \
      ^
../../module/zfs/arc.c:5427:2: note: in expansion of macro ‘abd_return_buf’
  abd_return_buf(hdr->b_l1hdr.b_tmp_cdata, ddata, l2hdr->b_asize);
  ^
../../include/sys/abd.h:79:37: error: request for member ‘abd_flags’ in something not a structure or union
 #define ABD_IS_SCATTER(abd) (!((abd)->abd_flags & ABD_F_LINEAR))
                                     ^
../../include/sys/abd.h:80:30: note: in expansion of macro ‘ABD_IS_SCATTER’
 #define ABD_IS_LINEAR(abd) (!ABD_IS_SCATTER(abd))
                              ^
../../include/sys/abd.h:185:6: note: in expansion of macro ‘ABD_IS_LINEAR’
  if (ABD_IS_LINEAR(a))   \
      ^
../../module/zfs/arc.c:5427:2: note: in expansion of macro ‘abd_return_buf’
  abd_return_buf(hdr->b_l1hdr.b_tmp_cdata, ddata, l2hdr->b_asize);
  ^
Makefile:910: recipe for target 'arc.lo' failed

That's all I can do for now ...

@kernelOfTruth
Copy link
Contributor Author

fixed two oversights for " Illumos 5369 - arc flags should be an enum …"

edit:

ztest: ../../lib/libspl/list.c:127: list_remove: Assertion `lold->list_next != ((void *)0)' failed.
/usr/sbin/ztest[0x40a55b]
/lib64/libpthread.so.0(+0xf000)[0x7f7684718000]
/lib64/libc.so.6(gsignal+0x35)[0x7f7684386c55]
/lib64/libc.so.6(abort+0x148)[0x7f7684388408]
/lib64/libc.so.6(+0x2e972)[0x7f768437f972]
/lib64/libc.so.6(+0x2ea22)[0x7f768437fa22]
/lib64/libuutil.so.1(+0xb68e)[0x7f7685b1268e]
/lib64/libzpool.so.2(arc_release+0x37c)[0x7f76856bcc7c]
/lib64/libzpool.so.2(arc_freed+0x82)[0x7f76856bd192]
/lib64/libzpool.so.2(zio_free_sync+0x8f)[0x7f7685777cdf]
/lib64/libzpool.so.2(zio_free+0xe6)[0x7f7685778d96]
/lib64/libzpool.so.2(dsl_dataset_block_kill+0x5b0)[0x7f76856f51c0]
/lib64/libzpool.so.2(+0x73882)[0x7f76856f0882]
/lib64/libzpool.so.2(+0x74823)[0x7f76856f1823]
/lib64/libzpool.so.2(+0x74a3e)[0x7f76856f1a3e]
/lib64/libzpool.so.2(range_tree_vacate+0x7e)[0x7f7685728c8e]
/lib64/libzpool.so.2(dnode_sync+0x35d)[0x7f76856f2b7d]
/lib64/libzpool.so.2(+0x5aac5)[0x7f76856d7ac5]
/lib64/libzpool.so.2(dmu_objset_sync+0x1e5)[0x7f76856db025]
/lib64/libzpool.so.2(+0x8ddb4)[0x7f768570adb4]
/lib64/libzpool.so.2(dsl_pool_sync+0x296)[0x7f768570cb06]
/lib64/libzpool.so.2(spa_sync+0x3a6)[0x7f7685735296]
/lib64/libzpool.so.2(+0xca19a)[0x7f768574719a]
/lib64/libzpool.so.2(zk_thread_helper+0x1f7)[0x7f76856a5b37]
/lib64/libpthread.so.0(+0x7d15)[0x7f7684710d15]
/lib64/libc.so.6(clone+0x6d)[0x7f768444353d]
child died with signal 6

http://buildbot.zfsonlinux.org/builders/fedora-18-x86_64-builder/builds/3165

http://buildbot.zfsonlinux.org/builders/fedora-18-x86_64-builder/builds/3165/steps/shell_9/logs/stdio

<-- fails with Fedora 18,

@behlendorf :

occasionally there are some assertions or fails triggered - is this a known one ?

https://github.com/kernelOfTruth/zfs/blob/728e3c6200a0ae9dfa7acf5c97edac0d83f4fa50/lib/libspl/list.c

-->

but seems to work fine with Fedora 19,

http://buildbot.zfsonlinux.org/builders/fedora-19-x86_64-builder/builds/3184

http://buildbot.zfsonlinux.org/builders/fedora-19-x86_64-builder/builds/3184/steps/shell_9/logs/stdio

will investigate some more later ...

except of course for the 2
over 80 lines style issues

@kernelOfTruth kernelOfTruth force-pushed the zfs_master_29.04.2015+2129+3115 branch from 728e3c6 to 14e610c Compare May 2, 2015 17:47
@kernelOfTruth
Copy link
Contributor Author

http://buildbot.zfsonlinux.org/builders/fedora-20-x86_64-builder/builds/3230

error: buffer modified while frozen!

#1965
https://www.illumos.org/issues/3113

Looks, like this pull-request is pretty productive in producing issues 😁

59.6M completed (   5MB/s) estimated time remaining: 4294450928hr 4294967293min 4294967250sec        /sbin/ztest[0x8050313]
[0xb777f400]
/lib/libuutil.so.1(list_remove+0x10)[0xb77572b0]
/lib/libzpool.so.2(arc_release+0x512)[0xb7593e72]
/lib/libzpool.so.2(dbuf_dirty+0x784)[0xb759dee4]
/lib/libzpool.so.2(dmu_buf_will_fill+0x6a)[0xb759e1ca]
/lib/libzpool.so.2(dmu_write+0x1b5)[0xb75a5185]
/sbin/ztest[0x805506e]
/sbin/ztest[0x8057054]
/sbin/ztest[0x8059f93]
/sbin/ztest[0x805a2f4]
/sbin/ztest[0x8052bbf]
/lib/libzpool.so.2(zk_thread_helper+0x9a)[0xb7580ffa]
/lib/i386-linux-gnu/libpthread.so.0(+0x6d4c)[0xb7524d4c]
/lib/i386-linux-gnu/libc.so.6(clone+0x5e)[0xb74639de]
child died with signal 11
program finished with exit code 3
elapsedTime=403.128412

http://buildbot.zfsonlinux.org/builders/ubuntu-12.04.4-i386-builder/builds/3147

31.5M completed (   6MB/s) estimated time remaining: 16696hr 07min 02sec        ztest: ../../lib/libspl/list.c:127: list_remove: Assertion `lold->list_next != ((void *)0)' failed.
/usr/sbin/ztest[0x40b4eb]
/lib64/libpthread.so.0(+0xefa0)[0x7f9c52f23fa0]
/lib64/libc.so.6(gsignal+0x37)[0x7f9c52b8a617]
/lib64/libc.so.6(abort+0x148)[0x7f9c52b8bd08]
/lib64/libc.so.6(+0x2e586)[0x7f9c52b83586]
/lib64/libc.so.6(+0x2e632)[0x7f9c52b83632]
/lib64/libuutil.so.1(+0xb4ae)[0x7f9c5452b4ae]
/lib64/libzpool.so.2(arc_release+0x366)[0x7f9c540dcbb6]
/lib64/libzpool.so.2(dbuf_dirty+0xa28)[0x7f9c540ea6f8]
/lib64/libzpool.so.2(zap_lockdir+0x10d)[0x7f9c5417f88d]
/lib64/libzpool.so.2(zap_remove_norm+0x47)[0x7f9c54180eb7]
/usr/sbin/ztest[0x40d8f8]
/usr/sbin/ztest[0x410f76]
/usr/sbin/ztest[0x4110f2]
/usr/sbin/ztest[0x414262]
/usr/sbin/ztest[0x40e6fb]
/lib64/libzpool.so.2(zk_thread_helper+0x1c7)[0x7f9c540c6987]
/lib64/libpthread.so.0(+0x7c65)[0x7f9c52f1cc65]
/lib64/libc.so.6(clone+0x6d)[0x7f9c52c4ab9d]
child died with signal 6
program finished with exit code 3
elapsedTime=154.698140

http://buildbot.zfsonlinux.org/builders/fedora-19-x86_64-builder/builds/3192

ztest: ../../module/zfs/abd.c:643: abd_zero_off: Assertion `len > 0' failed.
/sbin/ztest[0x4097bb]
/lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x7f3899adbcb0]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0x35)[0x7f38997430d5]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x17b)[0x7f389974683b]
/lib/x86_64-linux-gnu/libc.so.6(+0x2ed9e)[0x7f389973bd9e]
/lib/x86_64-linux-gnu/libc.so.6(+0x2ee42)[0x7f389973be42]
/lib64/libzpool.so.2(abd_zero_off+0x135)[0x7f389a019685]
/lib64/libzpool.so.2(+0x4a91a)[0x7f389a02f91a]
/lib64/libzpool.so.2(dbuf_read+0x136)[0x7f389a02fcc6]
/lib64/libzpool.so.2(dnode_hold_impl+0x12b)[0x7f389a054a7b]
/lib64/libzpool.so.2(dmu_object_claim+0x83)[0x7f389a03f0a3]
/lib64/libzpool.so.2(zap_create_claim_norm+0x38)[0x7f389a0d1158]
/lib64/libzpool.so.2(zap_create_claim+0x2a)[0x7f389a0d11ba]
/lib64/libzpool.so.2(dsl_pool_create+0x9d)[0x7f389a07651d]
/lib64/libzpool.so.2(spa_create+0x55c)[0x7f389a0a03fc]
/sbin/ztest[0x414d03]
/sbin/ztest[0x406eeb]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f389972e76d]
/sbin/ztest[0x407ccd]
child died with signal 6
program finished with exit code 3
elapsedTime=1.393940

http://buildbot.zfsonlinux.org/builders/ubuntu-12.04-amd64-builder/builds/3006

Some distributions don't have PAGE_SHIFT defined, so we define it when needed.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
@kernelOfTruth kernelOfTruth force-pushed the zfs_master_29.04.2015+2129+3115 branch from 14e610c to 367a28a Compare May 4, 2015 01:27
kernelOfTruth and others added 5 commits May 4, 2015 03:27
This reverts commit 037763e.

XXX - expand this comment as to why we're reverting it.

conflicts due to openzfs#2129, in:

static void arc_buf_free_on_write
(abd_t)

static void arc_buf_l2_cdata_free
(related to arc_buf_free_on_write(l2hdr->b_tmp_cdata, hdr->b_size, abd_free); )

l2arc_release_cdata_buf
(abd_free instead of zio_data_buf_free)
This reverts commit 68121a0.

Conflicts:
	module/zfs/arc.c

conflicts due to openzfs#2129, in:

@arc_evict_ghost(arc_state_t *state, uint64_t spa, int64_t bytes)
line 1976
arc_buf_hdr_t marker;

pre-2129:
list_t *list = &state->arcs_list[type];

at-2129:
list_t *list = &state->arcs_list[ARC_BUFC_TYPE_MASK(type)];

post-2129:
list_t *list = &state->arcs_list[ARC_BUFC_DATA];
This reverts commit ecf3d9b.

Conflicts:
	module/zfs/arc.c
	module/zfs/ddt.c
	module/zfs/spa_misc.c
5369 arc flags should be an enum
5370 consistent arc_buf_hdr_t naming scheme
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Alex Reece <alex.reece@delphix.com>
Reviewed by: Sebastien Roy <sebastien.roy@delphix.com>
Reviewed by: Richard Elling <richard.elling@richardelling.com>
Approved by: Richard Lowe <richlowe@richlowe.net>

changes due to openzfs#2129, in:

keeping changes in include/sys/arc.h from openzfs#2129
keeping changes in module/zfs/dmu_traverse.c from openzfs#3254 ( 0c66c32 )

conflicts due to openzfs#2129, in:

fix commit 989fd51
"Change ASSERT(!"...") to  cmn_err(CE_PANIC, ...)"

changed ARC_PREFETCH to ARC_FLAG_PREFETCH

several ab->b to hdr->b changes

fixing an oversight
@add_reference(arc_buf_hdr_t *hdr, kmutex_t *hash_lock, void *tag)

related to

arcs_list[ARC_BUFC_TYPE_MASK...

and

arcs_lsize[ARC_BUFC_TYPE_MASK...

additionally fixing the "line > 80 characters" error
@kernelOfTruth
Copy link
Contributor Author

updating one of the base commits:
tuxoko@9b5d0c8

Note to myself:
Another approach in this case might be better to get ABD working - leaving "Revert "Allow arc_evict_ghost() to only evict meta data"" out ?

@kernelOfTruth
Copy link
Contributor Author

updated fix for lock contention on ARC mutex got merged,

ABD(2) to be rebased - so not relevant anymore ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants