I have just uploaded a NMU. debdiff is attached.
diff -Nru xfsdump-3.1.9+0+nmu2/aclocal.m4 xfsdump-3.1.11/aclocal.m4
--- xfsdump-3.1.9+0+nmu2/aclocal.m4 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/aclocal.m4 2022-08-26 18:15:01.000000000 +0200
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.3 -*- Autoconf -*-
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff -Nru xfsdump-3.1.9+0+nmu2/common/drive.h xfsdump-3.1.11/common/drive.h
--- xfsdump-3.1.9+0+nmu2/common/drive.h 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/common/drive.h 2022-08-08 15:48:54.000000000 +0200
@@ -584,7 +584,7 @@
*/
void (*do_quit)(drive_t *drivep);
/* tells the drive manager to de-allocate
- * resources, INCLUDING the slave process.
+ * resources, INCLUDING the worker process.
*/
};
diff -Nru xfsdump-3.1.9+0+nmu2/common/drive_minrmt.c
xfsdump-3.1.11/common/drive_minrmt.c
--- xfsdump-3.1.9+0+nmu2/common/drive_minrmt.c 2020-01-31 18:30:58.000000000
+0100
+++ xfsdump-3.1.11/common/drive_minrmt.c 2022-08-08 15:48:54.000000000
+0200
@@ -186,7 +186,7 @@
* to media without error. includes media file header
* record. this is incremented when the actual I/O is
* done. dc_reccnt is different, indicating what has
- * been seen by client. slave may have read ahead /
+ * been seen by client. worker may have read ahead /
* written behind.
*/
int dc_fd;
@@ -211,7 +211,7 @@
* compression
*/
bool_t dc_singlethreadedpr;
- /* single-threaded operation (no slave)
+ /* single-threaded operation (no worker)
*/
bool_t dc_errorpr;
/* TRUE if error encountered during reading or writing.
@@ -687,7 +687,7 @@
return BOOL_TRUE;
}
-/* wait here for slave to complete initialization.
+/* wait here for worker to complete initialization.
* set drive capabilities flags. NOTE: currently don't make use of this
* feature: drive initialization done whenever block/record sizes unknown.
*/
@@ -2514,7 +2514,7 @@
if (ringp) {
display_ring_metrics(drivep, MLOG_VERBOSE);
- /* tell slave to die
+ /* tell worker to die
*/
mlog((MLOG_NITTY + 1) | MLOG_DRIVE,
"ring op: destroy\n");
@@ -3873,10 +3873,10 @@
bufszbuf,
bufszsfxp,
contextp->dc_ringpinnedpr ? _("pinned ") : "",
- ringp->r_slave_msgcnt - ringp->r_slave_blkcnt,
- ringp->r_slave_msgcnt,
- percent64(ringp->r_slave_msgcnt - ringp->r_slave_blkcnt,
- ringp->r_slave_msgcnt),
+ ringp->r_worker_msgcnt - ringp->r_worker_blkcnt,
+ ringp->r_worker_msgcnt,
+ percent64(ringp->r_worker_msgcnt - ringp->r_worker_blkcnt,
+ ringp->r_worker_msgcnt),
(double)(ringp->r_all_io_cnt)
*
(double)tape_recsz
diff -Nru xfsdump-3.1.9+0+nmu2/common/drive_scsitape.c
xfsdump-3.1.11/common/drive_scsitape.c
--- xfsdump-3.1.9+0+nmu2/common/drive_scsitape.c 2020-01-31
18:30:58.000000000 +0100
+++ xfsdump-3.1.11/common/drive_scsitape.c 2022-08-08 15:48:54.000000000
+0200
@@ -188,7 +188,7 @@
* to media without error. includes media file header
* record. this is incremented when the actual I/O is
* done. dc_reccnt is different, indicating what has
- * been seen by client. slave may have read ahead /
+ * been seen by client. worker may have read ahead /
* written behind.
*/
int dc_fd;
@@ -231,7 +231,7 @@
* compression
*/
bool_t dc_singlethreadedpr;
- /* single-threaded operation (no slave)
+ /* single-threaded operation (no worker)
*/
bool_t dc_errorpr;
/* TRUE if error encountered during reading or writing.
@@ -800,7 +800,7 @@
return BOOL_TRUE;
}
-/* wait here for slave to complete initialization.
+/* wait here for worker to complete initialization.
* set drive capabilities flags. NOTE: currently don't make use of this
* feature: drive initialization done whenever block/record sizes unknown.
*/
@@ -2752,7 +2752,7 @@
if (ringp) {
display_ring_metrics(drivep, MLOG_VERBOSE);
- /* tell slave to die
+ /* tell worker to die
*/
mlog((MLOG_NITTY + 1) | MLOG_DRIVE,
"ring op: destroy\n");
@@ -5156,10 +5156,10 @@
bufszbuf,
bufszsfxp,
contextp->dc_ringpinnedpr ? _("pinned ") : "",
- ringp->r_slave_msgcnt - ringp->r_slave_blkcnt,
- ringp->r_slave_msgcnt,
- percent64(ringp->r_slave_msgcnt - ringp->r_slave_blkcnt,
- ringp->r_slave_msgcnt),
+ ringp->r_worker_msgcnt - ringp->r_worker_blkcnt,
+ ringp->r_worker_msgcnt,
+ percent64(ringp->r_worker_msgcnt - ringp->r_worker_blkcnt,
+ ringp->r_worker_msgcnt),
(double)(ringp->r_all_io_cnt)
*
(double)tape_recsz
diff -Nru xfsdump-3.1.9+0+nmu2/common/main.c xfsdump-3.1.11/common/main.c
--- xfsdump-3.1.9+0+nmu2/common/main.c 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/common/main.c 2022-08-08 15:48:54.000000000 +0200
@@ -625,10 +625,10 @@
/* now do the second and third passes of drive initialization.
* allocate per-stream write and read headers. if a drive
- * manager uses a slave process, it should be created now,
- * using cldmgr_create(). each drive manager may use the slave to
+ * manager uses a worker process, it should be created now,
+ * using cldmgr_create(). each drive manager may use the worker to
* asynchronously read the media file header, typically a very
- * time-consuming chore. drive_init3 will synchronize with each slave.
+ * time-consuming chore. drive_init3 will synchronize with each worker.
*/
if (!init_error) {
#ifdef DUMP
@@ -1465,7 +1465,7 @@
exitcode = content_stream_restore(stix);
#endif /* RESTORE */
- /* let the drive manager shut down its slave thread
+ /* let the drive manager shut down its worker thread
*/
drivep = drivepp[stix];
(*drivep->d_opsp->do_quit)(drivep);
diff -Nru xfsdump-3.1.9+0+nmu2/common/ring.c xfsdump-3.1.11/common/ring.c
--- xfsdump-3.1.9+0+nmu2/common/ring.c 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/common/ring.c 2022-08-08 15:48:54.000000000 +0200
@@ -33,7 +33,7 @@
#include "cldmgr.h"
#include "ring.h"
-static int ring_slave_entry(void *ringctxp);
+static int ring_worker_entry(void *ringctxp);
ring_t *
ring_create(size_t ringlen,
@@ -72,14 +72,14 @@
ringp->r_active_in_ix = 0;
ringp->r_active_out_ix = 0;
ringp->r_client_cnt = 0;
- ringp->r_slave_cnt = 0;
+ ringp->r_worker_cnt = 0;
/* initialize the meters
*/
ringp->r_client_msgcnt = 0;
- ringp->r_slave_msgcnt = 0;
+ ringp->r_worker_msgcnt = 0;
ringp->r_client_blkcnt = 0;
- ringp->r_slave_blkcnt = 0;
+ ringp->r_worker_blkcnt = 0;
ringp->r_first_io_time = 0;
ringp->r_all_io_cnt = 0;
@@ -120,11 +120,11 @@
}
}
- /* kick off the slave thread
+ /* kick off the worker thread
*/
- ok = cldmgr_create(ring_slave_entry,
+ ok = cldmgr_create(ring_worker_entry,
drive_index,
- _("slave"),
+ _("worker"),
ringp);
assert(ok);
@@ -233,7 +233,7 @@
assert(ringp->r_client_cnt == 1);
}
- /* tell the slave to abort
+ /* tell the worker to abort
*/
msgp->rm_op = RING_OP_RESET;
ring_put(ringp, msgp);
@@ -263,7 +263,7 @@
ringp->r_active_in_ix = 0;
ringp->r_active_out_ix = 0;
ringp->r_client_cnt = 0;
- ringp->r_slave_cnt = 0;
+ ringp->r_worker_cnt = 0;
for (mix = 0; mix < ringp->r_len; mix++) {
ring_msg_t *msgp = &ringp->r_msgp[mix];
msgp->rm_mix = mix;
@@ -290,7 +290,7 @@
*/
msgp = ring_get(ringp);
- /* tell the slave to exit
+ /* tell the worker to exit
*/
msgp->rm_op = RING_OP_DIE;
ring_put(ringp, msgp);
@@ -308,7 +308,7 @@
ringp->r_len;
} while (msgp->rm_stat != RING_STAT_DIEACK);
- /* the slave is dead.
+ /* the worker is dead.
*/
qsem_free(ringp->r_ready_qsemh);
qsem_free(ringp->r_active_qsemh);
@@ -317,19 +317,19 @@
static ring_msg_t *
-ring_slave_get(ring_t *ringp)
+ring_worker_get(ring_t *ringp)
{
ring_msg_t *msgp;
- /* assert slave currently holds no messages
+ /* assert worker currently holds no messages
*/
- assert(ringp->r_slave_cnt == 0);
+ assert(ringp->r_worker_cnt == 0);
- /* bump slave message count and note if slave needs to block
+ /* bump worker message count and note if worker needs to block
*/
- ringp->r_slave_msgcnt++;
+ ringp->r_worker_msgcnt++;
if (qsemPwouldblock(ringp->r_active_qsemh)) {
- ringp->r_slave_blkcnt++;
+ ringp->r_worker_blkcnt++;
}
/* block until msg available on active queue ("P")
@@ -358,23 +358,23 @@
*/
msgp->rm_loc = RING_LOC_SLAVE;
- /* bump the count of messages held by the slave
+ /* bump the count of messages held by the worker
*/
- ringp->r_slave_cnt++;
+ ringp->r_worker_cnt++;
- /* return the msg to the slave
+ /* return the msg to the worker
*/
return msgp;
}
static void
-ring_slave_put(ring_t *ringp, ring_msg_t *msgp)
+ring_worker_put(ring_t *ringp, ring_msg_t *msgp)
{
- /* assert the slave holds exactly one message
+ /* assert the worker holds exactly one message
*/
- assert(ringp->r_slave_cnt == 1);
+ assert(ringp->r_worker_cnt == 1);
- /* assert the slave is returning the right message
+ /* assert the worker is returning the right message
*/
assert(msgp->rm_mix == ringp->r_ready_in_ix);
@@ -382,9 +382,9 @@
*/
assert(msgp->rm_loc == RING_LOC_SLAVE);
- /* decrement the count of messages held by the slave
+ /* decrement the count of messages held by the worker
*/
- ringp->r_slave_cnt--;
+ ringp->r_worker_cnt--;
/* update the message location
*/
@@ -402,7 +402,7 @@
}
static int
-ring_slave_entry(void *ringctxp)
+ring_worker_entry(void *ringctxp)
{
sigset_t blocked_set;
ring_t *ringp = (ring_t *)ringctxp;
@@ -424,7 +424,7 @@
ring_msg_t *msgp;
int rval;
- msgp = ring_slave_get(ringp);
+ msgp = ring_worker_get(ringp);
msgp->rm_rval = 0;
switch(msgp->rm_op) {
@@ -486,7 +486,7 @@
msgp->rm_stat = RING_STAT_IGNORE;
break;
}
- ring_slave_put(ringp, msgp);
+ ring_worker_put(ringp, msgp);
}
return 0;
diff -Nru xfsdump-3.1.9+0+nmu2/common/ring.h xfsdump-3.1.11/common/ring.h
--- xfsdump-3.1.9+0+nmu2/common/ring.h 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/common/ring.h 2022-08-08 15:48:54.000000000 +0200
@@ -21,16 +21,16 @@
/* ring - readahead/writeahead abstraction
*
* the ring is conceptually an ordered set of messages circulating between the
- * client thread and the I/O slave thread. a message can be in one of four
+ * client thread and the I/O worker thread. a message can be in one of four
* places: on the ready queue, held by the client, on the active queue, or held
- * by the slave. The client and slave can each hold at most one message at a
+ * by the worker. The client and worker can each hold at most one message at a
* time. all others must be on one of the two queues. the messages must
- * circulate in that order: ready, client, active, slave, ready, ...
+ * circulate in that order: ready, client, active, worker, ready, ...
* initially all messages are on the ready queue, with status set to
* INIT. The client uses ring_get to remove a message from the ready queue.
* the client can then use the message to read or write. to read, the client
* sets the op field to READ, and places the message on the active queue. the
- * slave will remove messages from the active queue, invoke the client-supplied
+ * worker will remove messages from the active queue, invoke the
client-supplied
* read function with the message's buffer, record the read function's return
* value in the message, set the message status to OK (read function returned
0)
* or ERROR (read returned non-zero), and place the message on the ready queue.
@@ -39,28 +39,28 @@
* except the client fills the buffer and sets the op to WRITE prior to placing
* the message on the active queue.
*
- * if the client-supplied read or write function returns an error, the slave
- * will set the message status to ERROR. the slave will pass all subsequent
+ * if the client-supplied read or write function returns an error, the worker
+ * will set the message status to ERROR. the worker will pass all subsequent
* messages appearing on the active queue directly to the ready queue with
- * no I/O done and the message status set to IGNORE. the slave will remain
+ * no I/O done and the message status set to IGNORE. the worker will remain
* in this state until a reset is performed (see below).
*
- * The client may at anytime place a NOP msg on the ring. the slave does
+ * The client may at anytime place a NOP msg on the ring. the worker does
* nothing with this mmessage other than to place it back on the ready queue
* with NOPACK status. This is useful for inhibiting read-ahead.
*
* To flush the ring, the client must repetatively place TRACE messages on the
- * active queue until it sees an IGNORE msg on the ready queue. the slave will
+ * active queue until it sees an IGNORE msg on the ready queue. the worker will
* simply transfer TRACErs from active to ready with no other action taken
* (other than to set the message status to IGNORE).
*
* the client may at any time reset the ring. the reset will return to the
- * client when the current I/O being executed by the slave completes, and
+ * client when the current I/O being executed by the worker completes, and
* all messages have been wiped clean and placed on the ready queue with
* status set to INIT. the ring_reset function accomplishes this internally by
* placing a RESET message on the active QUEUE, and continuing to remove
* messages from the ready queue (without placing them on the active queue)
- * until the RESET message is seen the slave responds to a reset message by
+ * until the RESET message is seen the worker responds to a reset message by
* setting the status to RESETACK, queueing the message on the ready queue, and
* waiting for a message from the active queue. ring_reset will then re-
* initialize the ring and return. note that the client may be holding one
@@ -68,7 +68,7 @@
* that message into the reset call. otherwise it must pass in NULL.
*
* the ring_destroy function may be invoked to shut down the ring and kill the
- * slave thread. it simply places a DIE message on the active queue, and waits
+ * worker thread. it simply places a DIE message on the active queue, and waits
* for a DIEACK response. it then de-allocates all semaphores memory allocated
* by ring_create.
*
@@ -76,7 +76,7 @@
* of the client. it is not perturbed during any ring operations.
*
* the ring maintains four performance metering values: the number of times
- * the slave and client attempted to get a message, and the number of times
+ * the worker and client attempted to get a message, and the number of times
* those attempts resulting in blocking.
*/
@@ -128,9 +128,9 @@
*/
struct ring {
off64_t r_client_msgcnt;
- off64_t r_slave_msgcnt;
+ off64_t r_worker_msgcnt;
off64_t r_client_blkcnt;
- off64_t r_slave_blkcnt;
+ off64_t r_worker_blkcnt;
time32_t r_first_io_time;
off64_t r_all_io_cnt;
/* ALL BELOW PRIVATE!!! */
@@ -143,7 +143,7 @@
size_t r_active_out_ix;
qsemh_t r_active_qsemh;
size_t r_client_cnt;
- size_t r_slave_cnt;
+ size_t r_worker_cnt;
int (*r_readfunc)(void *contextp, char *bufp);
int (*r_writefunc)(void *contextp, char *bufp);
void *r_clientctxp;
diff -Nru xfsdump-3.1.9+0+nmu2/common/stream.c xfsdump-3.1.11/common/stream.c
--- xfsdump-3.1.9+0+nmu2/common/stream.c 2020-01-31 18:30:58.000000000
+0100
+++ xfsdump-3.1.11/common/stream.c 2022-08-08 15:48:54.000000000 +0200
@@ -54,7 +54,7 @@
* Note that the stream list structure (updated via the stream_* functions)
* is indexed by pthread_t (tid). Multiple processes can be registered against
* the same stream index, typically: the primary content process that does the
- * work; and the drive slave process, which just processes stuff off the ring
+ * work; and the drive worker process, which just processes stuff off the ring
* buffer. In general having multiple tids registered per stream is not an
issue
* for termination status reporting, as the mlog_exit* logging functions only
* ever get called out of the primary content process.
diff -Nru xfsdump-3.1.9+0+nmu2/common/ts_mtio.h xfsdump-3.1.11/common/ts_mtio.h
--- xfsdump-3.1.9+0+nmu2/common/ts_mtio.h 2020-01-31 18:30:58.000000000
+0100
+++ xfsdump-3.1.11/common/ts_mtio.h 2022-08-08 15:48:54.000000000 +0200
@@ -611,7 +611,7 @@
#define MTCANT_IMM 0x80000 /* drive doesn't work correctly when
immediate mode rewind, etc. is enabled. Setting this bit
will disable immediate mode rewind on the drive, independent
- of the setting of tpsc_immediate_rewind (in master.d/tpsc) */
+ of the setting of tpsc_immediate_rewind (in the tpsc sysgen file) */
#define MTCAN_COMPRESS 0x100000 /* drive supports compression */
#define MTCAN_BUFFM 0x200000 /* drive supports writing of
* buffered filemarks */
diff -Nru xfsdump-3.1.9+0+nmu2/configure xfsdump-3.1.11/configure
--- xfsdump-3.1.9+0+nmu2/configure 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/configure 2022-08-26 18:15:01.000000000 +0200
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for xfsdump 3.1.9.
+# Generated by GNU Autoconf 2.69 for xfsdump 3.1.11.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@
# Identity of this package.
PACKAGE_NAME='xfsdump'
PACKAGE_TARNAME='xfsdump'
-PACKAGE_VERSION='3.1.9'
-PACKAGE_STRING='xfsdump 3.1.9'
+PACKAGE_VERSION='3.1.11'
+PACKAGE_STRING='xfsdump 3.1.11'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -1336,7 +1336,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures xfsdump 3.1.9 to adapt to many kinds of systems.
+\`configure' configures xfsdump 3.1.11 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1402,7 +1402,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of xfsdump 3.1.9:";;
+ short | recursive ) echo "Configuration of xfsdump 3.1.11:";;
esac
cat <<\_ACEOF
@@ -1510,7 +1510,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-xfsdump configure 3.1.9
+xfsdump configure 3.1.11
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1875,7 +1875,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by xfsdump $as_me 3.1.9, which was
+It was created by xfsdump $as_me 3.1.11, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -6717,11 +6717,11 @@
# to the OS version, if on x86, and 10.4, the deployment
# target defaults to 10.4. Don't you love it?
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+ 10.0,*86*-darwin8*|10.0,*-darwin[912]*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
10.[012][,.]*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined
${wl}suppress' ;;
- 10.*)
+ 10.*|11.*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
esac
;;
@@ -14299,7 +14299,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by xfsdump $as_me 3.1.9, which was
+This file was extended by xfsdump $as_me 3.1.11, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -14365,7 +14365,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //;
s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-xfsdump config.status 3.1.9
+xfsdump config.status 3.1.11
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff -Nru xfsdump-3.1.9+0+nmu2/configure.ac xfsdump-3.1.11/configure.ac
--- xfsdump-3.1.9+0+nmu2/configure.ac 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/configure.ac 2022-08-26 18:09:51.000000000 +0200
@@ -1,4 +1,4 @@
-AC_INIT([xfsdump], [3.1.9])
+AC_INIT([xfsdump], [3.1.11])
AC_PREREQ(2.50)
AC_CONFIG_AUX_DIR([.])
AC_CONFIG_MACRO_DIR([m4])
diff -Nru xfsdump-3.1.9+0+nmu2/debian/changelog xfsdump-3.1.11/debian/changelog
--- xfsdump-3.1.9+0+nmu2/debian/changelog 2022-01-19 11:22:32.000000000
+0100
+++ xfsdump-3.1.11/debian/changelog 2022-10-16 21:44:56.000000000 +0200
@@ -1,3 +1,12 @@
+xfsdump (3.1.11-0.1) unstable; urgency=medium
+
+ * Non-maintainer upload
+ * New upstream release (Closes: #1013549)
+ * Switch to 3.0 (quilt) format (Closes: #1007287)
+ * Remove ancient versioned Conflicts
+
+ -- Bastian Germann <b...@debian.org> Sun, 16 Oct 2022 21:44:56 +0200
+
xfsdump (3.1.9+0+nmu2) unstable; urgency=low
* Non-maintainer upload.
diff -Nru xfsdump-3.1.9+0+nmu2/debian/control xfsdump-3.1.11/debian/control
--- xfsdump-3.1.9+0+nmu2/debian/control 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/debian/control 2022-10-16 21:44:56.000000000 +0200
@@ -5,12 +5,10 @@
Uploaders: Anibal Monsalve Salazar <ani...@debian.org>
Build-Depends: xfslibs-dev (>= 3.0.0), uuid-dev, libattr1-dev (>= 2.4.14),
libncurses-dev, autoconf, debhelper (>= 5), gettext, libtool, autotools-dev
Standards-Version: 3.8.1
-Homepage: http://oss.sgi.com/projects/xfs/
Package: xfsdump
Depends: ${shlibs:Depends}, ${misc:Depends}
Suggests: acl, attr, quota
-Conflicts: xfsprogs (<< 3.0.0)
Architecture: any
Description: Administrative utilities for the XFS filesystem
The xfsdump package contains xfsdump, xfsrestore and a number of
diff -Nru xfsdump-3.1.9+0+nmu2/debian/copyright xfsdump-3.1.11/debian/copyright
--- xfsdump-3.1.9+0+nmu2/debian/copyright 2020-01-31 18:30:58.000000000
+0100
+++ xfsdump-3.1.11/debian/copyright 2022-10-16 21:44:56.000000000 +0200
@@ -1,14 +1,18 @@
-This package was debianized by Nathan Scott nath...@debian.org on
-Sun, 19 Nov 2000 07:37:09 -0500.
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Comment: This package was debianized by Nathan Scott <nath...@debian.org>.
+Source: https://www.kernel.org/pub/linux/utils/fs/xfs/xfsdump/
-It was downloaded from ftp://oss.sgi.com/projects/xfs/download/
+Files: *
+Copyright: (c) 1999-2006 Silicon Graphics, Inc. All Rights Reserved.
+License: GPL
-Copyright:
-
-Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved.
-
-You are free to distribute this software under the terms of
-the GNU General Public License.
-On Debian systems, the complete text of the GNU General Public
-License can be found in /usr/share/common-licenses/GPL file.
+Files: common/getdents.c
+Copyright: (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved.
+ (C) 1993, 95-99, 2000-2001 Free Software Foundation, Inc.
+License: GPL
+License: GPL
+ You are free to distribute this software under the terms of
+ the GNU General Public License.
+ On Debian systems, the complete text of the GNU General Public
+ License can be found in /usr/share/common-licenses/GPL file.
diff -Nru
xfsdump-3.1.9+0+nmu2/debian/patches/Build-independently-of-usr-merge-status-on-host.patch
xfsdump-3.1.11/debian/patches/Build-independently-of-usr-merge-status-on-host.patch
---
xfsdump-3.1.9+0+nmu2/debian/patches/Build-independently-of-usr-merge-status-on-host.patch
1970-01-01 01:00:00.000000000 +0100
+++
xfsdump-3.1.11/debian/patches/Build-independently-of-usr-merge-status-on-host.patch
2022-10-16 21:43:49.000000000 +0200
@@ -0,0 +1,31 @@
+From: Goffredo Baroncelli <kreij...@inwind.it>
+Date: Fri, 13 Mar 2020 16:13:27 +0100
+Subject: Build independently of usr-merge status on host
+---
+diff --git a/dump/Makefile b/dump/Makefile
+index 66f00d3..0225878 100644
+--- a/dump/Makefile
++++ b/dump/Makefile
+@@ -100,9 +100,6 @@ install: default
+ $(INSTALL) -m 755 -d $(PKG_ROOT_SBIN_DIR)
+ $(LTINSTALL) -m 755 $(LTCOMMAND) $(PKG_ROOT_SBIN_DIR)
+ $(INSTALL) -m 755 -d $(PKG_SBIN_DIR)
+- # skip symlink when /sbin is alread symlinked to /usr/sbin, like on
Fedora
+- test $(PKG_ROOT_SBIN_DIR) -ef $(PKG_SBIN_DIR) || \
+- $(INSTALL) -S $(PKG_ROOT_SBIN_DIR)/$(LTCOMMAND)
$(PKG_SBIN_DIR)/$(LTCOMMAND)
+ install-dev:
+
+ .dep: $(COMMINCL) $(COMMON) $(INVINCL) $(INVCOMMON)
+diff --git a/restore/Makefile b/restore/Makefile
+index ac3f8c8..9d25cad 100644
+--- a/restore/Makefile
++++ b/restore/Makefile
+@@ -115,8 +115,6 @@ install: default
+ $(LTINSTALL) -m 755 $(LTCOMMAND) $(PKG_ROOT_SBIN_DIR)
+ $(INSTALL) -m 755 -d $(PKG_SBIN_DIR)
+ # skip symlink when /sbin is alread symlinked to /usr/sbin, like on
Fedora
+- test $(PKG_ROOT_SBIN_DIR) -ef $(PKG_SBIN_DIR) || \
+- $(INSTALL) -S $(PKG_ROOT_SBIN_DIR)/$(LTCOMMAND)
$(PKG_SBIN_DIR)/$(LTCOMMAND)
+ install-dev:
+
+ .dep: $(COMMINCL) $(COMMON) $(INVINCL) $(INVCOMMON)
diff -Nru xfsdump-3.1.9+0+nmu2/debian/patches/series
xfsdump-3.1.11/debian/patches/series
--- xfsdump-3.1.9+0+nmu2/debian/patches/series 1970-01-01 01:00:00.000000000
+0100
+++ xfsdump-3.1.11/debian/patches/series 2022-10-16 21:44:35.000000000
+0200
@@ -0,0 +1 @@
+Build-independently-of-usr-merge-status-on-host.patch
diff -Nru xfsdump-3.1.9+0+nmu2/debian/source/format
xfsdump-3.1.11/debian/source/format
--- xfsdump-3.1.9+0+nmu2/debian/source/format 1970-01-01 01:00:00.000000000
+0100
+++ xfsdump-3.1.11/debian/source/format 2022-10-16 21:38:43.000000000 +0200
@@ -0,0 +1 @@
+3.0 (quilt)
diff -Nru xfsdump-3.1.9+0+nmu2/debian/watch xfsdump-3.1.11/debian/watch
--- xfsdump-3.1.9+0+nmu2/debian/watch 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/debian/watch 2022-10-16 21:44:56.000000000 +0200
@@ -1,3 +1,3 @@
-version=3
+version=4
opts=uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha)\d*)$/$1~$2/ \
-ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsdump-(.+)\.tar\.gz
+https://www.kernel.org/pub/linux/utils/fs/xfs/xfsdump/xfsdump-(.+)\.tar\.gz
diff -Nru xfsdump-3.1.9+0+nmu2/doc/CHANGES xfsdump-3.1.11/doc/CHANGES
--- xfsdump-3.1.9+0+nmu2/doc/CHANGES 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/doc/CHANGES 2022-08-26 18:09:51.000000000 +0200
@@ -1,3 +1,14 @@
+xfsdump-3-1.11 (25 Aug 2022)
+
+ - Remove remaining slave words from documentation
+ - Remove DMAPI remaining code
+ - Fix FTBFS error
+
+xfsdump-3.1.10 (11 Feb 2022)
+ - Fix bind mount handling which was corrupting dumps
+ - Remove some dead code
+ - Inclusive language updates
+
xfsdump-3.1.9 (31 Jan 2020)
- Fix build due to removed typedefs in xfsprogs (Darrick Wong)
- Support fallocate in xfs_restore (Darrick Wong)
diff -Nru xfsdump-3.1.9+0+nmu2/doc/files.obj xfsdump-3.1.11/doc/files.obj
--- xfsdump-3.1.9+0+nmu2/doc/files.obj 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/doc/files.obj 2022-08-08 15:48:54.000000000 +0200
@@ -295,7 +295,7 @@
mini_line(486,12,3,0,0,0,[
str_block(0,486,12,3,0,-4,0,0,0,[
str_seg('black','Courier',0,80640,486,12,3,0,-4,0,0,0,0,0,
- "Other File (S_IFCHAR|S_IFBLK|S_IFIFO|S_IFNAM|S_IFSOCK)")])
+ "Other File (S_IFCHAR|S_IFBLK|S_IFIFO|S_IFSOCK)")])
])
])]).
text('black',48,244,2,0,1,54,30,379,12,3,0,0,0,0,2,54,30,0,0,"",0,0,0,0,256,'',[
diff -Nru xfsdump-3.1.9+0+nmu2/doc/xfsdump.html xfsdump-3.1.11/doc/xfsdump.html
--- xfsdump-3.1.9+0+nmu2/doc/xfsdump.html 2020-01-31 18:30:58.000000000
+0100
+++ xfsdump-3.1.11/doc/xfsdump.html 2022-08-26 18:09:51.000000000 +0200
@@ -29,8 +29,8 @@
<ul>
<li><a href="#main">The main function of xfsdump</a>
<ul>
- <li><a href="#drive_init1">drive_init1</a>
- <li><a href="#content_init_dump">content_init</a>
+ <li><a href="#drive_init1">drive_init1</a>
+ <li><a href="#content_init_dump">content_init</a>
</ul>
<li><a href="#dump_tape">Dumping to Tape</a>
<ul>
@@ -86,7 +86,7 @@
it refers to some features that aren't supported in Linux.
For example, the references to multiple streams/threads/drives do not
pertain to xfsdump/xfsrestore in Linux. Also, the DMF support in xfsdump
-is not yet useful for Linux.
+is not yet useful for Linux.
<hr>
<h3><a name="intro">What's in a dump</a></h3>
@@ -95,20 +95,18 @@
<ul>
<li>directories (S_IFDIR)
<li>regular files (S_IFREG)
-<li>sockets (S_IFSOCK)
+<li>sockets (S_IFSOCK)
<li>symlinks (S_IFLNK)
<li>character special files (S_IFCHR)
<li>block special files (S_IFBLK)
<li>named pipes (S_FIFO)
-<li>XENIX named pipes (S_IFNAM)
</ul>
-but not mount point types (S_IFMNT).
-It also does not dump files from <i>/var/xfsdump</i> which
-is where the xfsdump inventory is located.
+It does not dump files from <i>/var/xfsdump</i> which is where the
+xfsdump inventory is located.
Other data which is stored:
<ul>
<li> file attributes (stored in stat data) of owner, group, permissions,
-and date stamps
+and date stamps
<li> any extended attributes associated with these file objects
<li> extent information is stored allowing holes to be reconstructed
on restoral
@@ -139,7 +137,7 @@
media, multiple media files are used depending upon the size
of the media file. The size of the media file is set depending
on the drive type (in IRIX): QIC: 50Mb; DAT: 512Mb; Exabyte: 2Gb; DLT: 4Gb;
-others: 256Mb. This value (media file size) is now able to be changed
+others: 256Mb. This value (media file size) is now able to be changed
by the "-d" option.
. Also, on tape, the dump is finished by an inventory
media file followed by a terminating null media file.
@@ -190,16 +188,16 @@
strategy id = on-file, on-tape, on-rmt-tape
strategy specific data:
field to denote if media file is a terminator (old fmt)
- upper: (to 2K)
+ upper: (to 2K)
</pre>
<p>
Note that the <i>strategy id</i> is checked on restore so that
-the dump strategy and the strategy used by restore
-are the same with the exception that drive_scsitape matches with
-drive_minrmt. This strategy check has caused problems with customers
+the dump strategy and the strategy used by restore
+are the same with the exception that drive_scsitape matches with
+drive_minrmt. This strategy check has caused problems with customers
in the past.
-In particular, if one sends xfsdump's stdout to a tape
+In particular, if one sends xfsdump's stdout to a tape
(i.e. xfsdump -L test -M test - / >/dev/tape) then one can not
restore this tape using xfsrestore by specifying the tape with the -f option.
There was also a problem for a time where if one used a drive with
@@ -207,7 +205,7 @@
would select the drive_simple strategy.
<hr>
-
+
<h4><a name="inode_map">Inode Map</a></h4>
<img src="inode_map.gif">
@@ -229,8 +227,8 @@
<h3><a name="tape_format">Format on Tape</a></h3>
At the beginning of each tape record is a header. However, for
the first record of a media file, the record header is buried
-inside the global header at byte offset 1536 (1K + 512), as is shown in
-the global header diagram.
+inside the global header at byte offset 1536 (1K + 512), as is shown in
+the global header diagram.
Reproduced again:
<pre>
<b>rec_hdr</b>
@@ -248,28 +246,28 @@
pad to 512 bytes
</pre>
<p>
-I can not see where the block-size ("tape_blksz") is ever used !
+I can not see where the block-size ("tape_blksz") is ever used !
The record-size ("tape_recsz") is used as the byte count to do
the actual write and read system calls.
<p>
There is another layer of s/ware for the actual data on the tape.
Although, one may write out an inode-map or directory entries,
-one doesn't just give these record buffers straight to the
+one doesn't just give these record buffers straight to the
write system call to write out. Instead, these data objects are
written to buffers (akin to <stdio>). Another thread reads
from these buffers (unless its running single-threaded) and writes
them to tape.
Specifically, inside a loop,
one calls <b>do_get_write_buf</b>,
-copies over the data one wants stored and then
+copies over the data one wants stored and then
calls <b>do_write_buf</b>, until the entire data buffer
has been copied over.
-<hr>
+<hr>
<h3><a name="run_time_structure">Run Time Structure</a></h3>
-This section reviews the run time structure and failure handling in
+This section reviews the run time structure and failure handling in
dump/restore (see IRIX PV 784355).
The diagram below gives a schematic of the runtime structure
@@ -288,7 +286,7 @@
| | |
4. O O O ring buffers common/ring.[ch]
| | |
-5. slave slave slave ring_create(... ring_slave_entry ...)
+5. worker worker worker ring_create(... ring_worker_entry ...)
thread thread thread
| | |
6. drive drive drive physical drives
@@ -308,7 +306,7 @@
the drive managers with calls to the drive_init functions. In
addition to choosing and assigning drive strategies and ops for each
drive object, the drive managers intialise a ring buffer and (for
-devices other than simple UNIX files) sproc off a slave thread that
+devices other than simple UNIX files) sproc off a worker thread that
that handles IO to the tape device. This initialisation happens in the
drive_manager code and is not directly visible from main().
<p>
@@ -318,37 +316,37 @@
content_stream_dump or content_stream_restore and exits with the
return code from these functions.
<p>
-Both the stream manager processes and the drive manager slaves
+Both the stream manager processes and the drive manager workers
set their signal disposition to ignore HUP, INT, QUIT, PIPE,
ALRM, CLD (and for the stream manager TERM as well).
<p>
-The drive manager slave processes are much simpler, and are
+The drive manager worker processes are much simpler, and are
initialised with a call to ring_create, and begin execution in
-ring_slave_func. The ring structure must also be initialised with
+ring_worker_func. The ring structure must also be initialised with
two ops that are called by the spawned thread: a ring read op, and a write op.
The stream manager communicates with the tape manager across this ring
structure using Ring_put's and Ring_get's.
<p>
-The slave thread sits in a loop processing messages that come across
+The worker thread sits in a loop processing messages that come across
the ring buffer. It ignores signals and does not terminate until it
receives a RING_OP_DIE message. It then exits 0.
<p>
The main process sleeps waiting for any of its children to die
(ie. waiting for a SIGCLD). All children that it cares about (stream
-managers and ring buffer slaves) are registered through the child
+managers and ring buffer workers) are registered through the child
manager abstraction. When a child dies wait status and other info is
stored with its entry in the child manager. main() ignores the deaths
of children (and grandchildren) that are not registered through the child
manager. The return status of these subprocesses is checked
and in the case of an error is used to determine the overall exit code.
<p>
-We do not expect slave threads to ever die unexpectedly: they ignore
+We do not expect worker threads to ever die unexpectedly: they ignore
most signals and only exit when they receive a RING_OP_DIE at which
point they drop out of the message processing loop and always signal success.
<p>
Thus the only child processes that can affect the return status of
dump or restore are the stream managers, and these processes take
-their exit status from the values returned by
+their exit status from the values returned by
<b>content_stream_dump</b> and <b>content_stream_restore</b>.
<hr>
@@ -376,14 +374,14 @@
The inode map stores the type of the inode: directory or non-directory,
and a state value to say whether it has changed or not.
The inode map is built by processing each inode (using bulkstat) and
- in order to work out if it should be marked as changed,
+ in order to work out if it should be marked as changed,
by comparing its date stamp with the date of the base or interrupted
- dump.
+ dump.
We also update the size for non-dir regular files (bs_blocks * bs_blksize)
<li><b>phase 3</b>: prune the unneeded subtrees due to the set of
unchanged directories or the subtrees specified in -s (phase 1).
- This works by marking higher level directories as unchanged
- (MAP_DIR_NOCHNG) in the inode map.
+ This works by marking higher level directories as unchanged
+ (MAP_DIR_NOCHNG) in the inode map.
<li><b>phase 4</b>: estimate non-dir (file) size if pruning was done
since phase 2.
It calculates this by processing each inode (using bulkstat)
@@ -391,7 +389,7 @@
If it is then it uses (bs_blocks * bs_blksize) as in phase 2.
<li><b>phase 5</b>: if we have multiple streams, then
it splits up the dump to try to give each stream a set of inodes
- which has an equal amount of file data.
+ which has an equal amount of file data.
See the section on "Splitting a dump over multiple streams" below.
</ul>
@@ -430,13 +428,13 @@
<li> end the media file
<li> update online inventory
</ul>
-<li> if multiple-media dump (i.e. tape dump and not file dump) then
+<li> if multiple-media dump (i.e. tape dump and not file dump) then
<ul>
<li> dump the session inventory to a media file
<li> dump the terminator to a media file
</ul>
</ul>
-
+
<hr>
<h5><a name="main">The main function of xfsdump</a></h5>
@@ -444,7 +442,7 @@
<pre>
* <b><a name="drive_init1">drive_init1</a></b> - initialize drive manager for
each stream
- go thru cmd options looking for -f device
- - each device requires a drive-manager and hence an sproc
+ - each device requires a drive-manager and hence an sproc
(sproc = IRIX lightweight process)
- if supposed to run single threaded then can only
support one device
@@ -454,7 +452,7 @@
- if "-" specified for std out then only one drive allowed
- for each drive it tries to pick best strategy manager
- - there are 3 strategies
+ - there are 3 strategies
1) simple - for dump on file
2) scsitape - for dump on tape
3) minrmt - minimal protocol for remote tape (non-SGI)
@@ -472,7 +470,7 @@
- note if remote tape (has ":" in name)
- set capabilities of BSF, FSF, etc.
-* <b>create global header</b>
+* <b>create global header</b>
- store magic#, version, date, hostid, uuid, hostname
- process args for session-id, dump-label, ...
@@ -483,13 +481,13 @@
* inomap_build() - stores stream start-points and builds inode map
- - <b>phase1</b>: parsing subtree selections (specified by -s options)
- <b>INPUT</b>:
+ - <b>phase1</b>: parsing subtree selections (specified by -s options)
+ <b>INPUT</b>:
- sub directory entries (from -s)
<b>FLOW</b>:
- - go thru each subtree and
+ - go thru each subtree and
call diriter(callback=subtreelist_parse_cb)
- - diriter on subtreelist_parse_cb
+ - diriter on subtreelist_parse_cb
- open_by_handle() on dir handle
- getdents()
- go thru each entry
@@ -505,9 +503,9 @@
- list of inodes corresponding to subtree path names
- premptchk: progress report, return if got a signal
-
+
- <b>phase2</b>: creating inode map (initial dump list)
- <b>INPUT</b>:
+ <b>INPUT</b>:
- bulkstat records on all the inodes in the file system
<b>FLOW</b>:
- bigstat_init on cb_add()
@@ -518,16 +516,16 @@
- loop thru each struct xfs_bstat record for an inode
calling cb_add()
* cb_add
- - looks at latest mtime|ctime and
+ - looks at latest mtime|ctime and
if inode is resumed:
- compares with cb_resumetime for change
+ compares with cb_resumetime for change
if have cb_last:
compares with cb_lasttime for change
- add inode to map (map_add) and note if has changed or not
- - call with state of either
+ - call with state of either
changed - MAP_DIR_CHANGE, MAP_NDR_CHANGE
not changed - MAP_DIR_SUPPRT or MAP_NDR_NOCHNG
- - for changed non-dir REG inode,
+ - for changed non-dir REG inode,
data size for its dump is added by bs_blocks * bs_blksize
- for non-changed dir, it sets flag for <pruneneeded>
=> we don't want to process this later !
@@ -535,31 +533,31 @@
- segment = <base, 64-low, 64-mid, 64-high>
= like 64 * 3-bit values (use 0-5)
i.e. for 64 inodes, given start inode number
- #define MAP_INO_UNUSED 0 /* ino not in use by fs -
+ #define MAP_INO_UNUSED 0 /* ino not in use by fs -
Used for lookup failure */
- #define MAP_DIR_NOCHNG 1 /* dir, ino in use by fs,
+ #define MAP_DIR_NOCHNG 1 /* dir, ino in use by fs,
but not dumped */
- #define MAP_NDR_NOCHNG 2 /* non-dir, ino in use by fs,
+ #define MAP_NDR_NOCHNG 2 /* non-dir, ino in use by fs,
but not dumped */
#define MAP_DIR_CHANGE 3 /* dir, changed since last dump */
#define MAP_NDR_CHANGE 4 /* non-dir, changed since last dump */
- #define MAP_DIR_SUPPRT 5 /* dir, unchanged
+ #define MAP_DIR_SUPPRT 5 /* dir, unchanged
but needed for hierarchy */
- hunk = 4 pages worth of segments, max inode#, next ptr in list
- i.e. map = linked list of 4 pages of segments of 64 inode states
<b>OUTPUT</b>:
- - inode map = list of all inodes of file system and
+ - inode map = list of all inodes of file system and
for each one there is an associated state variable
describing type of inode and whether it has changed
- - the inode numbers are stored in chunks of 64
+ - the inode numbers are stored in chunks of 64
(with only the base inode number explicitly stored)
- premptchk: progress report, return if got a signal
- if <pruneneeded> (i.e. non-changed dirs) OR subtrees specified (-s)
- - <b>phase3</b>: pruning inode map (pruning unneeded subtrees)
+ - <b>phase3</b>: pruning inode map (pruning unneeded subtrees)
<b>INPUT</b>:
- subtree list
- inode map
@@ -567,13 +565,13 @@
- bigstat_iter on cb_prune() per inode
* cb_prune
- if have subtrees and subtree list contains inode
- -> need to traverse every group (inogrp_t) and
+ -> need to traverse every group (inogrp_t) and
every page of inode#s
- diriter on cb_count_in_subtreelist
* cb_count_in_subtreelist:
- looks up each inode# (in directory iteration) in subtreelist
- if exists then increment counter
- - if at least one inode in list
+ - if at least one inode in list
- diriter on cb_cond_del
* cb_cond_del:
- TODO
@@ -631,20 +629,20 @@
- header = <offset, flags, checksum, 128-byte bulk stat structure
>
- bulkstat struct derived from struct xfs_bstat
- stnd. stat stuff + extent size, #of extents, DMI stuff
- - if HSM context then
+ - if HSM context then
- modify bstat struct to make it offline
- loops calling getdents()
- - does a bulkstat or bulkstat-single of dir inode
+ - does a bulkstat or bulkstat-single of dir inode
* dump_dirent()
- fill in direnthdr_t record
- - <ino, gen & DENTGENMASK, record size,
+ - <ino, gen & DENTGENMASK, record size,
checksum, variable length name (8-char padded)>
- gen is from statbuf.bs_gen
- - write out record
+ - write out record
- dump null direnthdr_t record
- - if dumpextattr flag on and it
+ - if dumpextattr flag on and it
has extended attributes (check bs_xflags)
- * dump_extattrs
+ * dump_extattrs
* dump_filehdr() with flags of FILEHDR_FLAGS_EXTATTR
- for root and non-root attributes
- get attribute list (attr_list_by_handle())
@@ -652,7 +650,7 @@
- TODO
- bigstat iter on dump_file()
- - go thru each inode in file system and apply dump_file
+ - go thru each inode in file system and apply dump_file
* dump_file()
- if file's inode# is less than the start-point then skip it
-> presume other sproc handling dumping of that inode
@@ -660,7 +658,7 @@
- look-up inode# in inode map
- if not in inode-map OR hasn't changed then skip it
- elsif stat is NOT a non-dir then we have an error
- - if have an hsm context then initialize context
+ - if have an hsm context then initialize context
- call dump function depending on file type (S_IFREG, S_IFCHR, etc.)
* <b>dump_file_reg</b> (for S_IFREG):
@@ -673,7 +671,7 @@
- dump extent header of type, EXTENTHDR_TYPE_DATA
- write out link buffer (i.e. symlink string)
- - if dumpextattr flag on and it
+ - if dumpextattr flag on and it
has extended attributes (check bs_xflags)
* dump_extattrs (see the same call in the dir case above)
@@ -688,7 +686,7 @@
- if got an inventory stream then
* inv_put_mediafile
- create an inventory-media-file struct (invt_mediafile_t)
- - < media-obj-id, label, index, start-ino#, start-offset,
+ - < media-obj-id, label, index, start-ino#, start-offset,
end-ino#, end-offset, size = #recs in media file, flag >
* stobj_put_mediafile
@@ -696,7 +694,7 @@
- lock and increment the thread done count
- if dump supports multiple media files (tapes do but dump-files don't) then
- - if multi-threaded then
+ - if multi-threaded then
- wait for all threads to have finished dumping
(loops sleeping for 1 second each iter)
* dump_session_inv
@@ -718,9 +716,9 @@
* <b><a name="dump_file_reg">dump_file_reg</a></b> (for S_IFREG):
- if this is the start inode, then set the start offset
- fixup offset for resumed dump
- * init_extent_group_context
+ * init_extent_group_context
- init context - reset getbmapx struct fields with offset=0, len=-1
- - open file by handle
+ - open file by handle
- ensure Mandatory lock not set
- loop dumping extent group
- dump file header
@@ -741,11 +739,11 @@
- if bmap entry is a hole (bmv_block == -1) then
- if dumping ext.attributes then
- - dump extent header with bmap's offset,
+ - dump extent header with bmap's offset,
extent-size and type EXTENTHDR_TYPE_HOLE
- move onto next bmap
- - if bmap's (offset + len)*512 > next-offset then
+ - if bmap's (offset + len)*512 > next-offset then
update next-offset to this
- inc ptr
@@ -769,7 +767,7 @@
- read data of actualsz from file into buffer
- write out buffer
- if at end of file and have left over space in the extent then
- - pad out the rest of the extent
+ - pad out the rest of the extent
- if next offset is at or past next-bmap's offset+len then
- move onto next bmap
- dump null extent header of type, EXTENTHDR_TYPE_LAST
@@ -781,10 +779,10 @@
<hr>
<h4><a name="reg_split">Splitting a Regular File</a></h4>
-If a regular file is greater than 16Mb
-(maxextentcnt = drivep->d_recmarksep
- = recommended max. separation between marks),
-then it is broken up into multiple extent groups each with their
+If a regular file is greater than 16Mb
+(maxextentcnt = drivep->d_recmarksep
+ = recommended max. separation between marks),
+then it is broken up into multiple extent groups each with their
own filehdr_t's.
A regular file can also be split, if we are dumping to multiple
streams and the file would span the stream boundary.
@@ -792,15 +790,15 @@
<h4><a name="split_mstream">Splitting a dump over multiple streams (Phase
5)</a></h4>
If one is dumping to multiple streams, then xfsdump calculates an
estimate of the dump size and divides by the number of streams to
-determine how much data we should allocate for a stream.
-The inodes are processed in order from <i>bulkstat</i> in the function
+determine how much data we should allocate for a stream.
+The inodes are processed in order from <i>bulkstat</i> in the function
<i>cb_startpt</i>. Thus we start allocating inodes to the first stream
until we reach the allocated amount and then need to decide how to
proceed on to the next stream. At this point we have 3 actions:
<dl>
<dt>Hold
<dd>Include this file in the current stream.
-<dt>Bump
+<dt>Bump
<dd>Start a new stream beginning with this file.
<dt>Split
<dd>Split this file across 2 streams in different extent groups.
@@ -852,8 +850,8 @@
<li> search for directory dump
<li> calls <b>dirattr_init</b> if necessary
<li> calls <b>namreg_init</b> if necessary
- <li> initialize the directory tree (<b>tree_init</b>)
- <li> read the dirents into the tree
+ <li> initialize the directory tree (<b>tree_init</b>)
+ <li> read the dirents into the tree
(<a href="#applydirdump"><b>applydirdump</b></a>)
</ul>
@@ -868,17 +866,17 @@
<li> all threads can process each media file of their dumps for
restoring the non-directory files
- <ul>
- <li>loop over each media file
+ <ul>
+ <li>loop over each media file
<ul>
<li> read in file header
- <li> call <b>applynondirdump</b> for file hdr
- <ul>
- <li> restore extended attributes for file
- (if it is last extent group of file)
+ <li> call <b>applynondirdump</b> for file hdr
+ <ul>
+ <li> restore extended attributes for file
+ (if it is last extent group of file)
<li> restore file
<ul>
- <li>loop thru all hardlink paths from tree for inode
+ <li>loop thru all hardlink paths from tree for inode
(<b>tree_cb_links</b>) and call <b>restore_file_cb</b>
<ul>
<li> if a hard link then link(path1, path2)
@@ -892,11 +890,11 @@
<li>set DMAPI fields if necessary
<li>loop processing the extent headers
<ul>
- <li>if type LAST then exit loop
+ <li>if type LAST then exit loop
<li>if type ALIGN then eat up the padding
<li>if type HOLE then ignore
- <li>if type DATA then copy the data into
- the file for the extent;
+ <li>if type DATA then copy the data into
+ the file for the extent;
seeking to extent start if necessary
</ul>
<li>register the extent group in the partial registry
@@ -919,9 +917,9 @@
<li> if corrupt then go to next mark
<li> else exit loop
</ul>
- </ul>
+ </ul>
</ul>
- </ul>
+ </ul>
<li> one stream does while others wait:
<ul>
@@ -939,7 +937,7 @@
<b>content_init</b> in a bit more detail(xfsrestore version)
<ul>
<li> create house-keeping-directory for persistent mmap file data
- structures. For cumulative and interrupted restores,
+ structures. For cumulative and interrupted restores,
we need to keep restore session data between invocations of xfsrestore.
<li> mmap the "state" file and create if not already existing.
Initially just mmap the header. (More details below)
@@ -971,14 +969,14 @@
<h4><a name="pers_inv">Persistent Inventory and State File</a></h4>
The persistent inventory is found inside the "state" file.
-The state file is an mmap'ed file called
+The state file is an mmap'ed file called
<b>$dstdir/xfsrestorehousekeepingdir/state</b>.
-The state file (<i>struct pers</i> from content.c) contains
+The state file (<i>struct pers</i> from content.c) contains
a header of:
<ul>
<li>command line arguments from 1st session,
<li>partial registry data structure for use with multiple streams
- and extended attributes,
+ and extended attributes,
<li>various session state such as
dumpid, dump label, number of inodes restored so far, etc.
</ul>
@@ -1056,7 +1054,7 @@
the file with it's directory and so restored to the correct location
in the directory structure.
<p>
-The tree is an mmap'ed file called
+The tree is an mmap'ed file called
<b>$dstdir/xfsrestorehousekeepingdir/tree</b>.
Different sections of it will be mmap'ed separately.
It is of the following format:
@@ -1092,7 +1090,6 @@
bool_t p_ownerpr - whether to restore directory owner/group attributes
bool_t p_fullpr - whether restoring a full level 0 non-resumed dump
bool_t p_ignoreorphpr - set if positive subtree or interactive
- bool_t p_restoredmpr - restore DMI event settings
</pre>
<p>
The hash table maps the inode number to the tree node. It is a
@@ -1100,7 +1097,7 @@
in the <i>n_hashh</i> field of struct node in restore/tree.c.
The size of the hash table is based on the number of directories
and non-directories (which will approximate the number of directory
-entries - won't include extra hard links). The size of the table
+entries - won't include extra hard links). The size of the table
is capped below at 1 page and capped above at virtual-memory-limit/4/8
(i.e. vmsz/32) or the range of 2^32 whichever is the smaller.
<p>
@@ -1159,15 +1156,15 @@
| | | |
| | 8192 | |
| | nodes| | nodes already used in tree
-| | used | |
-| | | |
+| | used | |
+| | | |
| |------| |
| |
-| |------| |
+| |------| |
| | --------| <-----nh_freenix (ptr to node-freelist)
| |node1 | | |
-| |------| | | node-freelist (linked list of free nodes)
-| | ----<---|
+| |------| | | node-freelist (linked list of free nodes)
+| | ----<---|
| |node2 | |
| |------| |
............
@@ -1178,7 +1175,7 @@
<h5><a name="win_abs">Window Abstraction</a></h5>
-The window abstraction manages the mapping and unmapping of the
+The window abstraction manages the mapping and unmapping of the
segments (of nodes) of the dirent tree.
In the node allocation, mentioned above, if our node-freelist is
empty we call <i><b>win_map()</b></i> to map in a chunk of 8192 nodes
@@ -1187,8 +1184,8 @@
Consider the <i><b>win_map</b>(offset, return_memptr)</i> function:
<pre>
One is asking for an offset within a segment.
-It looks up its <i>bag</i> for the segment (given the offset), and
-if it's already mapped then
+It looks up its <i>bag</i> for the segment (given the offset), and
+if it's already mapped then
if the window has a refcnt of zero, then remove it from the win-freelist
it uses that address within the mmap region and
increments refcnt.
@@ -1196,7 +1193,7 @@
if win-freelist is not empty then
munmap the oldest mapped segment
remove head of win-freelist
- remove the old window from the bag
+ remove the old window from the bag
else /* empty free-list */
allocate a new window
endif
@@ -1216,9 +1213,9 @@
Note that the windows are stored in 2 lists. They are doubly
linked in the LRU win-freelist and are also stored in a <i>bag</i>.
A bag is just a doubly linked searchable list where
-the elements are allocated using <i>calloc()</i>.
+the elements are allocated using <i>calloc()</i>.
It uses the bag as a container of mmaped windows which can be
-searched using the bag key of window-offset.
+searched using the bag key of window-offset.
<pre>
BAG: |--------| |--------| |--------| |--------| |-------|
@@ -1241,7 +1238,7 @@
<p>
<b>Call Chain</b><br>
-Below are some call chain scenarios of how the allocation of
+Below are some call chain scenarios of how the allocation of
dirent tree nodes are done at different stages.
<p>
<pre>
@@ -1271,7 +1268,7 @@
node_alloc()
get node off node-freelist (8190 nodes left now)
return node
-
+
8193th time when we have used up 8192 nodes and node-freelist is emtpy:
if new entry then
@@ -1284,13 +1281,13 @@
refcnt++
return addr
make a node-freelist of 8192 nodes from where left off last time
- win_unmap
+ win_unmap
refcnt--
put on LRU win-freelist as refcnt==0
get node off node-freelist (8191 nodes left now)
return node
-
-When whole segment used up and thus all remaining node-freelist
+
+When whole segment used up and thus all remaining node-freelist
nodes are gone then
(i.e. in old scheme would have used up all 1 million nodes
from first segment):
@@ -1334,7 +1331,7 @@
<a name="applydirdump"><b>applydirdump</b>()</a>
...
- inomap_restore_pers() - read ino map
+ inomap_restore_pers() - read ino map
read directories and their entries
loop 'til null hdr
dirh = <b>tree_begindir</b>(fhdr, dah) - process dir filehdr
@@ -1354,7 +1351,7 @@
new directory - 1st time seen
dah = dirattr_add(fhdrp) - add dir header to dirattr structure
hardh = Node_alloc(ino, gen,....,NF_ISDIR|NF_NEWORPH)
- link_in(hardh) - link into tree
+ link_in(hardh) - link into tree
adopt(p_orphh, hardh, NRH_NULL) - put dir in orphanage directory
else
...
@@ -1381,12 +1378,12 @@
A cumulative restore seems a bit different than one might expect.
It tries to restore the state of the filesystem at the time of
the incremental dump. As the man page states:
-"This can involve adding, deleting, renaming, linking,
+"This can involve adding, deleting, renaming, linking,
and unlinking files and directories." From a coding point of view,
this means we need to know what the dirent tree was like previously
compared with what the dirent tree is like now. We need this so
-we can see what was added and deleted. So this means that the
-dirent tree, which is stored as an mmap'ed file in
+we can see what was added and deleted. So this means that the
+dirent tree, which is stored as an mmap'ed file in
<i>restoredir/xfsrestorehousekeepingdir/tree</i> should not be deleted
between cumulative restores (as we need to keep using it).
<p>
@@ -1398,8 +1395,8 @@
If the entry alreadys exists then it marks it as <i>NF_REFED</i>.
<p>
In case a dirent has gone away between times of incremental dumps,
-xfsrestore does an extra pass in the tree preprocessing
-which traverses the tree looking for non-referenced (not <i>NF_REFED</i>)
+xfsrestore does an extra pass in the tree preprocessing
+which traverses the tree looking for non-referenced (not <i>NF_REFED</i>)
nodes so that if they exist in the FS (i.e. are <i>NF_REAL</i>) then
they can be deleted (so that the FS resembles what it was at the time
of the incremental dump).
@@ -1420,7 +1417,7 @@
<td><b>1. noref_elim_recurse</b></td>
<td><ul>
<li>remove deleted dirs
- <li>rename moved dirs to orphanage
+ <li>rename moved dirs to orphanage
<li>remove extra deleted hard links
<li>rename moved non-dirs to orphanage
</ul></td>
@@ -1445,7 +1442,7 @@
<li>create a link on rename error (don't understand this one)
</ul></td>
</tr>
-</table>
+</table>
<p>
Step 1 was changed so that files which are deleted and not moved
@@ -1461,13 +1458,13 @@
<td><b>1. noref_elim_recurse</b></td>
<td><ul>
<li>remove deleted dirs
- <li>rename moved dirs to orphanage
+ <li>rename moved dirs to orphanage
<li>remove extra deleted hard links
<li>rename moved non-dirs to orphanage
<li>remove deleted non-dirs which aren't part of a rename
</ul></td>
</tr>
-</table>
+</table>
<p>
One will notice that renames are not performed directly.
Instead entries are renamed to the orphanage, directories are
@@ -1483,12 +1480,12 @@
<hr>
<h4><a name="partial_reg">Partial Registry</a></h4>
-The partial registry is a data structure used in <i>xfsrestore</i>
-for ensuring that files which have been split into multiple extent groups,
+The partial registry is a data structure used in <i>xfsrestore</i>
+for ensuring that files which have been split into multiple extent groups,
do not restore the extended attributes until the entire file has been
restored. The reason for this is apparently so that DMAPI attributes
aren't restored until we have the complete file. Each extent group dumped
-has the identical copy of the extended attributes (EAs) for that file,
+has the identical copy of the extended attributes (EAs) for that file,
thus without this data-structure we could apply the first EAs we come across.
<p>
The data structure is of the form:
@@ -1537,8 +1534,8 @@
registry. If the file doesn't exist in the array then a new entry is
added. If the file does exist in the array then the extent group for
the given drive is updated. It is worth remembering that one drive
-(stream) can have multiple extent groups (if it is >16Mb) in which
-case the extent group is just extended (they are split up in order).
+(stream) can have multiple extent groups (if it is >16Mb) in which
+case the extent group is just extended (they are split up in order).
<p>
A bug was discovered in this area of code, for <i>DMF offline</i> files
which have an associated file size but no data blocks allocated and
@@ -1552,7 +1549,7 @@
<h3><a name="drive_strategy">Drive Strategies</a></h3>
The I/O which happens when reading and writing the dump
-can be to a tape, file, stdout or
+can be to a tape, file, stdout or
to a tape remotely via rsh(1) (or $RSH) and rmt(1) (or $RMT).
There are 3 pieces of code called strategies which
handle the dump I/O:
@@ -1602,8 +1599,8 @@
with path (not available on Linux), score -10 if the following:
<ul>
<li>stat fails
- <li>it is not a character device
- <li>its real path does not contain "/nst", "/st" nor "/mt".
+ <li>it is not a character device
+ <li>its real path does not contain "/nst", "/st" nor "/mt".
</ul>
</td>
</tr>
@@ -1646,29 +1643,29 @@
Each strategy is organised like a "class" with functions/methods
in the data structure:
<pre>
- do_init,
- do_sync,
- do_begin_read,
- do_read,
- do_return_read_buf,
- do_get_mark,
- do_seek_mark,
- do_next_mark,
- do_end_read,
- do_begin_write,
- do_set_mark,
- do_get_write_buf,
- do_write,
- do_get_align_cnt,
- do_end_write,
- do_fsf,
- do_bsf,
- do_rewind,
- do_erase,
- do_eject_media,
- do_get_device_class,
- do_display_metrics,
- do_quit,
+ do_init,
+ do_sync,
+ do_begin_read,
+ do_read,
+ do_return_read_buf,
+ do_get_mark,
+ do_seek_mark,
+ do_next_mark,
+ do_end_read,
+ do_begin_write,
+ do_set_mark,
+ do_get_write_buf,
+ do_write,
+ do_get_align_cnt,
+ do_end_write,
+ do_fsf,
+ do_bsf,
+ do_rewind,
+ do_erase,
+ do_eject_media,
+ do_get_device_class,
+ do_display_metrics,
+ do_quit,
</pre>
<h4><a name="drive_scsitape">Drive Scsitape</a></h4>
@@ -1682,35 +1679,35 @@
or is running on Linux (which is not multi-threaded) then
records are read/written straight to the tape. If it is running
multi-threaded then a circular buffer is used as an intermediary
-between the client and slave threads.
+between the client and worker threads.
<p>
-Initially <i>drive_init1()</i> calls <i>ds_instantiate()</i> which
-if dump/restore is running multi-threaded,
+Initially <i>drive_init1()</i> calls <i>ds_instantiate()</i> which
+if dump/restore is running multi-threaded,
creates the ring buffer with <i>ring_create</i> which initialises
-the state to RING_STAT_INIT and sets up the slave thread with
-ring_slave_entry.
+the state to RING_STAT_INIT and sets up the worker thread with
+ring_worker_entry.
<pre>
ds_instantiate()
ring_create(...,ring_read, ring_write,...)
- allocate and init buffers
- set rm_stat = RING_STAT_INIT
- start up slave thread with ring_slave_entry
+ start up worker thread with ring_worker_entry
</pre>
-The slave spends its time in a loop getting items from the
+The worker spends its time in a loop getting items from the
active queue, doing the read or write operation and placing the result
back on the ready queue.
<pre>
-slave
+worker
======
-ring_slave_entry()
+ring_worker_entry()
loop
- ring_slave_get() - get from active queue
+ ring_worker_get() - get from active queue
case rm_op
RING_OP_READ -> ringp->r_readfunc
RING_OP_WRITE -> ringp->r_writefunc
..
endcase
- ring_slave_put() - puts on ready queue
+ ring_worker_put() - puts on ready queue
endloop
</pre>
@@ -1722,7 +1719,7 @@
which calls <i>prepare_drive()</i>. <i>prepare_drive()</i> opens
the tape drive if necessary and gets its status.
It then works out the tape record size to use
-(<i>set_best_blk_and_rec_sz</i>) using
+(<i>set_best_blk_and_rec_sz</i>) using
current max blksize (mtinfo.maxblksz from ioctl(fd,MTIOCGETBLKINFO,minfo))
on the scsi tape device in IRIX.
@@ -1739,7 +1736,7 @@
On Linux:
<ul>
<li>
-local tape ->
+local tape ->
<ul>
<li>
tape_recsz = STAPE_MAX_LINUX_RECSZ = 1 Mb<br>
@@ -1752,7 +1749,7 @@
</ul>
<p>
If we have a fixed size device, then it tries to read
-initially at minimum(2Mb, current max blksize)
+initially at minimum(2Mb, current max blksize)
but if it reads in a smaller number of bytes than this,
then it will try again for STAPE_MIN_MAX_BLKSZ = 240 Kb data.
@@ -1768,7 +1765,7 @@
else fixed blksize then
ok = nread==tape_recsz & !EOD & !EOT & !FileMark
endif
- if ok then
+ if ok then
validate_media_file_hdr()
else
could be an error or try again with newsize
@@ -1780,7 +1777,7 @@
<p>
For each <i>do_read</i> call in the multi-threaded case,
we have two sides to the story: the client which is coming
-from code in <i>content.c</i> and the slave which is a simple
+from code in <i>content.c</i> and the worker which is a simple
thread just satisfying I/O requests.
From the point of view of the ring buffer, these are the steps
which happen for reading:
@@ -1788,7 +1785,7 @@
<li>client removes msg from ready queue
<li>client wants to read, so sets op field to READ (RING_OP_READ)
and puts on active queue
-<li>slave removes msg from active queue,
+<li>worker removes msg from active queue,
invokes client read function,
sets status field: OK/ERROR,
puts msg on ready queue
@@ -1804,14 +1801,14 @@
do_read()
getrec()
singlethreaded -> read_record() -> Read()
- else ->
+ else ->
loop 'til contextp->dc_recp is set to a buffer
Ring_get() -> ring.c/ring_get()
remove msg from ready queue
block on ready queue - qsemP( ringp->r_ready_qsemh )
msgp = &ringp->r_msgp[ ringp->r_ready_out_ix ];
cyclic_inc(ringp->r_ready_out_ix)
- case rm_stat:
+ case rm_stat:
RING_STAT_INIT, RING_STAT_NOPACK, RING_STAT_IGNORE
put read msg on active queue
contextp->dc_msgp->rm_op = RING_OP_READ
@@ -1820,7 +1817,7 @@
contextp->dc_recp = contextp->dc_msgp->rm_bufp
...
endcase
- endloop
+ endloop
</pre>
<h4><a name="librmt">Librmt</a></h4>
@@ -1837,21 +1834,21 @@
xfsdump distribution.
The remote functions are used to dump/restore to remote
tape drives on remote machines. It does this by using
-rsh or ssh to run rmt(1) on the remote machine.
+rsh or ssh to run rmt(1) on the remote machine.
The main caveat, however, comes into play for the <i>rmtioctl</i>
function. Unfortunately, the values for mt operations and status
-codes are different on different machines.
+codes are different on different machines.
For example, the offline command op
on IRIX is 6 and on Linux it is 7. On Linux, 6 is rewind and
-on IRIX 7 is a no-op.
+on IRIX 7 is a no-op.
So for the Linux xfsdump, the <i>rmtiocl</i> function has been rewritten
-to check what the remote OS is (e.g. <i>rsh host uname</i>)
-and do appropriate mappings of codes.
+to check what the remote OS is (e.g. <i>rsh host uname</i>)
+and do appropriate mappings of codes.
As well as the different mt op codes, the mtget structures
differ for IRIX and Linux and for Linux 32 bit and Linux 64 bit.
-The size of the mtget structure is used to determine which
+The size of the mtget structure is used to determine which
structure it is and the value of <i>mt_type</i> is used to
-determine if endian conversion needs to be done.
+determine if endian conversion needs to be done.
<p>
<h4><a name="drive_minrmt">Drive Minrmt</a></h4>
@@ -1865,13 +1862,13 @@
to remote NON-IRIX hosts where the status codes can vary.
However, as was mentioned in the discussion of librmt on Linux,
the mt operations vary on foreign hosts as well as the status
-codes. So this is only a limited solution.
+codes. So this is only a limited solution.
<h4><a name="drive_simple">Drive Simple</a></h4>
The simple strategy was designed for dumping to files
or stdout. It is simpler in that it does <b>NOT</b> have to worry
about:
-<ul>
+<ul>
<li>the ring buffer
<li>talking to the scsitape driver with various operations and status
<li>multiple media files
@@ -1881,7 +1878,7 @@
<hr>
<h3><a name="inventory">Online Inventory</a></h3>
xfsdump keeps a record of previous xfsdump executions in the online inventory
-stored in /var/xfsdump/inventory or for Linux, /var/lib/xfsdump/inventory.
+stored in /var/xfsdump/inventory or for Linux, /var/lib/xfsdump/inventory.
This inventory is used to determine which previous dump a incremental dump
should be based on. That is, when doing a level > 0 dump for a filesystem,
xfsdump will refer to the online inventory to work out when the last dump for
@@ -1930,7 +1927,7 @@
<th>Data structure</th>
</tr>
<tr>
- <td>1</td>
+ <td>1</td>
<td>
<pre>
typedef struct invt_counter {
@@ -1945,10 +1942,10 @@
} invt_counter_t;
</pre>
</td>
- </tr>
+ </tr>
<tr>
- <td>1 per filesystem</td>
- <td>
+ <td>1 per filesystem</td>
+ <td>
<pre>
typedef struct invt_fstab {
uuid_t ft_uuid;
@@ -1958,7 +1955,7 @@
} invt_fstab_t;
</pre>
</td>
- </tr>
+ </tr>
</table>
@@ -1970,7 +1967,7 @@
<th>Data structure</th>
</tr>
<tr>
- <td>1</td>
+ <td>1</td>
<td>
<pre>
typedef struct invt_counter {
@@ -1984,10 +1981,10 @@
} invt_counter_t;
</pre>
</td>
- </tr>
+ </tr>
<tr>
- <td>1 per StObj file</td>
- <td>
+ <td>1 per StObj file</td>
+ <td>
<pre>
typedef struct invt_entry {
invt_timeperiod_t ie_timeperiod;
@@ -1996,7 +1993,7 @@
} invt_entry_t;
</pre>
</td>
- </tr>
+ </tr>
</table>
<h4>StObj</h4>
@@ -2007,7 +2004,7 @@
<th>Data structure</th>
</tr>
<tr>
- <td>1</td>
+ <td>1</td>
<td>
<pre>
typedef struct invt_sescounter {
@@ -2023,11 +2020,11 @@
} invt_sescounter_t;
</pre>
</td>
- </tr>
+ </tr>
<tr>
- <td>fixed space for<br>
+ <td>fixed space for<br>
INVT_STOBJ_MAXSESSIONS (ie. 5)</td>
- <td>
+ <td>
<pre>
typedef struct invt_seshdr {
off64_t sh_sess_off; /* offset to rest of the sessioninfo */
@@ -2041,11 +2038,11 @@
} invt_seshdr_t;
</pre>
</td>
- </tr>
+ </tr>
<tr>
- <td>fixed space for<br>
+ <td>fixed space for<br>
INVT_STOBJ_MAXSESSIONS (ie. 5)</td>
- <td>
+ <td>
<pre>
typedef struct invt_session {
uuid_t s_sesid; /* this session's id: 16 bytes*/
@@ -2055,14 +2052,14 @@
char s_devpath[INV_STRLEN];/* path to the device */
u_int s_cur_nstreams;/* number of streams created under
this session so far */
- u_int s_max_nstreams;/* number of media streams in
+ u_int s_max_nstreams;/* number of media streams in
the session */
char s_padding[16];
} invt_session_t;</pre>
</td>
- </tr>
+ </tr>
<tr>
- <td rowspan=2>any number</td>
+ <td rowspan=2>any number</td>
<td>
<pre>
typedef struct invt_stream {
@@ -2080,7 +2077,7 @@
} invt_stream_t;
</pre>
</td>
- </tr>
+ </tr>
<tr>
<td>
<pre>
@@ -2088,7 +2085,7 @@
uuid_t mf_moid; /* media object id */
char mf_label[INV_STRLEN]; /* media file label */
invt_breakpt_t mf_startino; /* file that we started out with */
- invt_breakpt_t mf_endino; /* the dump file we ended this
+ invt_breakpt_t mf_endino; /* the dump file we ended this
media file with */
off64_t mf_nextmf; /* links to other mfiles */
off64_t mf_prevmf;
@@ -2098,7 +2095,7 @@
char mf_padding[15];
} invt_mediafile_t;
</pre>
- </td>
+ </td>
</tr>
</table>
@@ -2125,12 +2122,12 @@
If -a is NOT used then it looks like nothing special happens
for files which have dmf state attached to them.
So if the file uses too many blocks compared to our maxsize param (-z)
-then it will not get dumped. No inode nor data.
+then it will not get dumped. No inode nor data.
The only evidence will be its entry in the inode
map (which is dumped) which says its the state of a no-change-non-dir and
the directory entry in the directories dump. The latter will mean
that an <i>ls</i> in xfsrestore will show the file but it can
-not be restored.
+not be restored.
<p>
If -a <b>is</b> used and the file has some DMF state then we do some magic.
However, the magic really only seems to occur for dual-state files
@@ -2140,7 +2137,7 @@
dmfattrp->state[1]. i.e = DMF_ST_DUALSTATE or DMF_ST_UNMIGRATING
If this is the case, then we set, dmf_f_ctxtp->candidate = 1.
If we have such a changed dual-state file then we
-mark it as changed in the inode-map so it can be dumped.
+mark it as changed in the inode-map so it can be dumped.
If it is a dual state file, then its apparent size will be zero, so it
will go onto the dumping stage.
<p>
@@ -2164,7 +2161,7 @@
<br>
<b>Summary:</b>
<ul>
-<li>dual state files (and unmigrating files) dumped with -a,
+<li>dual state files (and unmigrating files) dumped with -a,
cause magic to happen:
<ul>
<li>if file has changed then it will _always_ be marked
@@ -2177,7 +2174,7 @@
<li>for all other cases,
if the file has changed and its blocks cause it to exceed the
maxsize param (-z) then the file will be marked as NOT-CHANGED
- in the inode map and so will NOT be dumped at all
+ in the inode map and so will NOT be dumped at all
</ul>
<p>
@@ -2198,7 +2195,7 @@
and extended-attribute header and attributes.
<p>
A non-directory file consists of a file header, extent-headers
-(for each extent), file data and extended-attribute header
+(for each extent), file data and extended-attribute header
and attributes. Some types of files don't have extent headers or data.
<p>
The xfsdump code says:
@@ -2219,7 +2216,7 @@
<li>global header
<li>inode map
<li>all the files
- <li>all the direntory entries
+ <li>all the direntory entries
( "+8" presumably to account for average file name length range,
where 8 chars already included in header; as this structure
is padded to the next 8 byte boundary, it accounts for names
@@ -2255,7 +2252,7 @@
<ul>
<li>any hole hdrs
<li>alignment hdrs
- <li>alignment padding
+ <li>alignment padding
<li>extent headers for data
<li>actual _data_ of extents
</ul>
@@ -2269,7 +2266,7 @@
bytecnt += sizeof( extenthdr_t ); /* ext. alignment header */
bytecnt += ( off64_t )cnt_to_align /* alignment padding */
bytecnt += sizeof( extenthdr_t ); /* extent header for data */
- bytecnt += ( off64_t )actualsz; /* actual extent data in file */
+ bytecnt += ( off64_t )actualsz; /* actual extent data in file */
bytecnt += ( off64_t )reqsz; /* write padding to make up extent size */
sc_stat_datadone += ( size64_t )bc;
</pre>
@@ -2287,7 +2284,7 @@
contextp->cc_mfilesz += bytecnt;
</pre>
It only adds this data size into the media file size.
-
+
</dl>
<p>
<hr>
@@ -2299,7 +2296,7 @@
<li>What is the difference between a record and a block ?
<ul><li>I don't think there is a difference.</ul>
<li>Where are tape_recsz and tape_blksz used ?
- <ul><li>Tape_recsz is used for the read/write byte cnt but
+ <ul><li>Tape_recsz is used for the read/write byte cnt but
I don't think tape_blksz is used.</ul>
<li>What is the persistent inventory used for ?
</ul>
diff -Nru xfsdump-3.1.9+0+nmu2/dump/content.c xfsdump-3.1.11/dump/content.c
--- xfsdump-3.1.9+0+nmu2/dump/content.c 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/dump/content.c 2022-08-26 18:09:51.000000000 +0200
@@ -511,6 +511,60 @@
ix_t subtreecnt,
size_t strmix);
+/*
+ * Verify that we are asked to dump from the root of the filesystem;
+ * test this by checking whether the inode number we've been given matches
+ * the inode number for this directory's ".."
+ */
+static bool_t
+check_rootdir(int fd,
+ xfs_ino_t ino)
+{
+ struct dirent *gdp;
+ size_t gdsz;
+ bool_t found = BOOL_FALSE;
+
+ gdsz = sizeof(struct dirent) + NAME_MAX + 1;
+ if (gdsz < GETDENTSBUF_SZ_MIN)
+ gdsz = GETDENTSBUF_SZ_MIN;
+ gdp = (struct dirent *)calloc(1, gdsz);
+ assert(gdp);
+
+ while (1) {
+ struct dirent *p;
+ int nread;
+
+ nread = getdents_wrap(fd, (char *)gdp, gdsz);
+ /*
+ * negative count indicates something very bad happened;
+ * try to gracefully end this dir.
+ */
+ if (nread < 0) {
+ mlog(MLOG_NORMAL | MLOG_WARNING,
+_("unable to read dirents for directory ino %llu: %s\n"),
+ ino, strerror(errno));
+ break;
+ }
+
+ /* no more directory entries: break; */
+ if (!nread)
+ break;
+
+ for (p = gdp; nread > 0;
+ nread -= (int)p->d_reclen,
+ assert(nread >= 0),
+ p = (struct dirent *)((char *)p + p->d_reclen)) {
+ if (!strcmp(p->d_name, "..")) {
+ if (p->d_ino == ino)
+ found = BOOL_TRUE;
+ break;
+ }
+ }
+ }
+ free(gdp);
+ return found;
+}
+
bool_t
content_init(int argc,
char *argv[],
@@ -1382,17 +1436,10 @@
}
/* figure out the ino for the root directory of the fs
- * and get its struct xfs_bstat for inomap_build(). This could
- * be a bind mount; don't ask for the mount point inode,
- * find the actual lowest inode number in the filesystem.
+ * and get its xfs_bstat_t for inomap_build()
*/
{
stat64_t rootstat;
- xfs_ino_t lastino = 0;
- int ocount = 0;
- struct xfs_fsop_bulkreq bulkreq;
-
- /* Get the inode of the mount point */
rval = fstat64(sc_fsfd, &rootstat);
if (rval) {
mlog(MLOG_NORMAL, _(
@@ -1400,25 +1447,23 @@
mntpnt);
return BOOL_FALSE;
}
+
+ if (!check_rootdir(sc_fsfd, rootstat.st_ino)) {
+ mlog(MLOG_ERROR,
+_("%s is not the root of the filesystem (bind mount?) - use primary
mountpoint\n"),
+ mntpnt);
+ return BOOL_FALSE;
+ }
+
sc_rootxfsstatp =
(struct xfs_bstat *)calloc(1, sizeof(struct xfs_bstat));
assert(sc_rootxfsstatp);
- /* Get the first valid (i.e. root) inode in this fs */
- bulkreq.lastip = (__u64 *)&lastino;
- bulkreq.icount = 1;
- bulkreq.ubuffer = sc_rootxfsstatp;
- bulkreq.ocount = &ocount;
- if (ioctl(sc_fsfd, XFS_IOC_FSBULKSTAT, &bulkreq) < 0) {
+ if (bigstat_one(sc_fsfd, rootstat.st_ino, sc_rootxfsstatp) < 0)
{
mlog(MLOG_ERROR,
_("failed to get bulkstat information for root
inode\n"));
return BOOL_FALSE;
}
-
- if (sc_rootxfsstatp->bs_ino != rootstat.st_ino)
- mlog (MLOG_NORMAL | MLOG_NOTE,
- _("root ino %lld differs from mount dir ino
%lld, bind mount?\n"),
- sc_rootxfsstatp->bs_ino, rootstat.st_ino);
}
/* alloc a file system handle, to be used with the jdm_open()
@@ -3883,9 +3928,6 @@
case S_IFCHR:
case S_IFBLK:
case S_IFIFO:
-#ifdef S_IFNAM
- case S_IFNAM:
-#endif
case S_IFLNK:
case S_IFSOCK:
/* only need a filehdr_t; no data
@@ -3913,9 +3955,6 @@
contextp->cc_stat_lastino = statp->bs_ino;
}
return RV_OK;
- /* not yet implemented
- case S_IFMNT:
- */
}
if (rv == RV_OK
@@ -4293,7 +4332,6 @@
gcp->eg_bmap[0].bmv_offset = 0;
gcp->eg_bmap[0].bmv_length = -1;
gcp->eg_bmap[0].bmv_count = BMAP_LEN;
- gcp->eg_bmap[0].bmv_iflags = BMV_IF_NO_DMAPI_READ;
gcp->eg_nextbmapp = &gcp->eg_bmap[1];
gcp->eg_endbmapp = &gcp->eg_bmap[1];
gcp->eg_bmapix = 0;
diff -Nru xfsdump-3.1.9+0+nmu2/dump/inomap.c xfsdump-3.1.11/dump/inomap.c
--- xfsdump-3.1.9+0+nmu2/dump/inomap.c 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/dump/inomap.c 2022-08-26 18:09:51.000000000 +0200
@@ -1627,7 +1627,7 @@
quantity2offset(jdm_fshandle_t *fshandlep, struct xfs_bstat *statp, off64_t
qty)
{
int fd;
- getbmapx_t bmap[BMAP_LEN];
+ struct getbmap bmap[BMAP_LEN] = {0};
off64_t offset;
off64_t offset_next;
off64_t qty_accum;
@@ -1647,7 +1647,6 @@
bmap[0].bmv_offset = 0;
bmap[0].bmv_length = -1;
bmap[0].bmv_count = BMAP_LEN;
- bmap[0].bmv_iflags = BMV_IF_NO_DMAPI_READ;
bmap[0].bmv_entries = -1;
fd = jdm_open(fshandlep, statp, O_RDONLY);
if (fd < 0) {
@@ -1662,7 +1661,7 @@
int eix;
int rval;
- rval = ioctl(fd, XFS_IOC_GETBMAPX, bmap);
+ rval = ioctl(fd, XFS_IOC_GETBMAP, bmap);
if (rval) {
mlog(MLOG_NORMAL | MLOG_WARNING | MLOG_INOMAP, _(
"could not read extent map for ino %llu: %s\n"),
@@ -1679,7 +1678,7 @@
}
for (eix = 1; eix <= bmap[0].bmv_entries; eix++) {
- getbmapx_t *bmapp = &bmap[eix];
+ struct getbmap *bmapp = &bmap[eix];
off64_t qty_new;
if (bmapp->bmv_block == -1) {
continue; /* hole */
@@ -1723,9 +1722,6 @@
case S_IFIFO:
case S_IFCHR:
case S_IFDIR:
-#ifdef S_IFNAM
- case S_IFNAM:
-#endif
case S_IFBLK:
case S_IFSOCK:
case S_IFLNK:
diff -Nru xfsdump-3.1.9+0+nmu2/dump/Makefile xfsdump-3.1.11/dump/Makefile
--- xfsdump-3.1.9+0+nmu2/dump/Makefile 2020-07-11 02:31:08.000000000 +0200
+++ xfsdump-3.1.11/dump/Makefile 2022-08-08 15:48:54.000000000 +0200
@@ -100,6 +100,9 @@
$(INSTALL) -m 755 -d $(PKG_ROOT_SBIN_DIR)
$(LTINSTALL) -m 755 $(LTCOMMAND) $(PKG_ROOT_SBIN_DIR)
$(INSTALL) -m 755 -d $(PKG_SBIN_DIR)
+ # skip symlink when /sbin is alread symlinked to /usr/sbin, like on
Fedora
+ test $(PKG_ROOT_SBIN_DIR) -ef $(PKG_SBIN_DIR) || \
+ $(INSTALL) -S $(PKG_ROOT_SBIN_DIR)/$(LTCOMMAND)
$(PKG_SBIN_DIR)/$(LTCOMMAND)
install-dev:
.dep: $(COMMINCL) $(COMMON) $(INVINCL) $(INVCOMMON)
diff -Nru xfsdump-3.1.9+0+nmu2/inventory/Makefile
xfsdump-3.1.11/inventory/Makefile
--- xfsdump-3.1.9+0+nmu2/inventory/Makefile 2020-01-31 18:30:58.000000000
+0100
+++ xfsdump-3.1.11/inventory/Makefile 2022-08-08 15:48:54.000000000 +0200
@@ -12,5 +12,3 @@
default install install-dev:
include $(BUILDRULES)
-
--include .ltdep
diff -Nru xfsdump-3.1.9+0+nmu2/ltmain.sh xfsdump-3.1.11/ltmain.sh
--- xfsdump-3.1.9+0+nmu2/ltmain.sh 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/ltmain.sh 2022-08-26 18:15:00.000000000 +0200
@@ -31,7 +31,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-13"
+VERSION="2.4.6 Debian-2.4.6-15"
package_revision=2.4.6
@@ -2141,7 +2141,7 @@
compiler: $LTCC
compiler flags: $LTCFLAGS
linker: $LD (gnu? $with_gnu_ld)
- version: $progname $scriptversion Debian-2.4.6-13
+ version: $progname $scriptversion Debian-2.4.6-15
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
diff -Nru xfsdump-3.1.9+0+nmu2/m4/libtool.m4 xfsdump-3.1.11/m4/libtool.m4
--- xfsdump-3.1.9+0+nmu2/m4/libtool.m4 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/m4/libtool.m4 2022-08-26 18:15:00.000000000 +0200
@@ -1071,11 +1071,11 @@
# to the OS version, if on x86, and 10.4, the deployment
# target defaults to 10.4. Don't you love it?
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ 10.0,*86*-darwin8*|10.0,*-darwin[[912]]*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
10.[[012]][[,.]]*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined
${wl}suppress' ;;
- 10.*)
+ 10.*|11.*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
esac
;;
diff -Nru xfsdump-3.1.9+0+nmu2/po/de.po xfsdump-3.1.11/po/de.po
--- xfsdump-3.1.9+0+nmu2/po/de.po 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/po/de.po 2022-08-26 18:09:51.000000000 +0200
@@ -446,8 +446,8 @@
"zurück, Fehlernummer %d (%s)\n"
#: .././common/drive_minrmt.c:3823
-msgid "slave"
-msgstr "Slave"
+msgid "worker"
+msgstr "worker"
#: .././common/drive_minrmt.c:3891 .././common/drive_minrmt.c:3899
msgid "KB"
@@ -3972,11 +3972,6 @@
msgid "no additional media objects needed\n"
msgstr "keine zusätzlichen Mediendateien benötigt\n"
-#: .././restore/content.c:9547
-#, c-format
-msgid "fssetdm_by_handle of %s failed %s\n"
-msgstr "fssetdm_by_handle von %s fehlgeschlagen %s\n"
-
#: .././restore/content.c:9566
#, c-format
msgid "%s quota information written to '%s'\n"
diff -Nru xfsdump-3.1.9+0+nmu2/po/pl.po xfsdump-3.1.11/po/pl.po
--- xfsdump-3.1.9+0+nmu2/po/pl.po 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/po/pl.po 2022-08-26 18:09:51.000000000 +0200
@@ -1327,8 +1327,8 @@
msgstr "naruszenie porządku blokad: tid %lu ord %d map %x\n"
#: .././common/ring.c:127
-msgid "slave"
-msgstr "podrzędnego"
+msgid "worker"
+msgstr ""
#: .././common/util.c:188 .././dump/content.c:2867
#, c-format
@@ -3455,11 +3455,6 @@
msgid "path_to_handle of %s failed:%s\n"
msgstr "path_to_handle na %s nie powiodło się: %s\n"
-#: .././restore/content.c:9723
-#, c-format
-msgid "fssetdm_by_handle of %s failed %s\n"
-msgstr "fssetdm_by_handle na %s nie powiodło się: %s\n"
-
#: .././restore/content.c:9742
#, c-format
msgid "%s quota information written to '%s'\n"
diff -Nru xfsdump-3.1.9+0+nmu2/restore/content.c
xfsdump-3.1.11/restore/content.c
--- xfsdump-3.1.9+0+nmu2/restore/content.c 2020-01-31 18:30:58.000000000
+0100
+++ xfsdump-3.1.11/restore/content.c 2022-08-26 18:09:51.000000000 +0200
@@ -477,9 +477,6 @@
/* how many pages following the header page are reserved
* for the subtree descriptors
*/
- bool_t restoredmpr;
- /* restore DMAPI event settings
- */
bool_t restoreextattrpr;
/* restore extended attributes
*/
@@ -858,7 +855,6 @@
off64_t offset, off64_t sz);
static bool_t partial_check (xfs_ino_t ino, off64_t fsize);
static bool_t partial_check2 (partial_rest_t *isptr, off64_t fsize);
-static int do_fssetdm_by_handle(char *path, fsdmidata_t *fdmp);
static int quotafilecheck(char *type, char *dstdir, char *quotafile);
/* definition of locally defined global variables ****************************/
@@ -894,7 +890,6 @@
bool_t changepr;/* cmd line overwrite inhibit specification */
bool_t interpr; /* cmd line interactive mode requested */
bool_t ownerpr; /* cmd line chown/chmod requested */
- bool_t restoredmpr; /* cmd line restore dm api attrs specification */
bool_t restoreextattrpr; /* cmd line restore extended attr spec */
bool_t sesscpltpr; /* force completion of prev interrupted session */
ix_t stcnt; /* cmd line number of subtrees requested */
@@ -956,7 +951,6 @@
newerpr = BOOL_FALSE;
changepr = BOOL_FALSE;
ownerpr = BOOL_FALSE;
- restoredmpr = BOOL_FALSE;
restoreextattrpr = BOOL_TRUE;
sesscpltpr = BOOL_FALSE;
stcnt = 0;
@@ -1162,8 +1156,11 @@
tranp->t_noinvupdatepr = BOOL_TRUE;
break;
case GETOPT_SETDM:
- restoredmpr = BOOL_TRUE;
- break;
+ mlog(MLOG_NORMAL | MLOG_ERROR, _(
+ "-%c option no longer supported\n"),
+ GETOPT_SETDM);
+ usage();
+ return BOOL_FALSE;
case GETOPT_ALERTPROG:
if (!optarg || optarg[0] == '-') {
mlog(MLOG_NORMAL | MLOG_ERROR, _(
@@ -1574,12 +1571,6 @@
}
if (persp->a.valpr) {
- if (restoredmpr && persp->a.restoredmpr != restoredmpr) {
- mlog(MLOG_NORMAL | MLOG_ERROR, _(
- "-%c cannot reset flag from previous restore\n"),
- GETOPT_SETDM);
- return BOOL_FALSE;
- }
if (!restoreextattrpr &&
persp->a.restoreextattrpr != restoreextattrpr) {
mlog(MLOG_NORMAL | MLOG_ERROR, _(
@@ -1734,7 +1725,6 @@
persp->a.newerpr = newerpr;
persp->a.newertime = newertime;
}
- persp->a.restoredmpr = restoredmpr;
if (!persp->a.dstdirisxfspr) {
restoreextattrpr = BOOL_FALSE;
}
@@ -2365,7 +2355,6 @@
scrhdrp->cih_inomap_nondircnt,
tranp->t_vmsz,
fullpr,
- persp->a.restoredmpr,
persp->a.dstdirisxfspr,
grhdrp->gh_version,
tranp->t_truncategenpr);
@@ -7313,9 +7302,6 @@
case S_IFBLK:
case S_IFCHR:
case S_IFIFO:
-#ifdef S_IFNAM
- case S_IFNAM:
-#endif
case S_IFSOCK:
ok = restore_spec(fhdrp, rvp, path1);
return ok;
@@ -7549,12 +7535,6 @@
}
}
- if (persp->a.dstdirisxfspr && persp->a.restoredmpr) {
- HsmBeginRestoreFile(bstatp,
- *fdp,
- &strctxp->sc_hsmflags);
- }
-
return BOOL_TRUE;
}
@@ -7726,26 +7706,6 @@
strerror(errno));
}
- if (persp->a.dstdirisxfspr && persp->a.restoredmpr) {
- fsdmidata_t fssetdm;
-
- /* Set the DMAPI Fields. */
- fssetdm.fsd_dmevmask = bstatp->bs_dmevmask;
- fssetdm.fsd_padding = 0;
- fssetdm.fsd_dmstate = bstatp->bs_dmstate;
-
- rval = ioctl(fd, XFS_IOC_FSSETDM, (void *)&fssetdm);
- if (rval) {
- mlog(MLOG_NORMAL | MLOG_WARNING,
- _("attempt to set DMI attributes of %s "
- "failed: %s\n"),
- path,
- strerror(errno));
- }
-
- HsmEndRestoreFile(path, fd, &strcxtp->sc_hsmflags);
- }
-
/* set any extended inode flags that couldn't be set
* prior to restoring the data.
*/
@@ -7797,11 +7757,6 @@
case S_IFIFO:
printstr = _("named pipe");
break;
-#ifdef S_IFNAM
- case S_IFNAM:
- printstr = _("XENIX named pipe");
- break;
-#endif
case S_IFSOCK:
printstr = _("UNIX domain socket");
break;
@@ -8064,17 +8019,6 @@
strerror(errno));
}
}
-
- if (persp->a.restoredmpr) {
- fsdmidata_t fssetdm;
-
- /* Restore DMAPI fields. */
-
- fssetdm.fsd_dmevmask = bstatp->bs_dmevmask;
- fssetdm.fsd_padding = 0;
- fssetdm.fsd_dmstate = bstatp->bs_dmstate;
- rval = do_fssetdm_by_handle(path, &fssetdm);
- }
}
return BOOL_TRUE;
@@ -8777,7 +8721,7 @@
}
assert(nread == (int)(recsz - EXTATTRHDR_SZ));
- if (!persp->a.restoreextattrpr && !persp->a.restoredmpr) {
+ if (!persp->a.restoreextattrpr) {
continue;
}
@@ -8796,19 +8740,6 @@
}
} else if (isfilerestored && path[0] != '\0') {
setextattr(path, ahdrp);
-
- if (persp->a.dstdirisxfspr && persp->a.restoredmpr) {
- int flag = 0;
- char *attrname = (char *)&ahdrp[1];
- if (ahdrp->ah_flags & EXTATTRHDR_FLAGS_ROOT)
- flag = ATTR_ROOT;
- else if (ahdrp->ah_flags &
EXTATTRHDR_FLAGS_SECURE)
- flag = ATTR_SECURE;
-
- HsmRestoreAttribute(flag,
- attrname,
- &strctxp->sc_hsmflags);
- }
}
}
/* NOTREACHED */
@@ -9710,32 +9641,6 @@
}
static int
-do_fssetdm_by_handle(
- char *path,
- fsdmidata_t *fdmp)
-{
- void *hanp;
- size_t hlen=0;
- int rc;
-
- if (path_to_handle(path, &hanp, &hlen)) {
- mlog(MLOG_NORMAL | MLOG_WARNING, _(
- "path_to_handle of %s failed:%s\n"),
- path, strerror(errno));
- return -1;
- }
-
- rc = fssetdm_by_handle(hanp, hlen, fdmp);
- free_handle(hanp, hlen);
- if (rc) {
- mlog(MLOG_NORMAL | MLOG_WARNING, _(
- "fssetdm_by_handle of %s failed %s\n"),
- path, strerror(errno));
- }
- return rc;
-}
-
-static int
quotafilecheck(char *type, char *dstdir, char *quotafile)
{
struct stat s;
diff -Nru xfsdump-3.1.9+0+nmu2/restore/Makefile xfsdump-3.1.11/restore/Makefile
--- xfsdump-3.1.9+0+nmu2/restore/Makefile 2020-07-11 02:31:08.000000000
+0200
+++ xfsdump-3.1.11/restore/Makefile 2022-08-08 15:48:54.000000000 +0200
@@ -115,6 +115,8 @@
$(LTINSTALL) -m 755 $(LTCOMMAND) $(PKG_ROOT_SBIN_DIR)
$(INSTALL) -m 755 -d $(PKG_SBIN_DIR)
# skip symlink when /sbin is alread symlinked to /usr/sbin, like on
Fedora
+ test $(PKG_ROOT_SBIN_DIR) -ef $(PKG_SBIN_DIR) || \
+ $(INSTALL) -S $(PKG_ROOT_SBIN_DIR)/$(LTCOMMAND)
$(PKG_SBIN_DIR)/$(LTCOMMAND)
install-dev:
.dep: $(COMMINCL) $(COMMON) $(INVINCL) $(INVCOMMON)
diff -Nru xfsdump-3.1.9+0+nmu2/restore/tree.c xfsdump-3.1.11/restore/tree.c
--- xfsdump-3.1.9+0+nmu2/restore/tree.c 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/restore/tree.c 2022-08-26 18:09:51.000000000 +0200
@@ -108,9 +108,6 @@
bool_t p_ignoreorphpr;
/* set if positive subtree or interactive
*/
- bool_t p_restoredmpr;
- /* restore DMI event settings
- */
bool_t p_truncategenpr;
/* truncate inode generation number (for compatibility
* with xfsdump format 2 and earlier)
@@ -348,7 +345,6 @@
size64_t nondircnt,
size64_t vmsz,
bool_t fullpr,
- bool_t restoredmpr,
bool_t dstdirisxfspr,
uint32_t dumpformat,
bool_t truncategenpr)
@@ -508,10 +504,6 @@
*/
persp->p_fullpr = fullpr;
- /* record if DMI event settings should be restored
- */
- persp->p_restoredmpr = restoredmpr;
-
/* record if truncated generation numbers are required
*/
if (dumpformat < GLOBAL_HDR_VERSION_3) {
@@ -2550,31 +2542,6 @@
}
}
- if (tranp->t_dstdirisxfspr && persp->p_restoredmpr) {
- fsdmidata_t fssetdm;
-
- fssetdm.fsd_dmevmask = dirattr_get_dmevmask(dah);
- fssetdm.fsd_padding = 0; /* not used */
- fssetdm.fsd_dmstate = (uint16_t)dirattr_get_dmstate(dah);
-
- /* restore DMAPI event settings etc.
- */
- rval = ioctl(fd,
- XFS_IOC_FSSETDM,
- (void *)&fssetdm);
- if (rval) {
- mlog(errno == EINVAL
- ?
- (MLOG_NITTY + 1) | MLOG_TREE
- :
- MLOG_NITTY | MLOG_TREE,
- "set DMI attributes"
- " of %s failed: %s\n",
- path,
- strerror(errno));
- }
- }
-
utimbuf.actime = dirattr_get_atime(dah);
utimbuf.modtime = dirattr_get_mtime(dah);
rval = utime(path, &utimbuf);
diff -Nru xfsdump-3.1.9+0+nmu2/restore/tree.h xfsdump-3.1.11/restore/tree.h
--- xfsdump-3.1.9+0+nmu2/restore/tree.h 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/restore/tree.h 2022-08-26 18:09:51.000000000 +0200
@@ -31,7 +31,6 @@
size64_t nondircnt,
size64_t vmsz,
bool_t fullpr,
- bool_t restoredmpr,
bool_t dstdirisxfspr,
uint32_t dumpformat,
bool_t truncategenpr);
diff -Nru xfsdump-3.1.9+0+nmu2/VERSION xfsdump-3.1.11/VERSION
--- xfsdump-3.1.9+0+nmu2/VERSION 2020-01-31 18:30:58.000000000 +0100
+++ xfsdump-3.1.11/VERSION 2022-08-26 18:09:51.000000000 +0200
@@ -3,5 +3,5 @@
#
PKG_MAJOR=3
PKG_MINOR=1
-PKG_REVISION=9
+PKG_REVISION=11
PKG_BUILD=1