Bug 671015 - xfs_fsr returns XFS_IOC_SWAPEXT failed: filename: Invalid argument
xfs_fsr returns XFS_IOC_SWAPEXT failed: filename: Invalid argument
Status: CLOSED INSUFFICIENT_DATA
Product: Fedora
Classification: Fedora
Component: xfsprogs (Show other bugs)
14
x86_64 Linux
low Severity medium
: ---
: ---
Assigned To: Eric Sandeen
Fedora Extras Quality Assurance
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2011-01-19 17:19 EST by arth
Modified: 2017-07-18 22:22 EDT (History)
5 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2011-11-01 14:55:32 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)
xfs function trace (343.89 KB, text/plain)
2011-01-20 16:37 EST, arth
no flags Details

  None (edit)
Description arth 2011-01-19 17:19:32 EST
Description of problem:

xfs_fsr fails with:
XFS_IOC_SWAPEXT failed: [filename]: Invalid argument

Version-Release number of selected component (if applicable):

xfsprogs-3.1.2-1.fc14.x86_64

How reproducible:

I'm uncertain how to produce this situation from scratch.

Additional info:

In my case, it happens for /var/cache/man/index.db, which is on the root filesystem.

# xfs_bmap /var/cache/man/index.db 
/var/cache/man/index.db:
	0: [0..39]: 204865160..204865199
	1: [40..975]: 213619224..213620159
	2: [976..1535]: 213658424..213658983
	3: [1536..2047]: 213665112..213665623
	4: [2048..2303]: 213664840..213665095
	5: [2304..4223]: 213992320..213994239
	6: [4224..4231]: hole
	7: [4232..4919]: 213994248..213994935

# xfs_fsr -v /var/cache/man/index.db 
/var/cache/man/index.db
XFS_IOC_SWAPEXT failed: /var/cache/man/index.db: Invalid argument

system log reports:
Jan 19 17:03:26 hostname kernel: [1314182.278187] Filesystem "md2": fs/xfs/xfs_dfrag.c: inode 0x1820fea8 format is incompatible for exchanging.

md2 is a clean raid 1 with default mount options.

# grep md2 /etc/mtab
/dev/md2 / xfs rw 0 0

