patches/fuse-2.7.6-update.diff
author jurikm
Sun, 12 Feb 2012 14:04:10 +0000
changeset 8245 383896da4129
parent 7913 a550746113b6
permissions -rw-r--r--
SFEsauerbraten.spec: add IPS package name
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7912
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
     1
--- Makefile.com.old	2011-11-09 13:15:20.820359500 -0500
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
     2
+++ Makefile.com	2011-11-09 14:42:19.274443000 -0500
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
     3
@@ -65,6 +65,7 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
     4
         fuse_kernel.h \
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
     5
         fuse_lowlevel.h \
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
     6
         fuse_lowlevel_compat.h \
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
     7
+        ulockmgr.h \
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
     8
         fuse_opt.h
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
     9
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    10
 INCHDRS = $(HDRS:%=../include/%)
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    11
@@ -105,6 +106,6 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    12
 	$(INSTALL) -f $(ROOT)/usr/include/fuse ../include/fuse_lowlevel.h
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    13
 	$(INSTALL) -f $(ROOT)/usr/include/fuse ../include/fuse_lowlevel_compat.h
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    14
 	$(INSTALL) -f $(ROOT)/usr/include/fuse ../include/fuse_opt.h
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    15
-
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    16
+	$(INSTALL) -f $(ROOT)/usr/include/fuse ../include/ulockmgr.h
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    17
 clean:
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    18
 	rm -f $(OBJS) $(FUSERMOUNT_OBJS) $(FUSERMOUNT) $(FUSE_LIB) $(MOUNT_FUSE) $(MOUNT_FUSE_OBJS)
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    19
+++ fuse.c	2011-11-09 13:29:16.146778000 -0500
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    20
@@ -1306,8 +1306,11 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    21
 {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    22
     if (!err) {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    23
         struct fuse *f = req_fuse(req);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    24
-        if (fuse_reply_entry(req, e) == -ENOENT)
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    25
+               if (fuse_reply_entry(req, e) == -ENOENT) {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    26
+                       /* Skip forget for negative result */
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    27
+                       if  (e->ino != 0)
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    28
             forget_node(f, e->ino, 1);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    29
+               }
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    30
     } else
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    31
         reply_err(req, err);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    32
 }
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    33
@@ -2071,6 +2074,7 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    34
         }
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    35
     } else {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    36
         reply_err(req, err);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    37
+               pthread_mutex_destroy(&dh->lock);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    38
         free(dh);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    39
     }
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    40
     free(path);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    41
