This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
docs:vserver [2015-10-05 14:25] arekm |
docs:vserver [2015-10-05 15:07] (current) glen syn on |
||
---|---|---|---|
Line 722: | Line 722: | ||
That's because vserver patch for kernels earlier than 2.6.23 patched xfs filesystem to introduce new flag: | That's because vserver patch for kernels earlier than 2.6.23 patched xfs filesystem to introduce new flag: | ||
- | <file> | + | <file c> |
#define XFS_XFLAG_BARRIER 0x00004000 /* chroot() barrier */ | #define XFS_XFLAG_BARRIER 0x00004000 /* chroot() barrier */ | ||
</file> | </file> | ||
+ | |||
+ | and files/dirs with such flag got saved on your filesystem. | ||
Starting with kernel 2.6.23 kernel introduced filestreams which are using 0x00004000 bit, thus causing conflict with vserver. | Starting with kernel 2.6.23 kernel introduced filestreams which are using 0x00004000 bit, thus causing conflict with vserver. | ||
- | <file> | + | <file c> |
#define XFS_XFLAG_FILESTREAM 0x00004000 /* use filestream allocator */ | #define XFS_XFLAG_FILESTREAM 0x00004000 /* use filestream allocator */ | ||
</file> | </file> | ||
Line 734: | Line 736: | ||
Vserver stopped adding such xfs xflag in 3.13 BUT your existing filesystem can still have XFS_XFLAG_BARRIER (0x00004000) set | Vserver stopped adding such xfs xflag in 3.13 BUT your existing filesystem can still have XFS_XFLAG_BARRIER (0x00004000) set | ||
causing oops in newer kernels. | causing oops in newer kernels. | ||
+ | |||
+ | How to find out if I'm affected? | ||
+ | |||
+ | IIF you don't use filestream feature then modify http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/cmds/xfstests.git;a=blob_plain;f=src/bstat.c;hb=HEAD to show only files containing XFS_XFLAG_FILESTREAM | ||
+ | |||
+ | <file diff> | ||
+ | diff --git a/src/bstat.c b/src/bstat.c | ||
+ | index 4e22ecd..887512f 100644 | ||
+ | --- a/src/bstat.c | ||
+ | +++ b/src/bstat.c | ||
+ | @@ -34,19 +34,21 @@ dotime(void *ti, char *s) | ||
+ | void | ||
+ | printbstat(xfs_bstat_t *sp) | ||
+ | { | ||
+ | - printf("ino %lld mode %#o nlink %d uid %d gid %d rdev %#x\n", | ||
+ | - (long long)sp->bs_ino, sp->bs_mode, sp->bs_nlink, | ||
+ | - sp->bs_uid, sp->bs_gid, sp->bs_rdev); | ||
+ | - printf("\tblksize %d size %lld blocks %lld xflags %#x extsize %d\n", | ||
+ | - sp->bs_blksize, (long long)sp->bs_size, (long long)sp->bs_blocks, | ||
+ | - sp->bs_xflags, sp->bs_extsize); | ||
+ | - dotime(&sp->bs_atime, "atime"); | ||
+ | - dotime(&sp->bs_mtime, "mtime"); | ||
+ | - dotime(&sp->bs_ctime, "ctime"); | ||
+ | - printf( "\textents %d %d gen %d\n", | ||
+ | - sp->bs_extents, sp->bs_aextents, sp->bs_gen); | ||
+ | - printf( "\tDMI: event mask 0x%08x state 0x%04x\n", | ||
+ | - sp->bs_dmevmask, sp->bs_dmstate); | ||
+ | + if (sp->bs_xflags & XFS_XFLAG_FILESTREAM) { | ||
+ | + printf("ino %lld mode %#o nlink %d uid %d gid %d rdev %#x\n", | ||
+ | + (long long)sp->bs_ino, sp->bs_mode, sp->bs_nlink, | ||
+ | + sp->bs_uid, sp->bs_gid, sp->bs_rdev); | ||
+ | + printf("\tblksize %d size %lld blocks %lld xflags %#x extsize %d\n", | ||
+ | + sp->bs_blksize, (long long)sp->bs_size, (long long)sp->bs_blocks, | ||
+ | + sp->bs_xflags, sp->bs_extsize); | ||
+ | + dotime(&sp->bs_atime, "atime"); | ||
+ | + dotime(&sp->bs_mtime, "mtime"); | ||
+ | + dotime(&sp->bs_ctime, "ctime"); | ||
+ | + printf( "\textents %d %d gen %d\n", | ||
+ | + sp->bs_extents, sp->bs_aextents, sp->bs_gen); | ||
+ | + printf( "\tDMI: event mask 0x%08x state 0x%04x\n", | ||
+ | + sp->bs_dmevmask, sp->bs_dmstate); | ||
+ | + } | ||
+ | } | ||
+ | </file> | ||
+ | |||
+ | and then run it with mounted directory of each filesystem (bstat /; bstat /home etc). It will print "ino ..." information for filestream files. | ||
+ | |||
+ | |||
+ | How to clean up? | ||
+ | |||
+ | rsync files to other partition, recreate problematic partition and then copy files back. | ||
===== Debian or Ubuntu guest installation ===== | ===== Debian or Ubuntu guest installation ===== |