Date: Tue, 28 Aug 2012 18:01:34 +0300 From: Andriy Gapon <avg@FreeBSD.org> To: Trent Nelson <trent@snakebite.org> Cc: freebsd-fs@FreeBSD.org Subject: Re: chmod -h 000x against symlink has bizarre results on ZFS Message-ID: <503CDD4E.6050902@FreeBSD.org> In-Reply-To: <503CD4F1.6060001@FreeBSD.org> References: <20120824011517.GJ42732@snakebite.org> <503CD4F1.6060001@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
on 28/08/2012 17:25 Andriy Gapon said the following: [snip] > I can reproduce this problem > I can also provide some additional bits of information using a modified version of > zdb: > > $ ln -fs definitelywaylongerthantwentyfour definitelywaylongerthantwentyfour.lnk > $ stat -s definitelywaylongerthantwentyfour.lnk > st_dev=3895460379 st_ino=27165 st_mode=0120755 st_nlink=1 st_uid=0 st_gid=0 > st_rdev=4294967295 st_size=33 st_atime=1346161009 st_mtime=1346161009 > st_ctime=1346161009 st_birthtime=1346161009 st_blksize=131072 st_blocks=1 st_flags=0 > $ zdb -ddddddd tank/tmp 27165 > Dataset tank/tmp [ZPL], ID 69, cr_txg 31, 4.57G, 24910 objects, rootbp > DVA[0]=<0:5c5375e000:200> DVA[1]=<0:4c1a80ce00:200> [L0 DMU objset] fletcher4 lzjb > LE contiguous unique double size=800L/200P birth=70882769L/70882769P fill=24910 > cksum=1c72e8f065:89bbdf9d575:1732432c541ff:2d672d98b0ff66 > > Object lvl iblk dblk dsize lsize %full type > 27165 1 16K 512 0 512 0.00 ZFS plain file (K=inherit) > (Z=inherit) > 209 bonus System attributes > dnode flags: USERUSED_ACCOUNTED > dnode maxblkid: 0 > path /definitelywaylongerthantwentyfour.lnk > uid 0 > gid 0 > atime Tue Aug 28 16:36:49 2012 > mtime Tue Aug 28 16:36:49 2012 > ctime Tue Aug 28 16:36:49 2012 > crtime Tue Aug 28 16:36:49 2012 > gen 70882769 > mode 120755 > size 33 > parent 3 > links 1 > pflags 40800000104 > symlink definitelywaylongerthantwentyfour > symlink size 33 > Indirect blocks: > > $ chmod -h 0007 definitelywaylongerthantwentyfour.lnk > $ stat -s definitelywaylongerthantwentyfour.lnk > st_dev=3895460379 st_ino=27165 st_mode=0120007 st_nlink=1 st_uid=0 st_gid=0 > st_rdev=4294967295 st_size=33 st_atime=1346161009 st_mtime=1346161009 > st_ctime=1346161227 st_birthtime=1346161227 st_blksize=131072 st_blocks=1 st_flags=0 > $ zdb -ddddddd tank/tmp 27165 > Dataset tank/tmp [ZPL], ID 69, cr_txg 31, 4.57G, 24910 objects, rootbp > DVA[0]=<0:5c556b4400:200> DVA[1]=<0:4c1a989600:200> [L0 DMU objset] fletcher4 lzjb > LE contiguous unique double size=800L/200P birth=70882812L/70882812P fill=24910 > cksum=170e778d58:737e87307d3:140a45f4106a6:283187f7da9de7 > > Object lvl iblk dblk dsize lsize %full type > 27165 1 16K 512 0 512 0.00 ZFS plain file (K=inherit) > (Z=inherit) > 216 bonus System attributes > dnode flags: USERUSED_ACCOUNTED > dnode maxblkid: 0 > path /definitelywaylongerthantwentyfour.lnk > uid 0 > gid 0 > atime Tue Aug 28 16:36:49 2012 > mtime Tue Aug 28 16:36:49 2012 > ctime Tue Aug 28 16:40:27 2012 > crtime Tue Aug 28 16:36:49 2012 > gen 70882769 > mode 120007 > size 33 > parent 3 > links 1 > pflags 40800000004 > symlink definitelywaylongerthant > symlink size 24 > Indirect blocks: > > Note how the file/object size remains 33, but size of ZPL_SYMLINK attribute is > changed to 24. > Will you be able to test the following patch? Preferably on a temporary test pool - I don't want to risk your data. diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c index 69374fb..7f61517 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c @@ -1695,6 +1695,7 @@ sa_modify_attrs(sa_handle_t *hdl, sa_attr_type_t newattr, ASSERT(action == SA_REPLACE); SA_ADD_BULK_ATTR(attr_desc, j, attr, locator, datastart, buflen); + length_idx++; } else { length = SA_REGISTERED_LEN(sa, attr); if (length == 0) { -- Andriy Gapon
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?503CDD4E.6050902>