markfasheh / ocfs2-tools Goto Github PK
View Code? Open in Web Editor NEWLicense: GNU General Public License v2.0
License: GNU General Public License v2.0
These are tools for the OCFS2 filesystem.
There is a risk of array index out of bounds in the main functions of files blkid/cache.c, blkid/save.c, and blkid/read.c. When argc is greater than 2, the test program prints an error log and exits. If the second parameter is not entered when executing the command, argc is 1 and the parameter verification can be passed. In the following code, an array index out of bounds error occurs when using argv[1] to obtain a value.
For example, in the code in blkid/save.c, if argc equals 1, the array index is out of bounds on line 182.
#ifdef TEST_PROGRAM
int main(int argc, char **argv)
{
blkid_cache cache = NULL;
int ret;
blkid_debug_mask = DEBUG_ALL;
if (argc > 2) {
fprintf(stderr, "Usage: %s [filename]\n"
"Test loading/saving a cache (filename)\n", argv[0]);
exit(1);
}
if ((ret = blkid_get_cache(&cache, "/dev/null")) != 0) {
fprintf(stderr, "%s: error creating cache (%d)\n",
argv[0], ret);
exit(1);
}
if ((ret = blkid_probe_all(cache)) < 0) {
fprintf(stderr, "error (%d) probing devices\n", ret);
exit(1);
}
cache->bic_filename = blkid_strdup(argv[1]); // line 182
if ((ret = blkid_flush_cache(cache)) < 0) {
fprintf(stderr, "error (%d) saving cache\n", ret);
exit(1);
}
blkid_put_cache(cache);
return ret;
}
#endif
I think the '>' in these main functions should be replaced with '<', which means the number of parameters must be greater than or equal to 2.
It seems like defragfs binary added in the 1.8.6 release always segfaults:
# defragfs.ocfs2 /tmp
defragfs.ocfs2 1.8.6
"/tmp":Not within ocfs2 fs
Failed to get file info:: Bad address
Segmentation fault
For some reason it thinks there is an additional parameter after /tmp and tries to access an invalid address there.
I build rpms of ocfs2-tools on Fedora, and run rpmlint over them. rpmlint reports several files use incorrect FSF address.
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/init.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/console.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/about.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/format.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/bosa.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/partitionview.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/classlabel.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/process.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/pushconfig.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/terminal.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/confdefs.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/fstab.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/toolbar.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/ipwidget.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/menu.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/nodeconfig.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/guiutil.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/mount.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/fswidgets.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/general.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/ls.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/tune.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/fsck.py
ocfs2console.x86_64: E: incorrect-fsf-address /usr/lib64/python2.7/site-packages/ocfs2interface/o2cb_ctl.py
ocfs2-tools.x86_64: E: incorrect-fsf-address /usr/share/doc/ocfs2-tools/COPYING
ocfs2-tools-debuginfo.x86_64: E: incorrect-fsf-address /usr/src/debug/ocfs2-tools-ocfs2-tools-1.8.5/include/ocfs2/kernel-rbtree.h
ocfs2-tools-debuginfo.x86_64: E: incorrect-fsf-address /usr/src/debug/ocfs2-tools-ocfs2-tools-1.8.5/libocfs2/kernel-rbtree.c
ocfs2-tools-devel.x86_64: E: incorrect-fsf-address /usr/include/ocfs2/kernel-rbtree.h
Fedora rawhide(28)
glibc-2.26.90-14.fc28.x86_64
# cd fsck.ocfs2
# gcc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -pipe -I../include -Iinclude -DVERSION=\"1.8.5\" -MD -MP -MF ./.pass4.d -o pass4.o -c pass4.c
In file included from /usr/include/string.h:431:0,
from ../include/ocfs2/ocfs2.h:41,
from pass4.c:32:
include/strings.h:37:1: error: unknown type name ‘errcode_t’; did you mean ‘mode_t’?
errcode_t o2fsck_strings_insert(o2fsck_strings *strings, char *string,
^~~~~~~~~
mode_t
/usr/include/string.h includes <strings.h> from fsck.ocfs2/include/strings.h.
A fix may be renaming fsck.ocfs2/include/strings.h.
hi, @josephhz
It has been more than two years since the last version, what is the version plan?
Is it possible to release a new version with some bug fixes or new features?
On Ubuntu 20.04 the service o2cb
has some important commands missing, such as online
, offline
, and configure
. The issue doesn't happen on Ubuntu 18.04 and below.
Ubuntu 18.04:
$ o2cb --version
o2cb 1.8.5
$ sudo service o2cb something
Usage: /etc/init.d/o2cb {start|stop|restart|force-reload|enable|disable|configure|load|unload|online|offline|force-offline|status|online-status}
Ubuntu 20.04:
$ o2cb --version
o2cb 1.8.6
$ sudo service o2cb online
Usage: /etc/init.d/o2cb {start|stop|status|restart|try-restart|force-reload}
In both cases I installed o2cb
via:
$ sudo apt-get update && sudo apt-get install ocfs2-tools -y
Is there something I am missing? The manpage for Ubuntu 20.04 does mention the online
command.
Hello,
I'm trying to build version 1.8.5 as packaged in the release tarball for it on Arch Linux,
but it always errors out in the first run of the Makefile and succeeds in the second one.
The errors occur when I try to compile with -j1 or with the number of workers as the number of threads on the system.
/usr/bin/python
is python3
automake -v
1.15
gcc -v
.3.1
Shell is bash.
CFLAGS="-march=native -mtune=native -O2 -pipe -fstack-protector --param=ssp-buffer-size=4"
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro"
The errors can be one of the following:
make[1]: Entering directory '/home/thermi/aur/AUR4/ocfs2-tools/src/ocfs2-tools-ocfs2-tools-1.8.5/libo2cb'
gcc -march=native -mtune=native -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -g -fvar-tracking-assignments -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -pipe -fPIC -D_FORTIFY_SOURCE=2 -I../include -I. -MD -MP -MF ./.o2cb_abi.d -o o2cb_abi.o -c o2cb_abi.c
In file included from o2cb_abi.c:52:0:
../include/ocfs2/ocfs2.h:57:29: fatal error: ocfs2/ocfs2_err.h: No such file or directory
#include <ocfs2/ocfs2_err.h>
^
compilation terminated.
make[1]: *** [../Postamble.make:40: o2cb_abi.o] Error 1
make -C fsck.ocfs2
make[1]: Entering directory '/home/thermi/aur/AUR4/ocfs2-tools/src/ocfs2-tools-ocfs2-tools-1.8.5/fsck.ocfs2'
generating prompt-codes.h by parsing fsck.ocfs2.checks.8.in
make[1]: *** No rule to make target '../libo2cb/libo2cb.a', needed by 'fsck.ocfs2'. Stop.
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory '/home/thermi/aur/AUR4/ocfs2-tools/src/ocfs2-tools-ocfs2-tools-1.8.5/fsck.ocfs2'
make: *** [Postamble.make:54: fsck.ocfs2] Error 2
Hello,
There is a reflink functionnality mentionned in the manpage, but how to use it is not documented.
Oracle documentation and blog mention a reflink
command line utility that cannot be found in this package.
Am i missing something ?
Regards.
Hi
On gentoo i cant pass configure
#./configure
...
checking for tgetstr in -lncurses... no
configure: error: Unable to find ncurses library
pkg-config show
-lncurses -ltinfo
libncursesw.so.6 -> libncursesw.so.6.1
libncurses.so.6 -> libncurses.so.6.1
libncurses++.so.6 -> libncurses++.so.6.1
libncurses++w.so.6 -> libncurses++w.so.6.1
ltinfo is the problem ?
Hello,
I ran ./autogen.sh
in CentOS 8.1 but I got error as
checking for com_err... checking for com_err in -lcom_err... no
configure: error: Unable to find com_err library
Libcom_err-1.44 was installed.
Any idea about it?
Sincerely,
Yongsheng
User reported that o2cb clusters can't be configured with IPv6 addresses:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=975302
Is there a plan to add IPv6 support or do you recommend new clusters to use Pacemaker and DLM instead?
Since glibc git 663e7d78 (to be 2.28), type loff_t will be only defined
when _DEFAULT_SOURCE defined. And with _XOPEN_SOURCE defined, _DEFAULT_SOURCE
will not be defined by default.
Build failed with
make[1]: Entering directory '/builddir/build/BUILD/ocfs2-tools-ocfs2-tools-1.8.5/libo2cb'
gcc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -mcet -fcf-protection -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -pipe -fPIC -I../include -I. -DHAVE_CMAP -DHAVE_FSDLM -MD -MP -MF ./.o2cb_abi.d -o o2cb_abi.o -c o2cb_abi.c
In file included from o2cb_abi.c:52:
../include/ocfs2/ocfs2.h:222:2: error: unknown type name 'loff_t'
loff_t d_off; /* Offset of structure in the file */
^~~~~~
There are ways to fix this issue:
A simple script is used to validate ocfs2-tools
#!/bin/sh
set -e
DISK=$AUTOPKGTEST_TMP/disk
cleanup () {
umount /mnt || true
[ "$LOOP" ] && losetup -d $LOOP
rm -f $DISK $DISK.image || true
service o2cb stop
sed -i -e 's/^O2CB_ENABLED=.*/O2CB_ENABLED=false/' /etc/default/o2cb
}
trap "cleanup" 0 2 3 15
# configure cluster
HOSTNAME=$(hostname)
cat >/etc/ocfs2/cluster.conf <<EOF
cluster:
node_count = 1
name = ocfs2
node:
ip_port = 7777
ip_address = 127.0.0.1
number = 0
name = $HOSTNAME
cluster = ocfs2
EOF
# start cluster
sed -i -e 's/^O2CB_ENABLED=.*/O2CB_ENABLED=true/' /etc/default/o2cb
service o2cb restart
# check cluster
echo "=== dlmfs ==="
grep '^ocfs2_dlmfs /dlm' /proc/mounts
echo "=== lsmod ==="
lsmod | grep ocfs2_stack_o2cb
echo "=== o2hbmonitor ==="
pgrep -a o2hbmonitor
# print info
echo "=== o2cluster ==="
o2cluster -r
echo "=== o2cb_ctl ==="
o2cb_ctl -I -n $HOSTNAME
# create test disk
echo "=== losetup ==="
dd if=/dev/zero of=$DISK bs=1M count=200 2>&1
LOOP=$(losetup --find --show $DISK)
# test tools
echo "=== mkfs ==="
mkfs.ocfs2 --cluster-stack=o2cb --cluster-name=ocfs2 $LOOP 2>&1
echo "=== o2image ==="
o2image $LOOP $DISK.image
ls -l $DISK.image
echo "=== fsck ==="
fsck.ocfs2 -f -y $LOOP 2>&1
echo "=== o2cluster ==="
o2cluster -o $LOOP
echo "=== tunefs ==="
tunefs.ocfs2 -L $DISK -N 3 -Q 'Label = %V\nNumSlots = %N\n' $LOOP
echo "=== debugfs ==="
debugfs.ocfs2 -R stats $LOOP
echo "=== o2info ==="
o2info --volinfo $LOOP
echo "=== grow ==="
dd if=/dev/zero of=$DISK bs=1M count=50 seek=200 2>&1
losetup --set-capacity $LOOP
tunefs.ocfs2 -S $LOOP
echo "=== mount ==="
mount $LOOP /mnt
df /mnt
echo "=== mounted ==="
mounted.ocfs2 -d
mounted.ocfs2 -f
It fails with segmentation fault at this step:
o2image $LOOP $DISK.image
on an s390x big endian machine like so:
(gdb) run /dev/loop2 /home/ubuntu/disk.image
Starting program: /sbin/o2image /dev/loop2 /home/ubuntu/disk.image
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/s390x-linux-gnu/libthread_db.so.1".
Program received signal SIGSEGV, Segmentation fault.
0x0000000100009aea in ocfs2_set_bit (nr=0, addr=0x0) at bitops.c:52
warning: Source file is more recent than executable.
52 retval = (mask & *ADDR) != 0;
(gdb) bt full
#0 0x0000000100009aea in ocfs2_set_bit (nr=0, addr=0x0) at bitops.c:52
mask = 1
retval = 0
ADDR = 0x0
#1 0x000000010001c782 in ocfs2_image_mark_bitmap (ofs=0x10005b280, blkno=229376) at image.c:250
ost = 0x10005e000
bitmap_blk = 7
bit = 0
#2 0x0000000100007728 in traverse_extents (ofs=0x10005b280, el=0x10007bcc0) at o2image.c:117
eb = 0x10007bc00
rec = 0x10007bcd0
ost = 0x10005e000
ret = 0
buf = 0x10007cc00 ""
i = 0
j = 229096
#3 0x0000000100008072 in traverse_inode (ofs=0x10005b280, inode=10) at o2image.c:317
super = 0x10005c8c0
ost = 0x10005e000
di = 0x10007bc00
ret = 0
dump_type = 1
buf = 0x10007bc00 "INODE01"
slot = 2
#4 0x0000000100007524 in traverse_group_desc (ofs=0x10005b280, grp=0x100079400, dump_type=2, bpc=4)
at o2image.c:76
ret = 0
blkno = 10
i = 2
#5 0x000000010000792e in traverse_chains (ofs=0x10005b280, cl=0x1000780c0, dump_type=2)
at o2image.c:155
grp = 0x100079400
rec = 0x1000780d0
ret = 0
buf = 0x100079400 "GROUP01"
blkno = 8
i = 0
#6 0x0000000100007f44 in traverse_inode (ofs=0x10005b280, inode=12) at o2image.c:291
super = 0x10005c8c0
ost = 0x10005e000
di = 0x100078000
ret = 0
dump_type = 2
buf = 0x100078000 "INODE01"
slot = 2
#7 0x0000000100009028 in scan_raw_disk (ofs=0x10005b280) at o2image.c:633
ost = 0x10005e000
bits_set = 0
ret = 51600209153546527
i = 0
j = 0
#8 0x00000001000097e8 in main (argc=3, argv=0x3fffffff5c8) at o2image.c:780
ofs = 0x10005b280
ret = 0
src_file = 0x3fffffff81b "/dev/loop2"
dest_file = 0x3fffffff826 "/home/ubuntu/disk.image"
open_flags = 0
raw_flag = 0
install_flag = 0
---Type <return> to continue, or q <return> to quit---
interactive = 0
fd = 1
c = -1
Seems like a null-pointer dereference... or an endianess bug. Specifically something might be of the wrong type, and instead of implicitly accessing the lower portion of an int (like on all little endian arches) the top bits are accessed instead which are all zeros?
I'm not sure if this is the right place to ask this, if there's another one, please let me know.
I can't seem to have global heartbeat work, using OCFS2 1.8.6 on Ubuntu (20.04). The local heartbeat mode works fine though.
Here's my setup:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 33.3M 1 loop /snap/amazon-ssm-agent/3552
loop1 7:1 0 25M 1 loop /snap/amazon-ssm-agent/4046
loop2 7:2 0 55.5M 1 loop /snap/core18/1997
loop3 7:3 0 55.4M 1 loop /snap/core18/2128
loop4 7:4 0 70.3M 1 loop /snap/lxd/21029
loop5 7:5 0 32.3M 1 loop /snap/snapd/12704
loop6 7:6 0 32.3M 1 loop /snap/snapd/11588
loop7 7:7 0 70.4M 1 loop /snap/lxd/19647
nvme1n1 259:0 0 128G 0 disk
nvme0n1 259:1 0 16G 0 disk
└─nvme0n1p1 259:2 0 16G 0 part /
$ sudo mkfs.ocfs2 --cluster-stack=o2cb --cluster-name=ocfs2 --global-heartbeat /dev/nvme1n1
mkfs.ocfs2 1.8.6
Cluster stack: o2cb
Cluster name: ocfs2
Stack Flags: 0x1
NOTE: Feature extended slot map may be enabled
Label:
Features: sparse extended-slotmap backup-super unwritten inline-data strict-journal-super xattr indexed-dirs refcount discontig-bg append-dio
Block size: 4096 (12 bits)
Cluster size: 4096 (12 bits)
Volume size: 68719476736 (16777216 clusters) (16777216 blocks)
Cluster groups: 521 (tail covers 4096 clusters, rest cover 32256 clusters)
Extent allocator size: 12582912 (3 groups)
Journal size: 268435456
Node slots: 8
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 3 block(s)
Formatting Journals: done
Growing extent allocator: done
Formatting slot map: done
Formatting quota files: done
Writing lost+found: done
mkfs.ocfs2 successful
$ sudo o2cb add-cluster ocfs2
$ sudo o2cb add-node ocfs2 ip-172-31-32-10 --ip 172.31.32.10
$ sudo o2cb add-node ocfs2 ip-172-31-32-20 --ip 172.31.32.20
$ sudo o2cb add-heartbeat ocfs2 /dev/nvme1n1
$ sudo o2cb heartbeat-mode ocfs2 global
$ cat /etc/ocfs2/cluster.conf
cluster:
name = ocfs2
heartbeat_mode = global
node_count = 2
heartbeat:
cluster = ocfs2
region = 1FFE62175A94430EAF3BDD5E28964126
node:
cluster = ocfs2
number = 0
ip_port = 7777
ip_address = 172.31.32.10
name = ip-172-31-32-10
node:
cluster = ocfs2
number = 1
ip_port = 7777
ip_address = 172.31.32.20
name = ip-172-31-32-20
$ sudo tunefs.ocfs2 -Q "Label = %V\nUUID = %U\nNumSlots =%N\n" /dev/nvme1n1
Label =
UUID = 1FFE62175A94430EAF3BDD5E28964126
NumSlots =8
$ ll /sys/kernel/config/cluster/ocfs2/heartbeat/
total 0
drwxr-xr-x 2 root root 0 Aug 14 11:14 ./
drwxr-xr-x 4 root root 0 Aug 14 11:14 ../
-rw-r--r-- 1 root root 4096 Aug 14 11:14 dead_threshold
-rw-r--r-- 1 root root 4096 Aug 14 11:20 mode
$ cat /sys/kernel/config/cluster/ocfs2/heartbeat/mode
global
Then if I try to run o2cb
I get (online
instead of enable
gives the same output):
$ sudo service o2cb enable
checking debugfs...
Setting cluster stack "o2cb": OK
Registering O2CB cluster "ocfs2": OK
Setting O2CB cluster timeouts : OK
Starting global heartbeat for cluster "ocfs2": Failed
o2cb: Heartbeat region could not be found 1FFE62175A94430EAF3BDD5E28964126
Stopping global heartbeat on cluster "ocfs2": OK
As you can see the heartbeat region can't be found, despite my heartbeat device being initialized with --global-heartbeat
and having the correct UUID
. The device has no partition on it.
The nodes configuration seems correct since in local heartbeat mode the same settings work fine.
I've repeated the setup multiple times from fresh installations and I've read multiple guides which all seem to align with this. dmesg
doesn't show any error, it just says o2hb: Heartbeat mode set to global
as expected.
Any idea on what could be wrong?
I'm playing around with building on Ubuntu 14.04 and tried:
./configure --prefix=/tmp/ocfs2-tools
make
make install
However, the install is attempting to copy the following files directly under /sbin/
:
o2image
mount.ocfs2
ocfs2_hb_ctl
o2cb
o2cb_ctl
debugfs.ocfs2
o2cluster
tunefs.ocfs2
mounted.ocfs2
mkfs.ocfs2
fsck.ocfs2
Is this expected behaviour!?
After Executing the command "mkfs.ocfs2 -C 32k -J block64 [dev] -x" to mkfs a device with a size of about 129T, but the corresponding ocfs2 volume size is only about 1T. The "mkfs" command produces the following output:
Volume size: 1099509530624 (33554368 clusters) (268434944 blocks)
I checked the global_bitmap and its total bit is only 33554368, consistent with the above result.
I checked the code of mkfs and found that the error occurred at the following code section of fill_defaults() function . In the first line of the following code section,'s->volume_size_in_bytes' is of type uint64_t , 's->volume_size_in_clusters' is of type uint32_t. When the device size exceeds 128T and the Cluster_size is specified as 32k, the calculation result on the right side will exceed the maximum value of uint32_t, resulting in the truncated result in 's->volume_size_in_clusters'. Later, because the volume size needs to be cluster aligned, the wrong result is passed to 's->volume_size_in_bytes',resulting in an incorrect mkfs result.
<mkfs.ocfs2/mkfs.c>
s->volume_size_in_clusters = s->volume_size_in_bytes >> s->cluster_size_bits;
tmp = (uint64_t)s->volume_size_in_clusters;
s->volume_size_in_bytes = tmp << s->cluster_size_bits;
s->volume_size_in_blocks = s->volume_size_in_bytes >> s->blocksize_bits;
Will changing the member volume_size_in_clusters in struct _State to type uint64_t make the program more reliable?
Hi,
with version 1.8.6, a new tool was made available: defragfs.ocfs2. The debian package added a test for it, and ubuntu runs that test as well. Ubuntu runs it on more architectures, though, and while it passed in less than 1s on amd64, it hangs on arm64 and ppc64el, consuming 99% CPU. No visible I/O is happening (checked with iostat 2). and strace shows just the version being printed to stdout (ls -la
and date
are my own debugging, and I changed debian's test a bit to copy /usr/bin
instead of /bin
, which is a symlink in Ubuntu):
=== defragfs ===
+ cp -a /usr/bin /mnt
+ ls -la /mnt/
total 46
drwxr-xr-x 4 root root 824 Aug 21 17:53 .
drwxr-xr-x 20 root root 4096 Aug 21 17:52 ..
drwxr-xr-x 2 root root 34816 Aug 21 17:51 bin
drwxr-xr-x 2 root root 824 Aug 21 17:52 lost+found
+ date
Wed Aug 21 17:53:11 UTC 2019
+ defragfs.ocfs2 -v /mnt
defragfs.ocfs2 1.8.6
<stuck here>
strace:
2129 execve("/usr/sbin/defragfs.ocfs2", ["defragfs.ocfs2", "-v", "/mnt"], 0xfffffa721f38 /* 14 vars */) = 0
2129 brk(NULL) = 0xaaaaef690000
2129 faccessat(AT_FDCWD, "/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
2129 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2129 fstat(3, {st_mode=S_IFREG|0644, st_size=34705, ...}) = 0
2129 mmap(NULL, 34705, PROT_READ, MAP_PRIVATE, 3, 0) = 0xffff95391000
2129 close(3) = 0
2129 openat(AT_FDCWD, "/lib/aarch64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2129 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\360C\2\0\0\0\0\0"..., 832) = 832
2129 fstat(3, {st_mode=S_IFREG|0755, st_size=1446640, ...}) = 0
2129 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffff9538f000
2129 mmap(NULL, 1514856, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xffff951fb000
2129 mprotect(0xffff95354000, 65536, PROT_NONE) = 0
2129 mmap(0xffff95364000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x159000) = 0xffff95364000
2129 mmap(0xffff9536a000, 11624, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff9536a000
2129 close(3) = 0
2129 mprotect(0xffff95364000, 12288, PROT_READ) = 0
2129 mprotect(0xaaaac5884000, 4096, PROT_READ) = 0
2129 mprotect(0xffff9539c000, 4096, PROT_READ) = 0
2129 munmap(0xffff95391000, 34705) = 0
2129 rt_sigaction(SIGTERM, {sa_handler=0xaaaac5872b70, sa_mask=[TERM], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
2129 rt_sigaction(SIGINT, {sa_handler=0xaaaac5872b70, sa_mask=[INT], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
2129 fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(0x88, 0), ...}) = 0
2129 brk(NULL) = 0xaaaaef690000
2129 brk(0xaaaaef6b1000) = 0xaaaaef6b1000
2129 write(1, "defragfs.ocfs2 1.8.6\n", 21) = 21
<stuck here>
A few seconds of iostat 2
:
$ iostat 2
Linux 5.2.0-13-generic (eoan-arm64) 08/21/19 _aarch64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
73.97 0.38 1.61 0.03 0.00 24.01
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.04 0.27 0.00 799 0
loop1 0.62 1.09 0.00 3189 0
loop2 69.33 46.78 66.65 137482 195861
vda 7.44 119.87 601.05 352272 1766317
avg-cpu: %user %nice %system %iowait %steal %idle
100.00 0.00 0.00 0.00 0.00 0.00
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 0 0
loop1 0.00 0.00 0.00 0 0
loop2 1.00 0.25 0.25 0 0
vda 0.00 0.00 0.00 0 0
avg-cpu: %user %nice %system %iowait %steal %idle
100.00 0.00 0.00 0.00 0.00 0.00
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 0 0
loop1 0.00 0.00 0.00 0 0
loop2 1.00 0.25 0.25 0 0
vda 1.00 0.00 12.00 0 24
avg-cpu: %user %nice %system %iowait %steal %idle
100.00 0.00 0.00 0.00 0.00 0.00
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 0 0
loop1 0.00 0.00 0.00 0 0
loop2 1.00 0.25 0.25 0 0
vda 0.00 0.00 0.00 0 0
Kernel is 5.2.0-13-generic
This is the debian commit which added the test,and you can get the full test file from there as well: https://salsa.debian.org/ha-team/ocfs2-tools/commit/4db396488fe4c058bbc2e3b81529595aee3855ef
Hello,
There haven't been any releases since 2017 but there are lots of changes piled up that are needed. Could you please tag and public a stable release (and preferably in the regularly in the future as well), so we maintainers (I'm maintaining it on the AUR) can follow along without having to pick out single patches?
Kind regards
Thermi
During mount of ocfs2, a strange error is printed by the kernel mentioning floppy device.
The mount itself is successful but not sure why the message appears?
[ 124.975017] ocfs2: Mounting device (7,0) on (node 1, slot 0) with ordered data mode.
[ 125.027710] blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 125.029687] floppy: error 10 while reading block 0
[ 125.027710] blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 125.029687] floppy: error 10 while reading block 0
[ 125.127751] blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 125.132061] floppy: error 10 while reading block 0
[ 125.127751] blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 125.132061] floppy: error 10 while reading block 0
at commit 401407e
Fedora 26
gcc-7.1.1-3.fc26.x86_64
$ cd tunefs.ocfs2
$ gcc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -pipe -I../include -Iinclude -DVERSION=\"1.8.5\" -MD -MP -MF ./.op_query.d -o op_query.o -c op_query.c
op_query.c: In function ‘query_run’:
op_query.c:327:2: warning: ‘register_printf_function’ is deprecated [-Wdeprecated-declarations]
register_printf_function('B', handle_blocksize, handle_arginfo);
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: declared here
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:327:50: warning: passing argument 3 of ‘register_printf_function’ from incompatible pointer type [-Wincompatible-pointer-types]
register_printf_function('B', handle_blocksize, handle_arginfo);
^~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: expected ‘int (*)(const struct printf_info *, size_t, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *)}’ but argument is of type ‘int (*)(const struct printf_info *, size_t, int *, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *, int *)}’
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:328:2: warning: ‘register_printf_function’ is deprecated [-Wdeprecated-declarations]
register_printf_function('T', handle_clustersize, handle_arginfo);
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: declared here
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:328:52: warning: passing argument 3 of ‘register_printf_function’ from incompatible pointer type [-Wincompatible-pointer-types]
register_printf_function('T', handle_clustersize, handle_arginfo);
^~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: expected ‘int (*)(const struct printf_info *, size_t, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *)}’ but argument is of type ‘int (*)(const struct printf_info *, size_t, int *, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *, int *)}’
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:329:2: warning: ‘register_printf_function’ is deprecated [-Wdeprecated-declarations]
register_printf_function('N', handle_numslots, handle_arginfo);
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: declared here
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:329:49: warning: passing argument 3 of ‘register_printf_function’ from incompatible pointer type [-Wincompatible-pointer-types]
register_printf_function('N', handle_numslots, handle_arginfo);
^~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: expected ‘int (*)(const struct printf_info *, size_t, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *)}’ but argument is of type ‘int (*)(const struct printf_info *, size_t, int *, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *, int *)}’
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:330:2: warning: ‘register_printf_function’ is deprecated [-Wdeprecated-declarations]
register_printf_function('R', handle_rootdir, handle_arginfo);
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: declared here
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:330:48: warning: passing argument 3 of ‘register_printf_function’ from incompatible pointer type [-Wincompatible-pointer-types]
register_printf_function('R', handle_rootdir, handle_arginfo);
^~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: expected ‘int (*)(const struct printf_info *, size_t, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *)}’ but argument is of type ‘int (*)(const struct printf_info *, size_t, int *, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *, int *)}’
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:331:2: warning: ‘register_printf_function’ is deprecated [-Wdeprecated-declarations]
register_printf_function('Y', handle_sysdir, handle_arginfo);
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: declared here
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:331:47: warning: passing argument 3 of ‘register_printf_function’ from incompatible pointer type [-Wincompatible-pointer-types]
register_printf_function('Y', handle_sysdir, handle_arginfo);
^~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: expected ‘int (*)(const struct printf_info *, size_t, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *)}’ but argument is of type ‘int (*)(const struct printf_info *, size_t, int *, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *, int *)}’
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:332:2: warning: ‘register_printf_function’ is deprecated [-Wdeprecated-declarations]
register_printf_function('P', handle_clustergroup, handle_arginfo);
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: declared here
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:332:53: warning: passing argument 3 of ‘register_printf_function’ from incompatible pointer type [-Wincompatible-pointer-types]
register_printf_function('P', handle_clustergroup, handle_arginfo);
^~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: expected ‘int (*)(const struct printf_info *, size_t, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *)}’ but argument is of type ‘int (*)(const struct printf_info *, size_t, int *, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *, int *)}’
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:334:2: warning: ‘register_printf_function’ is deprecated [-Wdeprecated-declarations]
register_printf_function('V', handle_label, handle_arginfo);
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: declared here
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:334:46: warning: passing argument 3 of ‘register_printf_function’ from incompatible pointer type [-Wincompatible-pointer-types]
register_printf_function('V', handle_label, handle_arginfo);
^~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: expected ‘int (*)(const struct printf_info *, size_t, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *)}’ but argument is of type ‘int (*)(const struct printf_info *, size_t, int *, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *, int *)}’
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:335:2: warning: ‘register_printf_function’ is deprecated [-Wdeprecated-declarations]
register_printf_function('U', handle_uuid, handle_arginfo);
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: declared here
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:335:45: warning: passing argument 3 of ‘register_printf_function’ from incompatible pointer type [-Wincompatible-pointer-types]
register_printf_function('U', handle_uuid, handle_arginfo);
^~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: expected ‘int (*)(const struct printf_info *, size_t, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *)}’ but argument is of type ‘int (*)(const struct printf_info *, size_t, int *, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *, int *)}’
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:337:2: warning: ‘register_printf_function’ is deprecated [-Wdeprecated-declarations]
register_printf_function('M', handle_compat, handle_arginfo);
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: declared here
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:337:47: warning: passing argument 3 of ‘register_printf_function’ from incompatible pointer type [-Wincompatible-pointer-types]
register_printf_function('M', handle_compat, handle_arginfo);
^~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: expected ‘int (*)(const struct printf_info *, size_t, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *)}’ but argument is of type ‘int (*)(const struct printf_info *, size_t, int *, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *, int *)}’
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:338:2: warning: ‘register_printf_function’ is deprecated [-Wdeprecated-declarations]
register_printf_function('H', handle_incompat, handle_arginfo);
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: declared here
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:338:49: warning: passing argument 3 of ‘register_printf_function’ from incompatible pointer type [-Wincompatible-pointer-types]
register_printf_function('H', handle_incompat, handle_arginfo);
^~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: expected ‘int (*)(const struct printf_info *, size_t, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *)}’ but argument is of type ‘int (*)(const struct printf_info *, size_t, int *, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *, int *)}’
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:339:2: warning: ‘register_printf_function’ is deprecated [-Wdeprecated-declarations]
register_printf_function('O', handle_ro_compat, handle_arginfo);
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: declared here
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:339:50: warning: passing argument 3 of ‘register_printf_function’ from incompatible pointer type [-Wincompatible-pointer-types]
register_printf_function('O', handle_ro_compat, handle_arginfo);
^~~~~~~~~~~~~~
In file included from op_query.c:21:0:
/usr/include/printf.h:105:12: note: expected ‘int (*)(const struct printf_info *, size_t, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *)}’ but argument is of type ‘int (*)(const struct printf_info *, size_t, int *, int *) {aka int (*)(const struct printf_info *, long unsigned int, int *, int *)}’
extern int register_printf_function (int __spec, printf_function __func,
^~~~~~~~~~~~~~~~~~~~~~~~
op_query.c:342:2: error: format not a string literal and no format arguments [-Werror=format-security]
fprintf(stdout, fmt);
^~~~~~~
cc1: some warnings being treated as errors
While testing ocfs2-tools I noticed that kernel 5.3.9 enters a crash loop after some ocfs2 errors so I wonder if this is a know bug somewhere?
[ 101.538203] ocfs2: Mounting device (7,0) on (node 0, slot 0) with ordered data mode.
[ 101.616011] blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 101.619168] floppy: error 10 while reading block 0
[ 101.720020] blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 101.724018] floppy: error 10 while reading block 0
[ 101.847482] (cp,1633,0):ocfs2_xa_set:2242 ERROR: status = -22
[ 101.848302] (cp,1633,0):ocfs2_xattr_ibody_set:2786 ERROR: status = -22
[ 105.999960] o2dlm: Leaving domain F2DFFDA43E844B1CB2F230D9E08CF18E
[ 106.051772] blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 106.055753] floppy: error 10 while reading block 0
[ 107.536390] ocfs2: Unmounting device (7,0) on (node 0)
[ 108.116585] ocfs2: Unregistered cluster interface o2cb
[ 121.227597] general protection fault: 0000 [#1] SMP PTI
[ 121.228131] CPU: 0 PID: 2172 Comm: invoke-rc.d Not tainted 5.3.0-2-amd64 #1 Debian 5.3.9-2
[ 121.228906] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
[ 121.229692] RIP: 0010:__kmalloc+0xa1/0x260
[ 121.230083] Code: 65 49 8b 50 08 65 4c 03 05 44 a4 bb 6d 4d 8b 30 4d 85 f6 0f 84 90 01 00 00 41 8b 5f 20 49 8b 3f 48 8d 4a 01 4c 89 f0 4c 01 f3 <48> 33 1b 49 33 9f 70 01 00 00 65 48 0f c7 0f 0f 94 c0 84 c0 74 bd
[ 121.232383] RSP: 0018:ffffa75940343c08 EFLAGS: 00010286
[ 121.233441] RAX: 817591233dcf4f99 RBX: 817591233dcf4f99 RCX: 00000000000570f0
[ 121.234679] RDX: 00000000000570ef RSI: 0000000000000dc0 RDI: 000000000002d8c0
[ 121.235929] RBP: 0000000000000dc0 R08: ffff96117ea2d8c0 R09: 0000000001010101
[ 121.237165] R10: 000000000101012e R11: 00000000d118c126 R12: 0000000000000032
[ 121.238398] R13: ffff96117e401700 R14: 817591233dcf4f99 R15: ffff96117e401700
[ 121.239624] FS: 00007f86494f1740(0000) GS:ffff96117ea00000(0000) knlGS:0000000000000000
[ 121.240934] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 121.242042] CR2: 000055ca6dba9a98 CR3: 0000000039578000 CR4: 00000000000006f0
[ 121.243272] Call Trace:
[ 121.244122] ? ext4_htree_store_dirent+0x36/0x100 [ext4]
[ 121.245204] ext4_htree_store_dirent+0x36/0x100 [ext4]
[ 121.246289] htree_dirblock_to_tree+0xf5/0x290 [ext4]
[ 121.247363] ? terminate_walk+0x8c/0x100
[ 121.248317] ext4_htree_fill_tree+0xa2/0x2e0 [ext4]
[ 121.249371] ? mem_cgroup_charge_statistics+0x4c/0xd0
[ 121.250440] ? _cond_resched+0x15/0x30
[ 121.251400] ? kmem_cache_alloc_trace+0x158/0x210
[ 121.252449] ext4_readdir+0x6fc/0xa90 [ext4]
[ 121.253439] iterate_dir+0x143/0x1a0
[ 121.254373] ksys_getdents64+0x9c/0x130
[ 121.255340] ? filldir+0x170/0x170
[ 121.256268] __x64_sys_getdents64+0x16/0x20
[ 121.257284] do_syscall_64+0x53/0x140
[ 121.258227] entry_SYSCALL_64_after_hwframe+0x44/0xa9
Hi,
I got ncurses installed, but configure doesn't find it.
pkg-config --libs ncurses
-lncursesw -ltinfo
checking for libaio.h... yes
checking for tgetstr in -lncurses... no
configure: error: Unable to find ncurses library
Please advise.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.