From: Emoly Liu Date: Mon, 18 Feb 2013 10:17:50 +0000 (+0800) Subject: LU-2634 ldiskfs: clear extent flag for fast symlink X-Git-Tag: 2.1.5~31 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=18d4da9bdb79d87567e19a2fed27b6b886e76434;p=fs%2Flustre-release.git LU-2634 ldiskfs: clear extent flag for fast symlink Fast symlinks on MDT filesystems formatted with the "extents" feature are created with EXT4_EXTENTS_FL. e2fsck considers this a corruption and deletes the symlink. The patch is to clear extent flag in osd_ldiskfs_writelink() just as ext4_symlink() does. Signed-off-by: Liu Ying Change-Id: Ic0c711cc82de140f86baa71bacd1721fd4a19e07 Reviewed-on: http://review.whamcloud.com/5458 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Bobi Jam Reviewed-by: Andreas Dilger --- diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c index cbed4fc..b01138b 100644 --- a/lustre/osd-ldiskfs/osd_handler.c +++ b/lustre/osd-ldiskfs/osd_handler.c @@ -2544,6 +2544,8 @@ static ssize_t osd_read(const struct lu_env *env, struct dt_object *dt, static int osd_ldiskfs_writelink(struct inode *inode, char *buffer, int buflen) { + /* LU-2634: clear the extent format for fast symlink */ + LDISKFS_I(inode)->i_flags &= ~LDISKFS_EXTENTS_FL; memcpy((char*)&LDISKFS_I(inode)->i_data, (char *)buffer, buflen); diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index adbb9de..1ca6c91 100644 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -2807,6 +2807,42 @@ test_65() { # LU-2237 } run_test 65 "re-create the lost last_rcvd file when server mount" +test_66() { #LU-2634 + local mdsdev=$(mdsdevname 1) + local ostdev=$(ostdevname 1) + local cmd="$E2FSCK -fnvd $mdsdev" + local fn=3 + + #tune MDT with "-O extents" + add $SINGLEMDS \ + $(mkfs_opts $SINGLEMDS ${mdsdev}) --reformat $mdsdev || + error "add $SINGLEMDS failed" + $TUNE2FS -O extents $mdsdev + add ost1 $(mkfs_opts ost1 $ostdev) --reformat $ostdev || + error "add $ostdev failed" + start_mgsmds || error "start mds failed" + start_ost || error "start ost failed" + mount_client $MOUNT || error "mount client failed" + + #create some short symlinks + mkdir -p $DIR/$tdir + createmany -o $DIR/$tdir/$tfile-%d $fn + echo "create $fn short symlinks" + for i in $(seq -w 1 $fn); do + ln -s $DIR/$tdir/$tfile-$i $MOUNT/$tfile-$i + done + ls -al $MOUNT + + #umount + umount_client $MOUNT || error "umount client failed" + stop_mds || error "stop mds failed" + stop_ost || error "stop ost failed" + + #run e2fsck + run_e2fsck $(facet_active_host $SINGLEMDS) $mdsdev "-n" +} +run_test 66 "test fast symlink with extents flag enabled" + if ! combined_mgs_mds ; then stop mgs fi