# mdadm -D /dev/md2  
/dev/md2:
        Version : 0.90
  Creation Time : Mon Sep 27 09:07:59 2010
     Raid Level : raid1
     Array Size : 134217664 (128.00 GiB 137.44 GB)
  Used Dev Size : 134217664 (128.00 GiB 137.44 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 2
    Persistence : Superblock is persistent

    Update Time : Wed Jan 19 17:09:17 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : f0f8d714:f2f441c6:bfe78010:bc810f04
         Events : 0.1511

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1


# xfs_info /dev/md2
meta-data=/dev/md2               isize=256    agcount=4, agsize=8388604 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=33554416, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal               bsize=4096   blocks=16383, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0



A somewhat similar bug was reported earlier, but that turned out to be an selinux context problem.  In this case, this doesn't appear to be the case:

# ls -Z index.db 
-rw-r--r--. root root system_u:object_r:man_t:s0       index.db



Further to this, if I _copy_ the file, and run xfs_fsr against the copy, the following happens:

# cp index.db index.db.bak
# ls -l index.db*
-rw-r--r--. 1 root root 2515043 Jan 19 03:19 index.db
-rw-r--r--. 1 root root 2515043 Jan 19 17:16 index.db.bak
# xfs_fsr -v index*
index.db
XFS_IOC_SWAPEXT failed: index.db: Invalid argument
index.db.bak
index.db.bak: zero size, ignoring

... but repeating it a second time works for the copy.
# xfs_fsr -v index*
index.db
XFS_IOC_SWAPEXT failed: index.db: Invalid argument
index.db.bak
index.db.bak already fully defragmented.
Comment 1 arth 2011-01-19 17:24:33 EST
Misc version details:

$ rpm -qf `which xfs_fsr`
xfsprogs-3.1.2-1.fc14.x86_64
$ uname -r
2.6.35.10-74.fc14.x86_64
Comment 2 Eric Sandeen 2011-01-19 17:39:38 EST
swapext can fail for a few reasons... ah, you provided the dmesg.  Excellent!

> Jan 19 17:03:26 hostname kernel: [1314182.278187] Filesystem "md2":
> fs/xfs/xfs_dfrag.c: inode 0x1820fea8 format is incompatible for exchanging.

That went in with this commit:

commit e09f98606dcc156de1146c209d45a0d6d5f51c3f
Author: Dave Chinner <david@fromorbit.com>
Date:   Thu Jan 14 01:33:54 2010 +0000

    xfs: xfs_swap_extents needs to handle dynamic fork offsets
    
    When swapping extents, we can corrupt inodes by swapping data forks
    that are in incompatible formats.  This is caused by the two indoes
    having different fork offsets due to the presence of an attribute
    fork on an attr2 filesystem.  xfs_fsr tries to be smart about
    setting the fork offset, but the trick it plays only works on attr1
    (old fixed format attribute fork) filesystems.
    
    Changing the way xfs_fsr sets up the attribute fork will prevent
    this situation from ever occurring, so in the kernel code we can get
    by with a preventative fix - check that the data fork in the
    defragmented inode is in a format valid for the inode it is being
    swapped into.  This will lead to files that will silently and
    potentially repeatedly fail defragmentation, so issue a warning to
    the log when this particular failure occurs to let us know that
    xfs_fsr needs updating/fixing.
    
    To help identify how to improve xfs_fsr to avoid this issue, add
    trace points for the inodes being swapped so that we can determine
    why the swap was rejected and to confirm that the code is making the
    right decisions and modifications when swapping forks.
    
    A further complication is even when the swap is allowed to proceed
    when the fork offset is different between the two inodes then value
    for the maximum number of extents the data fork can hold can be
    wrong. Make sure these are also set correctly after the swap occurs.
    
    Signed-off-by: Dave Chinner <david@fromorbit.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Alex Elder <aelder@sgi.com>

If you're familiar with tracepoints, can you enable these and watch?

This should do it:

# mount -t debugfs none /sys/kernel/debug
# echo 1 > /sys/kernel/debug/tracing/tracing_enabled
# echo 1 > /sys/kernel/debug/tracing/events/xfs/xfs_swap_extent_before/enable
# echo 1 > /sys/kernel/debug/tracing/events/xfs/xfs_swap_extent_after/enable

<run your failing fsr run>

# cat /sys/kernel/debug/tracing/trace

and paste that output here.  Thanks!

-Eric
Comment 3 Dave Chinner 2011-01-19 18:31:10 EST
There's was an update to xfs_fsr itself that minimises the occurrences of this failure:

http://git.kernel.org/?p=fs/xfs/xfsprogs-dev.git;a=commit;h=bdb041f58dc436dcb10b698ed8715fb889589b90

xfs_fsr: Improve handling of attribute forks V2

It should be in xfsprogs 3.1.2, so I'm interested to see what configuration on inode is not being handled now. The tracing output should tell us.
Comment 4 arth 2011-01-20 16:35:32 EST
As chance would have it, cron.daily/man-db.cron replaced the file overnight, so the test case disappeared (for now).  :-/

I also see the same problem for a F12 system -- also with an attr=2 filesystem.  

file:  /var/log/wtmp
Filesystem "dm-2": fs/xfs/xfs_dfrag.c: inode 0x1001b883 format is incompatible for exchanging.

Unfortunately F12 doesn't have event debug options for xfs (I'll attach a trace of the xfs function calls - not sure whether that'll help).

Both wtmp and the apropos database are sparse files, with the holes changing over time, which might have something to do with this.

I'll run a few scripts here that create and modify a multitude of sparse dbs overnight, and see whether I can replicate the problem on the F14 system too.
Comment 5 arth 2011-01-20 16:37:00 EST
Created attachment 474550 [details]
xfs function trace

attached function trace from F12 system with similar problem on attr=2 sparse file.
Comment 6 Dave Chinner 2011-02-01 00:48:11 EST
(In reply to comment #5)
> Created attachment 474550 [details]
> xfs function trace
> 
> attached function trace from F12 system with similar problem on attr=2 sparse
> file.

That's a function trace, which is not very useful for diagnosing the problem because it doesn't tell us any details about the inode state before and after the swap that is causing problems.

Can you run the trace commands that Eric asked you to in comment #2? They are the trace points I added specifically to debug this class of problem.....

Cheers,

Dave.
Comment 7 Eric Sandeen 2011-06-14 18:27:47 EDT
Is this still happening?  Can you try what was suggested in comment #2?  If not we'll have to close this one for lack of information, I'm afraid.

Thanks,
-Eric
Comment 8 ope-linux 2012-01-07 14:39:49 EST
maybe I can help here since I do have the same problem (Fedora 16, WD20EARS)

# echo 1 > /sys/kernel/debug/tracing/tracing_enabled
# echo 1 > /sys/kernel/debug/tracing/events/xfs/xfs_swap_extent_before/enable
# echo 1 > /sys/kernel/debug/tracing/events/xfs/xfs_swap_extent_after/enable
# xfs_fsr -v -t 7200 /storage/videos/
# cat /sys/kernel/debug/tracing/trace 
# tracer: nop
#
#           TASK-PID    CPU#    TIMESTAMP  FUNCTION
#              | |       |          |         |
           <...>-21999 [002] 41361.301117: xfs_swap_extent_before: dev 8:33 ino 0x803f1e62 (target), extent format, num_extents 8, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [002] 41361.301118: xfs_swap_extent_before: dev 8:33 ino 0x800000b3 (temp), extent format, num_extents 3, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [001] 41387.781155: xfs_swap_extent_before: dev 8:33 ino 0x803f1e65 (target), extent format, num_extents 7, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [001] 41387.781156: xfs_swap_extent_before: dev 8:33 ino 0xb4 (temp), extent format, num_extents 2, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [002] 41418.183222: xfs_swap_extent_before: dev 8:33 ino 0x803f1e8c (target), extent format, num_extents 7, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [002] 41418.183223: xfs_swap_extent_before: dev 8:33 ino 0x800000b3 (temp), extent format, num_extents 3, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [002] 41438.763103: xfs_swap_extent_before: dev 8:33 ino 0x803f1e92 (target), extent format, num_extents 7, Max in-fork extents 7, broot size 0, fork offset 112
           <...>-21999 [002] 41438.763104: xfs_swap_extent_before: dev 8:33 ino 0xb4 (temp), extent format, num_extents 2, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [002] 41464.309170: xfs_swap_extent_before: dev 8:33 ino 0x803f1f9f (target), extent format, num_extents 7, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [002] 41464.309171: xfs_swap_extent_before: dev 8:33 ino 0xb4 (temp), extent format, num_extents 2, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [001] 41508.901103: xfs_swap_extent_before: dev 8:33 ino 0x803f2906 (target), extent format, num_extents 8, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [001] 41508.901104: xfs_swap_extent_before: dev 8:33 ino 0xb4 (temp), extent format, num_extents 4, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [002] 41545.617357: xfs_swap_extent_before: dev 8:33 ino 0x803f290a (target), extent format, num_extents 8, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [002] 41545.617358: xfs_swap_extent_before: dev 8:33 ino 0x800000b3 (temp), extent format, num_extents 4, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [002] 41618.852187: xfs_swap_extent_before: dev 8:33 ino 0x803f28f1 (target), extent format, num_extents 7, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [002] 41618.852189: xfs_swap_extent_before: dev 8:33 ino 0xb4 (temp), extent format, num_extents 6, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [000] 41659.280334: xfs_swap_extent_before: dev 8:33 ino 0x803f2909 (target), extent format, num_extents 7, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [000] 41659.280335: xfs_swap_extent_before: dev 8:33 ino 0x800000b3 (temp), extent format, num_extents 3, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [001] 41703.184998: xfs_swap_extent_before: dev 8:33 ino 0x803f291f (target), extent format, num_extents 7, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [001] 41703.184999: xfs_swap_extent_before: dev 8:33 ino 0xb4 (temp), extent format, num_extents 3, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [002] 41757.124627: xfs_swap_extent_before: dev 8:33 ino 0x803f2992 (target), extent format, num_extents 7, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [002] 41757.124628: xfs_swap_extent_before: dev 8:33 ino 0x800000b3 (temp), extent format, num_extents 4, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [001] 41805.595002: xfs_swap_extent_before: dev 8:33 ino 0x803f2a91 (target), extent format, num_extents 8, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [001] 41805.595004: xfs_swap_extent_before: dev 8:33 ino 0x800000b3 (temp), extent format, num_extents 4, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [003] 41842.077528: xfs_swap_extent_before: dev 8:33 ino 0x803f2a94 (target), extent format, num_extents 7, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [003] 41842.077530: xfs_swap_extent_before: dev 8:33 ino 0xb4 (temp), extent format, num_extents 4, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [001] 41881.908009: xfs_swap_extent_before: dev 8:33 ino 0x803f2c1e (target), extent format, num_extents 8, Max in-fork extents 9, broot size 0, fork offset 0
           <...>-21999 [001] 41881.908010: xfs_swap_extent_before: dev 8:33 ino 0xb4 (temp), extent format, num_extents 3, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [001] 41935.961044: xfs_swap_extent_before: dev 8:33 ino 0x832d4ffe (target), extent format, num_extents 6, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [001] 41935.961045: xfs_swap_extent_before: dev 8:33 ino 0xb4 (temp), extent format, num_extents 5, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [001] 41936.218933: xfs_swap_extent_after: dev 8:33 ino 0x832d4ffe (target), extent format, num_extents 5, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [001] 41936.218934: xfs_swap_extent_after: dev 8:33 ino 0xb4 (temp), extent format, num_extents 6, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [002] 41987.290780: xfs_swap_extent_before: dev 8:33 ino 0x832d4fff (target), extent format, num_extents 5, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [002] 41987.290782: xfs_swap_extent_before: dev 8:33 ino 0xb4 (temp), extent format, num_extents 4, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [002] 41987.599739: xfs_swap_extent_after: dev 8:33 ino 0x832d4fff (target), extent format, num_extents 4, Max in-fork extents 6, broot size 0, fork offset 104
           <...>-21999 [002] 41987.599741: xfs_swap_extent_after: dev 8:33 ino 0xb4 (temp), extent format, num_extents 5, Max in-fork extents 6, broot size 0, fork offset 104

Regards,
Olaf
Comment 9 ope-linux 2012-01-07 14:43:51 EST
maybe also useful:

# rpm -qf `which xfs_fsr`
xfsprogs-3.1.5-1.fc16.x86_64
# uname -r
3.1.6-1.fc16.x86_64

and the console output from above trace:

# xfs_fsr -v -t 7200 /storage/videos/
/storage/videos Start-Inode=0
ino=176
Es wird keine Verbesserung vorgenommen (übersprungen): ino=176
ino=175
Es wird keine Verbesserung vorgenommen (übersprungen): ino=175
ino=177
Es wird keine Verbesserung vorgenommen (übersprungen): ino=177
ino=172
Es wird keine Verbesserung vorgenommen (übersprungen): ino=172
ino=174
Es wird keine Verbesserung vorgenommen (übersprungen): ino=174
ino=1460128
Es wird keine Verbesserung vorgenommen (übersprungen): ino=1460128
ino=1463138
Es wird keine Verbesserung vorgenommen (übersprungen): ino=1463138
ino=2147483776
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2147483776
ino=2151615875
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151615875
ino=2151615883
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151615883
ino=2151615885
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151615885
ino=2151620194
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151620194: Das Argument ist ungültig
ino=2151620197
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151620197: Das Argument ist ungültig
ino=2151620236
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151620236: Das Argument ist ungültig
ino=2151620242
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151620242: Das Argument ist ungültig
ino=2151620225
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620225
ino=2151620461
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620461
ino=2151615892
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151615892
ino=2151615903
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151615903
ino=2151620193
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620193
ino=2151620205
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620205
ino=2151620223
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620223
ino=2151620238
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620238
ino=2151620239
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620239
ino=2151620241
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620241
ino=2151620450
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620450
ino=2151620451
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620451
ino=2151620454
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620454
ino=2151620465
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620465
ino=2151620474
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620474
ino=2151620477
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620477
ino=2151620478
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620478
ino=2151620482
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620482
ino=2151620487
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620487
ino=2151620498
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620498
ino=2151620971
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620971
ino=2151620511
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151620511: Das Argument ist ungültig
ino=2151620967
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620967
ino=2151620974
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620974
ino=2151620500
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620500
ino=2151620894
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620894
ino=2151620960
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620960
ino=2151620962
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620962
ino=2151620963
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620963
ino=2151620968
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620968
ino=2151620970
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620970
ino=2151620979
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151620979
ino=2151621005
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151621005
ino=2151622201
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622201
ino=2151622199
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622199
ino=2151622203
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622203
ino=2151622204
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622204
ino=2151622205
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622205
ino=2151622206
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622206
ino=2151622207
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622207
ino=2151622208
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622208
ino=2151622210
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622210
ino=2151622212
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622212
ino=2151622221
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622221
ino=2151622223
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622223
ino=2151622224
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622224
ino=2151622225
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622225
ino=2151622234
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622234
ino=2151622304
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622304
ino=2151622309
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622309
ino=2151622311
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622311
ino=2151622216
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622216
ino=2151622222
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622222
ino=2151622226
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622226
ino=2151622228
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622228
ino=2151622238
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622238
ino=2151622239
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622239
ino=2151622305
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622305
ino=2151622306
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622306
ino=2151622307
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622307
ino=2151622308
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622308
ino=2151622310
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622310
ino=2151622312
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622312
ino=2151622918
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151622918: Das Argument ist ungültig
ino=2151622922
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151622922: Das Argument ist ungültig
ino=2151622897
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151622897: Das Argument ist ungültig
ino=2151622921
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151622921: Das Argument ist ungültig
ino=2151622943
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151622943: Das Argument ist ungültig
ino=2151623058
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151623058: Das Argument ist ungültig
ino=2151622891
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622891
ino=2151622903
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622903
ino=2151622929
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622929
ino=2151623046
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623046
ino=2151622890
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622890
ino=2151622892
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622892
ino=2151622893
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622893
ino=2151622894
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622894
ino=2151622895
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622895
ino=2151622896
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622896
ino=2151622901
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622901
ino=2151622904
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622904
ino=2151622906
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622906
ino=2151622907
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622907
ino=2151622908
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622908
ino=2151622910
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622910
ino=2151622911
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622911
ino=2151622914
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622914
ino=2151622915
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622915
ino=2151622919
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622919
ino=2151622927
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622927
ino=2151622928
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622928
ino=2151622935
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622935
ino=2151622938
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151622938
ino=2151623044
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623044
ino=2151623054
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623054
ino=2151623287
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623287
ino=2151623313
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151623313: Das Argument ist ungültig
ino=2151623316
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151623316: Das Argument ist ungültig
ino=2151623304
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623304
ino=2151623598
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623598
ino=2151623307
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623307
ino=2151623308
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623308
ino=2151623309
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623309
ino=2151623560
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623560
ino=2151623565
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623565
ino=2151623596
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623596
ino=2151623597
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623597
ino=2151623710
XFS_IOC_SWAPEXT fehlgeschlagen: ino=2151623710: Das Argument ist ungültig
ino=2151623696
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623696
ino=2151623685
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623685
ino=2151623704
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623704
ino=2151623604
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623604
ino=2151623681
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623681
ino=2151623695
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623695
ino=2151623701
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623701
ino=2151623705
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623705
ino=2151623706
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623706
ino=2151623707
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623707
ino=2151623711
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2151623711
ino=2200779605
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200779605
ino=2200780832
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200780832
ino=2200780834
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200780834
ino=2200784899
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784899
ino=2200784870
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784870
ino=2200784871
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784871
ino=2200784894
extents vorher: 6 nachher: 5      ino=2200784894
ino=2200784897
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784897
ino=2200784895
extents vorher: 5 nachher: 4      ino=2200784895
ino=2200784898
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784898
ino=2200785338
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200785338
ino=2200784869
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784869
ino=2200784892
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784892
ino=2200784896
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784896
ino=2200785341
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200785341
ino=2200784900
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784900
ino=2200784868
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784868
ino=2200784888
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784888
ino=2200784889
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784889
ino=2200784893
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200784893
ino=2200785340
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2200785340
ino=2267785635
Es wird keine Verbesserung vorgenommen (übersprungen): ino=2267785635
Comment 10 Dave Chinner 2012-01-09 00:01:46 EST
(In reply to comment #8)
> maybe I can help here since I do have the same problem (Fedora 16, WD20EARS)
> 
> # echo 1 > /sys/kernel/debug/tracing/tracing_enabled
> # echo 1 > /sys/kernel/debug/tracing/events/xfs/xfs_swap_extent_before/enable
> # echo 1 > /sys/kernel/debug/tracing/events/xfs/xfs_swap_extent_after/enable
> # xfs_fsr -v -t 7200 /storage/videos/
> # cat /sys/kernel/debug/tracing/trace 
> # tracer: nop

I'll trim this a bit to make it obvious why XFs is throwing the error, and why it is correct to do so.

> 0x803f1e62 (target), extent format, num_extents 8, Max in-fork extents 9,
> 0x800000b3 (temp), extent format, num_extents 3, Max in-fork extents 6,

So the first pair shows the target has more extents than the temp file can fit in the data fork, therefore they cannot be swapped. The reason appears to be that:

> fork offset 0
> fork offset 104

the temp file has attributes while the defrag target file does not. So, the temp file that xfs_fsr is creating has attributes and it would be interesting to know what they are to see what they are. That's because xfs-fsr is not supposed to create attributes on the temp files unless the target file has attributes (which the fork offset of 0 says it doesn't).

All of the failures follow this pattern, but from what I see the problem is somethign do do with inconsistency of attributes between the inodes that defrag is working on. Are you using default ACLs or some kind of security policy that creates attribute automatically when new files are created?

Cheers,

Dave.
Comment 11 ope-linux 2012-01-09 01:52:16 EST
Hi Dave,

in what for infos are you interested in? I'm a Linux lamer on such low level questions ;-) Suggestions as on Comment #2 are very useful therefore.

Anyway, I'm not on my box at home at this time. So far: I've enabled selinux, imo no special security policies are applied, but I have to check the defaults (ls -Z you mean ?). The xfs HD (WD20EARS, no lvm) is mounted on /storage/videos with (basically) options noatime,nodiratime,allocsize=512m at fstab. More informations later. 

Regards,
Olaf
Comment 12 ope-linux 2012-01-09 11:29:39 EST
ok, more infos:

# find /storage/videos/ -type f -exec ls -Z {} \; | awk -e '{print $4}' | sort -u 
system_u:object_r:file_t:s0
system_u:object_r:samba_share_t:s0
unconfined_u:object_r:file_t:s0
# mount|grep videos
/dev/sdc1 on /storage/videos type xfs (rw,noatime,nodiratime,seclabel,attr2,delaylog,allocsize=524288k,noquota)
# sestatus 
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 26
Policy from config file:        targeted

what is required even more?
Comment 13 ope-linux 2012-01-17 08:31:14 EST
are these information still insufficient?
Comment 14 Gabriel VLASIU 2012-03-23 17:10:22 EDT
# xfs_fsr -vvv \{aed7ec6a-7659-494a-8837-cabce9e6f506\}.vdi
{aed7ec6a-7659-494a-8837-cabce9e6f506}.vdi
XFS_IOC_SWAPEXT failed: {aed7ec6a-7659-494a-8837-cabce9e6f506}.vdi: Invalid argument

The kernel version is 3.3.0, x86_64
xfsprogs-3.1.5-1.fc16.x86_64

# cat /sys/kernel/debug/tracing/trace
# tracer: nop
#
# entries-in-buffer/entries-written: 2/2   #P:2
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |
         xfs_fsr-3895  [000] .... 108290.726664: xfs_swap_extent_before: dev 7:0 ino 0x400dd2e4 (target), btree format, num_extents 1463, broot size 120, fork offset 104
         xfs_fsr-3895  [000] .... 108290.726666: xfs_swap_extent_before: dev 7:0 ino 0x1c4917 (temp), extent format, num_extents 1, broot size 0, fork offset 104
Comment 15 Eric Sandeen 2012-03-28 00:07:12 EDT
The patch at http://oss.sgi.com/archives/xfs/2012-03/msg00554.html should fix Gabriel's problem.  Turns out to be different from the original reported problem, though.

Note You need to log in before you can comment on or make changes to this bug.