@@ -2884,7 +2888,7 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    42
 "    -o readdir_ino         try to fill in d_ino in readdir\n"
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    43
 "    -o direct_io           use direct I/O\n"
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    44
 "    -o kernel_cache        cache files in kernel\n"
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    45
-"    -o [no]auto_cache      enable caching based on modification times\n"
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    46
+"    -o [no]auto_cache      enable caching based on modification times (off)\n"
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    47
 "    -o umask=M             set file permissions (octal)\n"
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    48
 "    -o uid=N               set file owner\n"
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    49
 "    -o gid=N               set file group\n"
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    50
--- mount.c.old	2011-11-09 13:43:46.225855000 -0500
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    51
+++ mount.c	2011-11-09 13:48:00.549421000 -0500
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    52
@@ -333,10 +333,14 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    53
            then the filesystem is already unmounted */
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    54
         if (res == 1 && (pfd.revents & POLLERR))
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    55
             return;
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    56
+
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    57
+               /* Need to close file descriptor, otherwise synchronous umount
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    58
+                  would recurse into filesystem, and deadlock */
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    59
+               close(fd);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    60
     }
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    61
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    62
     if (geteuid() == 0) {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    63
-        fuse_mnt_umount("fuse", mountpoint, 1);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    64
+               fuse_mnt_umount("fuse", mountpoint,  1);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    65
         return;
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    66
     }
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    67
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    68
--- mount_bsd.c.old	2011-11-09 13:49:45.181396000 -0500
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    69
+++ mount_bsd.c	2011-11-09 13:56:51.955838500 -0500
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    70
@@ -215,7 +215,7 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    71
     dev = getenv("FUSE_DEV_NAME");
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    72
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    73
     if (! dev)
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    74
-	dev = FUSE_DEV_TRUNK;
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    75
+	dev = (char *)FUSE_DEV_TRUNK;
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    76
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    77
     if ((fd = open(dev, O_RDWR)) < 0) {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    78
         perror("fuse: failed to open fuse device");
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    79
@@ -227,6 +227,7 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    80
         goto out;
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    81
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    82
     pid = fork();
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    83
+       cpid = pid;
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    84
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    85
     if (pid == -1) {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    86
         perror("fuse: fork() failed");
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    87
@@ -235,6 +236,13 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    88
     }
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    89
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    90
     if (pid == 0) {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    91
+               if (! init_backgrounded()) {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    92
+                       /*
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    93
+                        * If init is not backgrounded, we have to
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    94
+                        * call the mount util backgrounded, to avoid
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    95
+                        * deadlock.
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    96
+                        */
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    97
+
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    98
         pid = fork();
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
    99
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   100
         if (pid == -1) {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   101
@@ -242,14 +250,17 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   102
             close(fd);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   103
             exit(1);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   104
         }
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   105
+               }
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   106
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   107
         if (pid == 0) {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   108
             const char *argv[32];
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   109
             int a = 0;
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   110
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   111
-            if (! fdnam)
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   112
-                asprintf(&fdnam, "%d", fd);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   113
-
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   114
+                       if (! fdnam && asprintf(&fdnam, "%d", fd) == -1) {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   115
+                               perror("fuse: failed to assemble mount arguments
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   116
+");
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   117
+                               exit(1);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   118
+                       }
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   119
             argv[a++] = mountprog;
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   120
             if (opts) {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   121
                 argv[a++] = "-o";
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   122
@@ -266,7 +277,11 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   123
         exit(0);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   124
     }
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   125
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   126
-    waitpid(pid, NULL, 0);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   127
+       if (waitpid(cpid, &status, 0) == -1 || WEXITSTATUS(status) != 0) {
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   128
+               perror("fuse: failed to mount file system");
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   129
+               close(fd);
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   130
+               return -1;
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   131
+       }
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   132
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   133
 out:
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   134
     return fd;
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   135
--- ../../libfuse/fuse.pc	2010-06-15 15:46:54.000000000 +0100
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   136
+++ fuse.pc	2011-11-09 17:54:57.131890866 +0000
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   137
@@ -5,6 +5,6 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   138
 
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   139
 Name: fuse
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   140
 Description: Filesystem in Userspace
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   141
-Version: 2.7.1
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   142
+Version: 2.7.6
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   143
 Libs: -L${libdir} -lfuse -lxnet
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   144
 Cflags: -I${includedir}/fuse -D_FILE_OFFSET_BITS=64
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   145
--- /dev/null	2011-11-09 16:44:05.000000000 +0000
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   146
+++ include/ulockmgr.h	2011-02-02 11:00:22.000000000 +0000
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   147
@@ -0,0 +1,24 @@
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   148
+/*
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   149
+  libulockmgr: Userspace Lock Manager Library
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   150
+  Copyright (C) 2006  Miklos Szeredi <[email protected]>
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   151
+
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   152
+  This program can be distributed under the terms of the GNU LGPLv2.
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   153
+  See the file COPYING.LIB.
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   154
+*/
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   155
+
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   156
+#include <stdint.h>
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   157
+#include <fcntl.h>
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   158
+#include <sys/types.h>
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   159
+
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   160
+/**
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   161
+ * Perform POSIX locking operation
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   162
+ *
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   163
+ * @param fd the file descriptor
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   164
+ * @param cmd the locking command (F_GETFL, F_SETLK or F_SETLKW)
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   165
+ * @param lock the lock parameters
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   166
+ * @param owner the lock owner ID cookie
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   167
+ * @param owner_len length of the lock owner ID cookie
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   168
+ * @return 0 on success -errno on error
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   169
+ */
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   170
+int ulockmgr_op(int fd, int cmd, struct flock *lock, const void *owner,
bb68997110a0 SFElibfuse.spec: Bumped to fuse 2.7.6
kenmays
parents:
diff changeset
   171
+		size_t owner_len);
7913
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   172
--- ../../libfuse/fuse_loop_mt.c	2010-06-15 15:46:54.000000000 +0100
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   173
+++ fuse_loop_mt.c	2011-09-13 08:23:14.000000000 +0100
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   174
@@ -2,7 +2,7 @@
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   175
     FUSE: Filesystem in Userspace
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   176
     Copyright (C) 2001-2007  Miklos Szeredi <[email protected]>
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   177
 
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   178
-    This program can be distributed under the terms of the GNU LGPL.
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   179
+  This program can be distributed under the terms of the GNU LGPLv2.
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   180
     See the file COPYING.LIB.
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   181
 */
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   182
 
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   183
@@ -19,6 +19,9 @@
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   184
 #include <errno.h>
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   185
 #include <sys/time.h>
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   186
 
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   187
+/* Environment var controlling the thread stack size */
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   188
+#define ENVNAME_THREAD_STACK "FUSE_THREAD_STACK"
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   189
+
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   190
 struct fuse_worker {
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   191
     struct fuse_worker *prev;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   192
     struct fuse_worker *next;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   193
@@ -67,7 +70,11 @@
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   194
     while (!fuse_session_exited(mt->se)) {
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   195
         int isforget = 0;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   196
         struct fuse_chan *ch = mt->prevch;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   197
-        int res = fuse_chan_recv(&ch, w->buf, w->bufsize);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   198
+		int res;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   199
+
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   200
+		pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   201
+		res = fuse_chan_recv(&ch, w->buf, w->bufsize);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   202
+		pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   203
         if (res == -EINTR)
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   204
             continue;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   205
         if (res <= 0) {
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   206
@@ -121,6 +128,7 @@
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   207
     }
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   208
 
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   209
     sem_post(&mt->finish);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   210
+	pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   211
     pause();
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   212
 
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   213
     return NULL;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   214
@@ -131,6 +139,8 @@
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   215
     sigset_t oldset;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   216
     sigset_t newset;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   217
     int res;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   218
+	pthread_attr_t attr;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   219
+	char *stack_size;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   220
     struct fuse_worker *w = malloc(sizeof(struct fuse_worker));
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   221
     if (!w) {
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   222
         fprintf(stderr, "fuse: failed to allocate worker structure\n");
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   223
@@ -146,6 +156,12 @@
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   224
         return -1;
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   225
     }
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   226
 
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   227
+	/* Override default stack size */
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   228
+	pthread_attr_init(&attr);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   229
+	stack_size = getenv(ENVNAME_THREAD_STACK);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   230
+	if (stack_size && pthread_attr_setstacksize(&attr, atoi(stack_size)))
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   231
+		fprintf(stderr, "fuse: invalid stack size: %s\n", stack_size);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   232
+
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   233
     /* Disallow signal reception in worker threads */
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   234
     sigemptyset(&newset);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   235
     sigaddset(&newset, SIGTERM);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   236
@@ -153,10 +169,12 @@
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   237
     sigaddset(&newset, SIGHUP);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   238
     sigaddset(&newset, SIGQUIT);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   239
     pthread_sigmask(SIG_BLOCK, &newset, &oldset);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   240
-    res = pthread_create(&w->thread_id, NULL, fuse_do_work, w);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   241
+	res = pthread_create(&w->thread_id, &attr, fuse_do_work, w);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   242
     pthread_sigmask(SIG_SETMASK, &oldset, NULL);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   243
+	pthread_attr_destroy(&attr);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   244
     if (res != 0) {
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   245
-        fprintf(stderr, "fuse: error creating thread: %s\n", strerror(res));
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   246
+		fprintf(stderr, "fuse: error creating thread: %s\n",
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   247
+			strerror(res));
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   248
         free(w->buf);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   249
         free(w);
a550746113b6 SFElibfuse.spec: Loop Threading patch
kenmays
parents: 7912
diff changeset
   250
         return -1;