Date: Sun, 16 Oct 2005 13:18:27 GMT From: soc-chenk <soc-chenk@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 85367 for review Message-ID: <200510161318.j9GDIR6m062335@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=85367 Change 85367 by soc-chenk@soc-chenk_leavemealone on 2005/10/16 13:17:34 add option for prefixing absolute symlinks with mount path Submitted by: soc-chenk Affected files ... .. //depot/projects/soc2005/fuse4bsd2/fuse_module/fuse.c#20 edit .. //depot/projects/soc2005/fuse4bsd2/fuse_module/fuse.h#10 edit .. //depot/projects/soc2005/fuse4bsd2/mount_fusefs/mount_fusefs.8#3 edit .. //depot/projects/soc2005/fuse4bsd2/mount_fusefs/mount_fusefs.c#6 edit Differences ... ==== //depot/projects/soc2005/fuse4bsd2/fuse_module/fuse.c#20 (text+ko) ==== @@ -1801,6 +1801,7 @@ vfs_flagopt(opts, "neglect_shares", &fmnt->mntopts, FUSEFS_NEGLECT_SHARES); vfs_flagopt(opts, "allow_other", &fmnt->mntopts, FUSEFS_DAEMON_CAN_SPY); + vfs_flagopt(opts, "push_symlinks_in", &fmnt->mntopts, FUSEFS_PUSH_SYMLINKS_IN); if (fdata_kick_get(data)) err = ENOTCONN; @@ -3855,8 +3856,19 @@ if ((err = fdisp_simple_putget(&fdi, FUSE_READLINK, vp, curthread, ap->a_cred))) return (err); - - err = uiomove(fdi.answ, fdi.iosize, uio); + + DEBUG("answ %s, push 0x%x, mnton %s\n", + (char *)fdi.answ, + ((struct fuse_mnt_data *)vp->v_mount->mnt_data)->mntopts & FUSEFS_PUSH_SYMLINKS_IN, + vp->v_mount->mnt_stat.f_mntonname); + + if (((char *)fdi.answ)[0] == '/' && + ((struct fuse_mnt_data *)vp->v_mount->mnt_data)->mntopts & FUSEFS_PUSH_SYMLINKS_IN) + err = uiomove(vp->v_mount->mnt_stat.f_mntonname, + strlen(vp->v_mount->mnt_stat.f_mntonname), uio); + + if (! err) + err = uiomove(fdi.answ, fdi.iosize, uio); ticket_drop(fdi.tick); sx_sunlock(fdi.slock); ==== //depot/projects/soc2005/fuse4bsd2/fuse_module/fuse.h#10 (text+ko) ==== @@ -142,13 +142,14 @@ /* (taken from Linux Fuse) */ #define FUSE_MAX_PAGES_PER_REQ 32 -#define FUSEFS_UNPRIVPROCDBG 0x01 -#define FUSEFH_DIRECTIO 0x02 -#define FUSEFS_DAEMON_CAN_SPY 0x04 -#define FUSEFS_NEGLECT_SHARES 0x08 -#define FUSEFS_PRIVATE 0x10 -#define FUSEFS_SECONDARY 0x20 -#define FUSEFS_BUSY 0x40 +#define FUSEFS_UNPRIVPROCDBG 0x01 +#define FUSEFH_DIRECTIO 0x02 +#define FUSEFS_DAEMON_CAN_SPY 0x04 +#define FUSEFS_NEGLECT_SHARES 0x08 +#define FUSEFS_PRIVATE 0x10 +#define FUSEFS_SECONDARY 0x20 +#define FUSEFS_BUSY 0x40 +#define FUSEFS_PUSH_SYMLINKS_IN 0x80 struct fuse_mnt_data { struct cdev *fdev; ==== //depot/projects/soc2005/fuse4bsd2/mount_fusefs/mount_fusefs.8#3 (text+ko) ==== @@ -99,6 +99,8 @@ Refuse shared mounting of the daemon. .It Cm neglect_shares Don't refuse unmounting if there are secondary mounts. +.It Cm push_symlinks_in +Prefix absolute symlinks with mountpoint. .El .Pp .El ==== //depot/projects/soc2005/fuse4bsd2/mount_fusefs/mount_fusefs.c#6 (text+ko) ==== @@ -75,7 +75,8 @@ strcmp(optarg, "from") && strcmp(optarg, "allow_other") && strcmp(optarg, "neglect_shares") && - strcmp(optarg, "private") /* && + strcmp(optarg, "private") && + strcmp(optarg, "push_symlinks_in") /* && strcmp(optarg, "kernel_cache") && strcmp(optarg, "direct_io") */) usage(); @@ -191,7 +192,7 @@ " [fuse_daemon args...]" #endif "\n" - "known options: allow_other private neglect_shares\n" + "known options: allow_other private neglect_shares push_symlinks_in\n" "(multiple options require separate \"-o\"-s)\n", progname);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200510161318.j9GDIR6m062335>