[-]
[+]
|
Changed |
glusterfs.spec
|
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/ChangeLog
^
|
@@ -1,9 +1,460 @@
diff --git a/ChangeLog b/ChangeLog
-index 3b1c493..d3212d4 100644
+index 3b1c493..1ce32d5 100644
--- a/ChangeLog
+++ b/ChangeLog
-@@ -1 +1,116534 @@
+@@ -1 +1,116985 @@
-ChangeLog is maintained by "git log".
++commit 69b5471d138f3a947b9086ec8fec8fdf6eb44ff6
++Author: vmallika <vmallika@redhat.com>
++Date: Tue Sep 15 16:15:17 2015 +0530
++
++ marker: validate loc before starting txn
++
++ Change-Id: Icdda430ae5dbe182ddff119aa4617548c39832e4
++ BUG: 1259578
++ Signed-off-by: vmallika <vmallika@redhat.com>
++ Reviewed-on: http://review.gluster.org/12180
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit 6cbb306c24400b0a6df5cb71f540f1f0190fcc25
++Author: vmallika <vmallika@redhat.com>
++Date: Wed Jul 29 16:42:20 2015 +0530
++
++ quota/marker: set lk_owner when taking lock on parent in rename
++
++ This is a backport of http://review.gluster.org/#/c/11561/
++
++ Before doing a rename operation marker takes inode lock on the file
++ parent,
++ here lk_owner is NULL and this can cause accounting problem with
++ multiple rename on the same directory
++
++ This patch fix the problem by setting lk_owner
++
++ > Change-Id: Ibb789e39b2833e425d0a5fca85282ff1465206cb
++ > BUG: 1240598
++ > Signed-off-by: vmallika <vmallika@redhat.com>
++ > Reviewed-on: http://review.gluster.org/11561
++ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ > Tested-by: NetBSD Build System <jenkins@build.gluster.org>
++ > Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
++
++ Change-Id: I54db6c27791862e84eaa958fc9fdc363a22eb2e8
++ BUG: 1247972
++ Signed-off-by: vmallika <vmallika@redhat.com>
++ Reviewed-on: http://review.gluster.org/11795
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit 3044ea596c51b183d3449fcca70c3c903d6b502f
++Author: Niels de Vos <ndevos@redhat.com>
++Date: Mon Aug 10 18:18:35 2015 +0200
++
++ fuse: add "resolve-gids" mount option to overcome 32-groups limit
++
++ Add a --resolve-gids commandline option to the glusterfs binary. This
++ option gets set when executing "mount -t glusterfs -o resolve-gids ...".
++
++ This option is most useful in combination with the "acl" mount option.
++ POSIX ACL permission checking is done on the FUSE-client side to improve
++ performance (in addition to the checking on the bricks).
++
++ The fuse-bridge reads /proc/$PID/status by default, and this file
++ contains maximum 32 groups. Any local (client-side) permission checking
++ that requires more than the first 32 groups will fail.
++
++ By enabling the "resolve-gids" option, the fuse-bridge will call
++ getgrouplist() to retrieve all the groups from the user accessing the
++ mountpoint. This is comparable to how "nfs.server-aux-gids" works.
++
++ Note that when a user belongs to more than ~93 groups, the volume option
++ server.manage-gids needs to be enabled too. Without this option, the
++ RPC-layer will need to reduce the number of groups to make them fit in
++ the RPC-header.
++
++ Cherry picked from commit 64a5bf3749c67fcc00773a2716d0c7b61b0b4417:
++ > Change-Id: I7ede90d0e41bcf55755cced5747fa0fb1699edb2
++ > BUG: 1246275
++ > Signed-off-by: Niels de Vos <ndevos@redhat.com>
++ > Reviewed-on: http://review.gluster.org/11732
++ > Tested-by: NetBSD Build System <jenkins@build.gluster.org>
++ > Reviewed-by: Ravishankar N <ravishankar@redhat.com>
++ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ > Reviewed-by: jiffin tony Thottan <jthottan@redhat.com>
++ > Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
++
++ Change-Id: I7ede90d0e41bcf55755cced5747fa0fb1699edb2
++ BUG: 1252072
++ Tested-by: Patrick Glomski <patrick.glomski@corvidtec.com>
++ Signed-off-by: Niels de Vos <ndevos@redhat.com>
++ Reviewed-on: http://review.gluster.org/11876
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Anoop C S <anoopcs@redhat.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit e6388d647c221e8041bc1d426fae2eaeef864aec
++Author: Ravishankar N <ravishankar@redhat.com>
++Date: Mon Aug 24 07:16:44 2015 +0000
++
++ afr: launch index heal on local subvols up on a child-up event
++
++ Backport of http://review.gluster.org/#/c/11912/
++
++ Problem: When a replica's child goes down and comes up, the index heal is
++ triggered only on the child that just came up. This does not serve the intended
++ purpose as the list of files that need to be healed to this child is actually
++ captured on the other child of the replica.
++
++ Fix: Launch index-heal on all local
++ children of the replica xlator which just received a child up. Note that
++ afr_selfheal_childup() eventually calls afr_shd_index_healer() which will not
++ run the heal on non-local children.
++
++ Change-Id: I524fda17c28864758b35679cfb232f81f8374571
++ BUG: 1256245
++ Signed-off-by: Ravishankar N <ravishankar@redhat.com>
++ Reviewed-on: http://review.gluster.org/11994
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++ Tested-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit 68a07320202efe24bb59937850e4bf24c6aad34c
++Author: Richard Wareing <rwareing@fb.com>
++Date: Thu Aug 27 21:06:37 2015 -0700
++
++ nfs: Fixes "Remote I/O error" mount failures
++
++ - Fixes issue where NFS mount fail with "Remove I/O error" after the
++ target directory has been deleted and re-created after the gNFSd has
++ already cached the inode of the first generation of the target
++ directory.
++ - The solution is to follow the guidance of the AFR2 comments and
++ refresh the inode by deleting it from cache and looking it up
++ again.
++
++ BUG: 1258069
++ Change-Id: I9c7d8bd460ee9e5ea0b5b47d23886b1afcdcd563
++ Reported-by: Richard Wareing <rwareing@fb.com>
++ Signed-off-by: Niels de Vos <ndevos@redhat.com>
++ Reviewed-on: http://review.gluster.org/12045
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit b8118289a928c72cf5a2298419c188fb87426c2f
++Author: Avra Sengupta <asengupt@redhat.com>
++Date: Wed Aug 5 15:56:53 2015 +0530
++
++ snapshot: Fix snapshot info's xml output
++
++ Backport of http://review.gluster.org/#/c/11834/
++
++ Display description field with (null) if
++ no description is present for the snapshot, instead
++ of removing the field altogether
++
++ Change-Id: I965b08cd6e54eea56c32e2712fab7daa8a663f11
++ BUG: 1173437
++ Signed-off-by: Avra Sengupta <asengupt@redhat.com>
++ Reviewed-on: http://review.gluster.org/11919
++ Reviewed-by: mohammed rafi kc <rkavunga@redhat.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++ Tested-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit dfa2bfb289cc73ade0e441f2e2ee88d0d819d48d
++Author: vmallika <vmallika@redhat.com>
++Date: Wed Jul 29 16:19:12 2015 +0530
++
++ features/quota: prevent statfs frame-loss when an error happens during
++ ancestry building.
++
++ This is a backport of http://review.gluster.org/#/c/9380/
++
++ We do quota_build_ancestry in function 'quota_get_limit_dir',
++ suppose if quota_build_ancestry fails, then we don't have a
++ frame saved to continue the statfs FOP and client can hang.
++
++ > Change-Id: I92e25c1510d09444b9d4810afdb6b2a69dcd92c0
++ > BUG: 1178619
++ > Signed-off-by: Raghavendra G <rgowdapp@redhat.com>
++ > Signed-off-by: vmallika <vmallika@redhat.com>
++ > Reviewed-on: http://review.gluster.org/9380
++ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
++
++ Change-Id: Ia25cf738250fdc2c766f96c26e3c31093d534aba
++ BUG: 1247959
++ Signed-off-by: vmallika <vmallika@redhat.com>
++ Reviewed-on: http://review.gluster.org/11790
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++ Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
++
++commit 620403b48a021593883f39dec3a1d6bc16c53517
++Author: vmallika <vmallika@redhat.com>
++Date: Wed Jul 29 16:37:13 2015 +0530
++
++ posix: fix mem-leak in posix xattrop
++
++ This is a backport of http://review.gluster.org/#/c/11700/
++
++ > Change-Id: I1dd70f74a98c5875eb316f3c3e560047f128685b
++ > BUG: 1243890
++ > Signed-off-by: vmallika <vmallika@redhat.com>
++ > Reviewed-on: http://review.gluster.org/11700
++ > Tested-by: NetBSD Build System <jenkins@build.gluster.org>
++ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ > Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
++
++ Change-Id: Ia192342f01330f8b2c7a520a7cc749471af7d85f
++ BUG: 1247970
++ Signed-off-by: vmallika <vmallika@redhat.com>
++ Reviewed-on: http://review.gluster.org/11794
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit 21643f8427be22ab7e512acf6c6368eb8af1ec9d
++Author: Niels de Vos <ndevos@redhat.com>
++Date: Sun Jun 21 12:00:52 2015 +0200
++
++ nfs: make it possible to disable nfs.mount-rmtab
++
++ When there are many NFS-clients doing very often mount/unmount actions,
++ the updating of the 'rmtab' can become a bottleneck and cause delays. In
++ these situations, the output of 'showmount' may be less important than
++ the responsiveness of the (un)mounting.
++
++ By setting 'nfs.mount-rmtab' to the value "/-", the cache file is not
++ updated anymore, and the entries are only kept in memory.
++
++ Cherry picked from commit 40407afb529f6e5fa2f79e9778c2f527122d75eb:
++ > Cherry picked from commit 331ef6e1a86bfc0a93f8a9dec6ad35c417873849:
++ >> BUG: 1169317
++ >> Change-Id: I40c4d8d754932f86fb2b1b2588843390464c773d
++ >> Reported-by: Cyril Peponnet <cyril@peponnet.fr>
++ >> Signed-off-by: Niels de Vos <ndevos@redhat.com>
++ >> Reviewed-on: http://review.gluster.org/9223
++ >> Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ >> Reviewed-by: soumya k <skoduri@redhat.com>
++ >> Reviewed-by: jiffin tony Thottan <jthottan@redhat.com>
++ >> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
++ >
++ > This change also contains the fixes to the test-case from:
++ >>
++ >> nfs: fix spurious failure in bug-1166862.t
++ >>
++ >> In some environments, "showmount" could return an NFS-client that does
++ >> not start with "1". This would cause the test-case to fail. The check is
++ >> incorrect, the number of lines should get counted instead.
++ >>
++ >> Also moving the test-case to the .../nfs/... subdirectory.
++ >>
++ >> Cherry picked from commit ee9b35a780607daddc2832b9af5ed6bf414aebc0:
++ >> BUG: 1166862
++ >> Change-Id: Ic03aa8145ca57d78aea01564466e924b03bb302a
++ >> Signed-off-by: Niels de Vos <ndevos@redhat.com>
++ >> Reviewed-on: http://review.gluster.org/10419
++ >> Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ >> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
++ >>
++ >
++ > Change-Id: I40c4d8d754932f86fb2b1b2588843390464c773d
++ > BUG: 1215385
++ > Signed-off-by: Niels de Vos <ndevos@redhat.com>
++ > Reviewed-on: http://review.gluster.org/10379
++ > Tested-by: NetBSD Build System
++ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ > Reviewed-by: Vijay Bellur <vbellur@redhat.com>
++
++ Change-Id: I40c4d8d754932f86fb2b1b2588843390464c773d
++ BUG: 1234096
++ Signed-off-by: Niels de Vos <ndevos@redhat.com>
++ Reviewed-on: http://review.gluster.org/11335
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit aefd42fdb74a9b276d07a51a84194805169e632e
++Author: Niels de Vos <ndevos@redhat.com>
++Date: Fri Aug 15 11:13:46 2014 +0200
++
++ glusterd: really get the inode size for a brick
++
++ backport of http://review.gluster.org/#/c/8492/
++
++ The device to get the inode size from does not get passed to the tool
++ (tune2fs, xfs_info or the like) that is called. This is probably just an
++ oversight. While correcting this, cleanup some bits of the function too.
++
++ Change-Id: Ida45852cba061631fb304bc7dd5286df1a808010
++ BUG: 1254421
++ Signed-off-by: Niels de Vos <ndevos@redhat.com>
++ Reviewed-on: http://review.gluster.org/8492
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
++ Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
++ Tested-by: Krishnan Parthasarathi <kparthas@redhat.com>
++ Reviewed-on: http://review.gluster.org/11941
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit df3f1d9926bf3e7a481391182aa967f0154634a3
++Author: vmallika <vmallika@redhat.com>
++Date: Wed Jul 29 16:26:12 2015 +0530
++
++ quota: fix mem leak in quota enforcer
++
++ This is a backport of http://review.gluster.org/#/c/11526/
++
++ Do inode_unref on parent
++
++ > Change-Id: I21d82eb8716dd73aa2dc291b3ae8506e4fb4ea8b
++ > BUG: 1207735
++ > Signed-off-by: vmallika <vmallika@redhat.com>
++ > Reviewed-on: http://review.gluster.org/11526
++ > Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
++ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ > Tested-by: NetBSD Build System <jenkins@build.gluster.org>
++ > Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
++ > Tested-by: Raghavendra G <rgowdapp@redhat.com>
++
++ Change-Id: I8f103ea96e6853d48c934b791ff4d95b226e4453
++ BUG: 1247964
++ Signed-off-by: vmallika <vmallika@redhat.com>
++ Reviewed-on: http://review.gluster.org/11793
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit a17257727ce00b25ea88800c0dd54deec4d999ba
++Author: Avra Sengupta <asengupt@redhat.com>
++Date: Wed Aug 5 16:36:06 2015 +0530
++
++ xml output: Fix non-uniform opErrstr xml output
++
++ Backport of http://review.gluster.org/#/c/11835/
++
++ Display <opErrstr/> in case of no operrstr for
++ all xml output of gluster commands
++
++ Change-Id: Ie16f749f90b4642357c562012408c434cd38661f
++ BUG: 1218732
++ Signed-off-by: Avra Sengupta <asengupt@redhat.com>
++ Reviewed-on: http://review.gluster.org/11921
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++ Reviewed-by: mohammed rafi kc <rkavunga@redhat.com>
++
++commit fb601c73d366376711f5f164924a7655982e887f
++Author: Atin Mukherjee <amukherj@redhat.com>
++Date: Thu Aug 6 12:18:10 2015 +0530
++
++ glusterd: fix op-version bump up flow
++
++ Backport of http://review.gluster.org/#/c/11798/
++
++ If a cluster is upgraded from 3.5 to latest version, gluster volume set all
++ cluster.op-version <VERSION> will throw an error message back to the user saying
++ unlocking failed. This is because of trying to release a volume wise lock in
++ unlock phase as the lock was taken cluster wide. The problem surfaced because
++ the op-version is updated in commit phase and unlocking works in the v3
++ framework where it should have used cluster unlock. Fix is to decide which
++ lock/unlock is to be followed before invoking lock phase
++
++ Change-Id: I6a82251d88cfc7af36c7deec511c634a09e55004
++ BUG: 1250836
++ Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
++ Reviewed-on: http://review.gluster.org/11849
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
++ Tested-by: NetBSD Build System <jenkins@build.gluster.org>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit a28d161733e670d264999c6f486915bf738a7bfd
++Author: Niels de Vos <ndevos@redhat.com>
++Date: Fri Jul 17 10:16:54 2015 +0200
++
++ nfs: a unix-domain-socket should not be created as fifo
++
++ Cherry picked from commit 381afd4f480533f212e1f62a0ccfd9dcf7248e17:
++ > Change-Id: Ic6a23165df1703b330636a059967c3c674dbde57
++ > BUG: 1235231
++ > Signed-off-by: Niels de Vos <ndevos@redhat.com>
++ > Reviewed-on: http://review.gluster.org/11355
++ > Tested-by: NetBSD Build System <jenkins@build.gluster.org>
++ > Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
++ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
++
++ Change-Id: Ic6a23165df1703b330636a059967c3c674dbde57
++ BUG: 1244117
++ Signed-off-by: Niels de Vos <ndevos@redhat.com>
++ Reviewed-on: http://review.gluster.org/11709
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit 6263e73688ba2be49fd55f4c6a2d12609ce45f91
++Author: Kaushal M <kaushal@redhat.com>
++Date: Mon Jul 13 16:16:00 2015 +0530
++
++ rpc-transport: socket_poller fixes for proper working of mgmt encryption
++
++ Backport of 8c39f14 from master
++
++ socket_poller, the polling function used by ssl own_thread, had two
++ issues which lead to GlusterD crashes when using management encryption
++
++ Issue 1
++ -------
++ socket_poller calls functions which require THIS to be set. But, THIS
++ was being set conditionally. Because of this, functions could sometimes
++ be called without THIS being set. For example, rpc_transport_notify
++ could be called for an accepted client socket without THIS being set, as
++ THIS was only set it the transport wasn't yet connected. This would
++ cause the process to crash when THIS was accessed by the called
++ functions.
++
++ To fix this, THIS is being set at the start of socket_poller
++ unconditionally.
++
++ Issue 2
++ -------
++ DISCONNECT notify was being sent on the listener transport instead of
++ the client transport. The DISCONNECT event was converted to a
++ LISTENER_DEAD event in rpcsvc_handle_disconnect, as it could not find
++ the listener socket of the listener socket. GlusterD was notified of a
++ LISTENER_DEAD event instead of a DISCONNECT and failed to remove the
++ client transport from its xprt_list. The transport would subsequently
++ be freed, leaving the xprt_list with a corrupted/invalid entry. Later,
++ when GlusterD would iterate over the xprt_list to send notifications, it
++ would crash when the invalid entry was accessed.
++
++ To fix this, DISCONNECT notification in socket_poller is sent on the
++ client socket, as it is done in the epoll handler.
++
++ Change-Id: I0370b7c6d7eb13de10ebf08d91a4a39dc7d64c7a
++ BUG: 1243700
++ Signed-off-by: Kaushal M <kaushal@redhat.com>
++ Reviewed-on: http://review.gluster.org/11690
++ Tested-by: Gluster Build System <jenkins@build.gluster.com>
++ Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++
++commit f9b3ba22f105772e268765d80adfeffd8f6f2776
++Author: Krutika Dhananjay <kdhananj@redhat.com>
++Date: Wed Jun 24 08:02:51 2015 +0530
++
++ cluster/afr: Pick gfid from poststat during fresh lookup for read child calculation
++
++ Backport of : http://review.gluster.org/11373
++
++ Change-Id: I03f11af082a0decf4ea084480b67e9e156964c76
++ BUG: 1235601
++ Signed-off-by: Krutika Dhananjay <kdhananj@redhat.com>
++ Reviewed-on: http://review.gluster.org/11408
++ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
++ Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
++ Tested-by: Raghavendra Bhat <raghavendra@redhat.com>
++
+commit 50b0c7baad43dcd378a5740f154b38ec0ffe0f00
+Author: Kaushal M <kaushal@redhat.com>
+Date: Tue Jul 7 12:52:30 2015 +0530
@@ -116539,6 +116990,457 @@
+
+ Initial import
===== git log ====
+commit 69b5471d138f3a947b9086ec8fec8fdf6eb44ff6
+Author: vmallika <vmallika@redhat.com>
+Date: Tue Sep 15 16:15:17 2015 +0530
+
+ marker: validate loc before starting txn
+
+ Change-Id: Icdda430ae5dbe182ddff119aa4617548c39832e4
+ BUG: 1259578
+ Signed-off-by: vmallika <vmallika@redhat.com>
+ Reviewed-on: http://review.gluster.org/12180
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit 6cbb306c24400b0a6df5cb71f540f1f0190fcc25
+Author: vmallika <vmallika@redhat.com>
+Date: Wed Jul 29 16:42:20 2015 +0530
+
+ quota/marker: set lk_owner when taking lock on parent in rename
+
+ This is a backport of http://review.gluster.org/#/c/11561/
+
+ Before doing a rename operation marker takes inode lock on the file
+ parent,
+ here lk_owner is NULL and this can cause accounting problem with
+ multiple rename on the same directory
+
+ This patch fix the problem by setting lk_owner
+
+ > Change-Id: Ibb789e39b2833e425d0a5fca85282ff1465206cb
+ > BUG: 1240598
+ > Signed-off-by: vmallika <vmallika@redhat.com>
+ > Reviewed-on: http://review.gluster.org/11561
+ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ > Tested-by: NetBSD Build System <jenkins@build.gluster.org>
+ > Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
+
+ Change-Id: I54db6c27791862e84eaa958fc9fdc363a22eb2e8
+ BUG: 1247972
+ Signed-off-by: vmallika <vmallika@redhat.com>
+ Reviewed-on: http://review.gluster.org/11795
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit 3044ea596c51b183d3449fcca70c3c903d6b502f
+Author: Niels de Vos <ndevos@redhat.com>
+Date: Mon Aug 10 18:18:35 2015 +0200
+
+ fuse: add "resolve-gids" mount option to overcome 32-groups limit
+
+ Add a --resolve-gids commandline option to the glusterfs binary. This
+ option gets set when executing "mount -t glusterfs -o resolve-gids ...".
+
+ This option is most useful in combination with the "acl" mount option.
+ POSIX ACL permission checking is done on the FUSE-client side to improve
+ performance (in addition to the checking on the bricks).
+
+ The fuse-bridge reads /proc/$PID/status by default, and this file
+ contains maximum 32 groups. Any local (client-side) permission checking
+ that requires more than the first 32 groups will fail.
+
+ By enabling the "resolve-gids" option, the fuse-bridge will call
+ getgrouplist() to retrieve all the groups from the user accessing the
+ mountpoint. This is comparable to how "nfs.server-aux-gids" works.
+
+ Note that when a user belongs to more than ~93 groups, the volume option
+ server.manage-gids needs to be enabled too. Without this option, the
+ RPC-layer will need to reduce the number of groups to make them fit in
+ the RPC-header.
+
+ Cherry picked from commit 64a5bf3749c67fcc00773a2716d0c7b61b0b4417:
+ > Change-Id: I7ede90d0e41bcf55755cced5747fa0fb1699edb2
+ > BUG: 1246275
+ > Signed-off-by: Niels de Vos <ndevos@redhat.com>
+ > Reviewed-on: http://review.gluster.org/11732
+ > Tested-by: NetBSD Build System <jenkins@build.gluster.org>
+ > Reviewed-by: Ravishankar N <ravishankar@redhat.com>
+ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ > Reviewed-by: jiffin tony Thottan <jthottan@redhat.com>
+ > Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
+
+ Change-Id: I7ede90d0e41bcf55755cced5747fa0fb1699edb2
+ BUG: 1252072
+ Tested-by: Patrick Glomski <patrick.glomski@corvidtec.com>
+ Signed-off-by: Niels de Vos <ndevos@redhat.com>
+ Reviewed-on: http://review.gluster.org/11876
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Anoop C S <anoopcs@redhat.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit e6388d647c221e8041bc1d426fae2eaeef864aec
+Author: Ravishankar N <ravishankar@redhat.com>
+Date: Mon Aug 24 07:16:44 2015 +0000
+
+ afr: launch index heal on local subvols up on a child-up event
+
+ Backport of http://review.gluster.org/#/c/11912/
+
+ Problem: When a replica's child goes down and comes up, the index heal is
+ triggered only on the child that just came up. This does not serve the intended
+ purpose as the list of files that need to be healed to this child is actually
+ captured on the other child of the replica.
+
+ Fix: Launch index-heal on all local
+ children of the replica xlator which just received a child up. Note that
+ afr_selfheal_childup() eventually calls afr_shd_index_healer() which will not
+ run the heal on non-local children.
+
+ Change-Id: I524fda17c28864758b35679cfb232f81f8374571
+ BUG: 1256245
+ Signed-off-by: Ravishankar N <ravishankar@redhat.com>
+ Reviewed-on: http://review.gluster.org/11994
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+ Tested-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit 68a07320202efe24bb59937850e4bf24c6aad34c
+Author: Richard Wareing <rwareing@fb.com>
+Date: Thu Aug 27 21:06:37 2015 -0700
+
+ nfs: Fixes "Remote I/O error" mount failures
+
+ - Fixes issue where NFS mount fail with "Remove I/O error" after the
+ target directory has been deleted and re-created after the gNFSd has
+ already cached the inode of the first generation of the target
+ directory.
+ - The solution is to follow the guidance of the AFR2 comments and
+ refresh the inode by deleting it from cache and looking it up
+ again.
+
+ BUG: 1258069
+ Change-Id: I9c7d8bd460ee9e5ea0b5b47d23886b1afcdcd563
+ Reported-by: Richard Wareing <rwareing@fb.com>
+ Signed-off-by: Niels de Vos <ndevos@redhat.com>
+ Reviewed-on: http://review.gluster.org/12045
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit b8118289a928c72cf5a2298419c188fb87426c2f
+Author: Avra Sengupta <asengupt@redhat.com>
+Date: Wed Aug 5 15:56:53 2015 +0530
+
+ snapshot: Fix snapshot info's xml output
+
+ Backport of http://review.gluster.org/#/c/11834/
+
+ Display description field with (null) if
+ no description is present for the snapshot, instead
+ of removing the field altogether
+
+ Change-Id: I965b08cd6e54eea56c32e2712fab7daa8a663f11
+ BUG: 1173437
+ Signed-off-by: Avra Sengupta <asengupt@redhat.com>
+ Reviewed-on: http://review.gluster.org/11919
+ Reviewed-by: mohammed rafi kc <rkavunga@redhat.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+ Tested-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit dfa2bfb289cc73ade0e441f2e2ee88d0d819d48d
+Author: vmallika <vmallika@redhat.com>
+Date: Wed Jul 29 16:19:12 2015 +0530
+
+ features/quota: prevent statfs frame-loss when an error happens during
+ ancestry building.
+
+ This is a backport of http://review.gluster.org/#/c/9380/
+
+ We do quota_build_ancestry in function 'quota_get_limit_dir',
+ suppose if quota_build_ancestry fails, then we don't have a
+ frame saved to continue the statfs FOP and client can hang.
+
+ > Change-Id: I92e25c1510d09444b9d4810afdb6b2a69dcd92c0
+ > BUG: 1178619
+ > Signed-off-by: Raghavendra G <rgowdapp@redhat.com>
+ > Signed-off-by: vmallika <vmallika@redhat.com>
+ > Reviewed-on: http://review.gluster.org/9380
+ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
+
+ Change-Id: Ia25cf738250fdc2c766f96c26e3c31093d534aba
+ BUG: 1247959
+ Signed-off-by: vmallika <vmallika@redhat.com>
+ Reviewed-on: http://review.gluster.org/11790
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+ Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
+
+commit 620403b48a021593883f39dec3a1d6bc16c53517
+Author: vmallika <vmallika@redhat.com>
+Date: Wed Jul 29 16:37:13 2015 +0530
+
+ posix: fix mem-leak in posix xattrop
+
+ This is a backport of http://review.gluster.org/#/c/11700/
+
+ > Change-Id: I1dd70f74a98c5875eb316f3c3e560047f128685b
+ > BUG: 1243890
+ > Signed-off-by: vmallika <vmallika@redhat.com>
+ > Reviewed-on: http://review.gluster.org/11700
+ > Tested-by: NetBSD Build System <jenkins@build.gluster.org>
+ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ > Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
+
+ Change-Id: Ia192342f01330f8b2c7a520a7cc749471af7d85f
+ BUG: 1247970
+ Signed-off-by: vmallika <vmallika@redhat.com>
+ Reviewed-on: http://review.gluster.org/11794
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit 21643f8427be22ab7e512acf6c6368eb8af1ec9d
+Author: Niels de Vos <ndevos@redhat.com>
+Date: Sun Jun 21 12:00:52 2015 +0200
+
+ nfs: make it possible to disable nfs.mount-rmtab
+
+ When there are many NFS-clients doing very often mount/unmount actions,
+ the updating of the 'rmtab' can become a bottleneck and cause delays. In
+ these situations, the output of 'showmount' may be less important than
+ the responsiveness of the (un)mounting.
+
+ By setting 'nfs.mount-rmtab' to the value "/-", the cache file is not
+ updated anymore, and the entries are only kept in memory.
+
+ Cherry picked from commit 40407afb529f6e5fa2f79e9778c2f527122d75eb:
+ > Cherry picked from commit 331ef6e1a86bfc0a93f8a9dec6ad35c417873849:
+ >> BUG: 1169317
+ >> Change-Id: I40c4d8d754932f86fb2b1b2588843390464c773d
+ >> Reported-by: Cyril Peponnet <cyril@peponnet.fr>
+ >> Signed-off-by: Niels de Vos <ndevos@redhat.com>
+ >> Reviewed-on: http://review.gluster.org/9223
+ >> Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ >> Reviewed-by: soumya k <skoduri@redhat.com>
+ >> Reviewed-by: jiffin tony Thottan <jthottan@redhat.com>
+ >> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
+ >
+ > This change also contains the fixes to the test-case from:
+ >>
+ >> nfs: fix spurious failure in bug-1166862.t
+ >>
+ >> In some environments, "showmount" could return an NFS-client that does
+ >> not start with "1". This would cause the test-case to fail. The check is
+ >> incorrect, the number of lines should get counted instead.
+ >>
+ >> Also moving the test-case to the .../nfs/... subdirectory.
+ >>
+ >> Cherry picked from commit ee9b35a780607daddc2832b9af5ed6bf414aebc0:
+ >> BUG: 1166862
+ >> Change-Id: Ic03aa8145ca57d78aea01564466e924b03bb302a
+ >> Signed-off-by: Niels de Vos <ndevos@redhat.com>
+ >> Reviewed-on: http://review.gluster.org/10419
+ >> Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ >> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
+ >>
+ >
+ > Change-Id: I40c4d8d754932f86fb2b1b2588843390464c773d
+ > BUG: 1215385
+ > Signed-off-by: Niels de Vos <ndevos@redhat.com>
+ > Reviewed-on: http://review.gluster.org/10379
+ > Tested-by: NetBSD Build System
+ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ > Reviewed-by: Vijay Bellur <vbellur@redhat.com>
+
+ Change-Id: I40c4d8d754932f86fb2b1b2588843390464c773d
+ BUG: 1234096
+ Signed-off-by: Niels de Vos <ndevos@redhat.com>
+ Reviewed-on: http://review.gluster.org/11335
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit aefd42fdb74a9b276d07a51a84194805169e632e
+Author: Niels de Vos <ndevos@redhat.com>
+Date: Fri Aug 15 11:13:46 2014 +0200
+
+ glusterd: really get the inode size for a brick
+
+ backport of http://review.gluster.org/#/c/8492/
+
+ The device to get the inode size from does not get passed to the tool
+ (tune2fs, xfs_info or the like) that is called. This is probably just an
+ oversight. While correcting this, cleanup some bits of the function too.
+
+ Change-Id: Ida45852cba061631fb304bc7dd5286df1a808010
+ BUG: 1254421
+ Signed-off-by: Niels de Vos <ndevos@redhat.com>
+ Reviewed-on: http://review.gluster.org/8492
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
+ Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
+ Tested-by: Krishnan Parthasarathi <kparthas@redhat.com>
+ Reviewed-on: http://review.gluster.org/11941
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit df3f1d9926bf3e7a481391182aa967f0154634a3
+Author: vmallika <vmallika@redhat.com>
+Date: Wed Jul 29 16:26:12 2015 +0530
+
+ quota: fix mem leak in quota enforcer
+
+ This is a backport of http://review.gluster.org/#/c/11526/
+
+ Do inode_unref on parent
+
+ > Change-Id: I21d82eb8716dd73aa2dc291b3ae8506e4fb4ea8b
+ > BUG: 1207735
+ > Signed-off-by: vmallika <vmallika@redhat.com>
+ > Reviewed-on: http://review.gluster.org/11526
+ > Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
+ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ > Tested-by: NetBSD Build System <jenkins@build.gluster.org>
+ > Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
+ > Tested-by: Raghavendra G <rgowdapp@redhat.com>
+
+ Change-Id: I8f103ea96e6853d48c934b791ff4d95b226e4453
+ BUG: 1247964
+ Signed-off-by: vmallika <vmallika@redhat.com>
+ Reviewed-on: http://review.gluster.org/11793
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit a17257727ce00b25ea88800c0dd54deec4d999ba
+Author: Avra Sengupta <asengupt@redhat.com>
+Date: Wed Aug 5 16:36:06 2015 +0530
+
+ xml output: Fix non-uniform opErrstr xml output
+
+ Backport of http://review.gluster.org/#/c/11835/
+
+ Display <opErrstr/> in case of no operrstr for
+ all xml output of gluster commands
+
+ Change-Id: Ie16f749f90b4642357c562012408c434cd38661f
+ BUG: 1218732
+ Signed-off-by: Avra Sengupta <asengupt@redhat.com>
+ Reviewed-on: http://review.gluster.org/11921
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+ Reviewed-by: mohammed rafi kc <rkavunga@redhat.com>
+
+commit fb601c73d366376711f5f164924a7655982e887f
+Author: Atin Mukherjee <amukherj@redhat.com>
+Date: Thu Aug 6 12:18:10 2015 +0530
+
+ glusterd: fix op-version bump up flow
+
+ Backport of http://review.gluster.org/#/c/11798/
+
+ If a cluster is upgraded from 3.5 to latest version, gluster volume set all
+ cluster.op-version <VERSION> will throw an error message back to the user saying
+ unlocking failed. This is because of trying to release a volume wise lock in
+ unlock phase as the lock was taken cluster wide. The problem surfaced because
+ the op-version is updated in commit phase and unlocking works in the v3
+ framework where it should have used cluster unlock. Fix is to decide which
+ lock/unlock is to be followed before invoking lock phase
+
+ Change-Id: I6a82251d88cfc7af36c7deec511c634a09e55004
+ BUG: 1250836
+ Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
+ Reviewed-on: http://review.gluster.org/11849
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
+ Tested-by: NetBSD Build System <jenkins@build.gluster.org>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit a28d161733e670d264999c6f486915bf738a7bfd
+Author: Niels de Vos <ndevos@redhat.com>
+Date: Fri Jul 17 10:16:54 2015 +0200
+
+ nfs: a unix-domain-socket should not be created as fifo
+
+ Cherry picked from commit 381afd4f480533f212e1f62a0ccfd9dcf7248e17:
+ > Change-Id: Ic6a23165df1703b330636a059967c3c674dbde57
+ > BUG: 1235231
+ > Signed-off-by: Niels de Vos <ndevos@redhat.com>
+ > Reviewed-on: http://review.gluster.org/11355
+ > Tested-by: NetBSD Build System <jenkins@build.gluster.org>
+ > Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
+ > Tested-by: Gluster Build System <jenkins@build.gluster.com>
+
+ Change-Id: Ic6a23165df1703b330636a059967c3c674dbde57
+ BUG: 1244117
+ Signed-off-by: Niels de Vos <ndevos@redhat.com>
+ Reviewed-on: http://review.gluster.org/11709
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit 6263e73688ba2be49fd55f4c6a2d12609ce45f91
+Author: Kaushal M <kaushal@redhat.com>
+Date: Mon Jul 13 16:16:00 2015 +0530
+
+ rpc-transport: socket_poller fixes for proper working of mgmt encryption
+
+ Backport of 8c39f14 from master
+
+ socket_poller, the polling function used by ssl own_thread, had two
+ issues which lead to GlusterD crashes when using management encryption
+
+ Issue 1
+ -------
+ socket_poller calls functions which require THIS to be set. But, THIS
+ was being set conditionally. Because of this, functions could sometimes
+ be called without THIS being set. For example, rpc_transport_notify
+ could be called for an accepted client socket without THIS being set, as
+ THIS was only set it the transport wasn't yet connected. This would
+ cause the process to crash when THIS was accessed by the called
+ functions.
+
+ To fix this, THIS is being set at the start of socket_poller
+ unconditionally.
+
+ Issue 2
+ -------
+ DISCONNECT notify was being sent on the listener transport instead of
+ the client transport. The DISCONNECT event was converted to a
+ LISTENER_DEAD event in rpcsvc_handle_disconnect, as it could not find
+ the listener socket of the listener socket. GlusterD was notified of a
+ LISTENER_DEAD event instead of a DISCONNECT and failed to remove the
+ client transport from its xprt_list. The transport would subsequently
+ be freed, leaving the xprt_list with a corrupted/invalid entry. Later,
+ when GlusterD would iterate over the xprt_list to send notifications, it
+ would crash when the invalid entry was accessed.
+
+ To fix this, DISCONNECT notification in socket_poller is sent on the
+ client socket, as it is done in the epoll handler.
+
+ Change-Id: I0370b7c6d7eb13de10ebf08d91a4a39dc7d64c7a
+ BUG: 1243700
+ Signed-off-by: Kaushal M <kaushal@redhat.com>
+ Reviewed-on: http://review.gluster.org/11690
+ Tested-by: Gluster Build System <jenkins@build.gluster.com>
+ Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+
+commit f9b3ba22f105772e268765d80adfeffd8f6f2776
+Author: Krutika Dhananjay <kdhananj@redhat.com>
+Date: Wed Jun 24 08:02:51 2015 +0530
+
+ cluster/afr: Pick gfid from poststat during fresh lookup for read child calculation
+
+ Backport of : http://review.gluster.org/11373
+
+ Change-Id: I03f11af082a0decf4ea084480b67e9e156964c76
+ BUG: 1235601
+ Signed-off-by: Krutika Dhananjay <kdhananj@redhat.com>
+ Reviewed-on: http://review.gluster.org/11408
+ Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
+ Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
+ Tested-by: Raghavendra Bhat <raghavendra@redhat.com>
+
commit 50b0c7baad43dcd378a5740f154b38ec0ffe0f00
Author: Kaushal M <kaushal@redhat.com>
Date: Tue Jul 7 12:52:30 2015 +0530
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/VERSION
^
|
@@ -1 +1 @@
-v3.6.4-0
\ No newline at end of file
+v3.6.6-0
\ No newline at end of file
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/cli/src/cli-xml-output.c
^
|
@@ -123,8 +123,15 @@
"%d", op_errno);
XML_RET_CHECK_AND_GOTO (ret, out);
- ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"opErrstr",
- "%s", op_errstr);
+ if (op_errstr)
+ ret = xmlTextWriterWriteFormatElement (writer,
+ (xmlChar *)"opErrstr",
+ "%s", op_errstr);
+ else
+ ret = xmlTextWriterWriteFormatElement (writer,
+ (xmlChar *)"opErrstr",
+ "%s", "");
+
XML_RET_CHECK_AND_GOTO (ret, out);
out:
@@ -4596,8 +4603,12 @@
ret = xmlTextWriterWriteFormatElement (writer,
(xmlChar *) "description",
"%s", buffer);
- XML_RET_CHECK_AND_GOTO (ret, out);
+ } else {
+ ret = xmlTextWriterWriteFormatElement (writer,
+ (xmlChar *) "description",
+ "%s", "");
}
+ XML_RET_CHECK_AND_GOTO (ret, out);
snprintf (key_buffer, sizeof (key_buffer), "%s.snap-time", keyprefix);
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/configure
^
|
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63 for glusterfs 3.6.4.
+# Generated by GNU Autoconf 2.63 for glusterfs 3.6.6.
#
# Report bugs to <gluster-users@gluster.org>.
#
@@ -745,8 +745,8 @@
# Identity of this package.
PACKAGE_NAME='glusterfs'
PACKAGE_TARNAME='glusterfs'
-PACKAGE_VERSION='3.6.4'
-PACKAGE_STRING='glusterfs 3.6.4'
+PACKAGE_VERSION='3.6.6'
+PACKAGE_STRING='glusterfs 3.6.6'
PACKAGE_BUGREPORT='gluster-users@gluster.org'
# Factoring default headers for most tests.
@@ -1603,7 +1603,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures glusterfs 3.6.4 to adapt to many kinds of systems.
+\`configure' configures glusterfs 3.6.6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1673,7 +1673,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of glusterfs 3.6.4:";;
+ short | recursive ) echo "Configuration of glusterfs 3.6.6:";;
esac
cat <<\_ACEOF
@@ -1808,7 +1808,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-glusterfs configure 3.6.4
+glusterfs configure 3.6.6
generated by GNU Autoconf 2.63
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1822,7 +1822,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by glusterfs $as_me 3.6.4, which was
+It was created by glusterfs $as_me 3.6.6, which was
generated by GNU Autoconf 2.63. Invocation command line was
$ $0 $@
@@ -2677,7 +2677,7 @@
# Define the identity of the package.
PACKAGE='glusterfs'
- VERSION='3.6.4'
+ VERSION='3.6.6'
cat >>confdefs.h <<_ACEOF
@@ -20331,7 +20331,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by glusterfs $as_me 3.6.4, which was
+This file was extended by glusterfs $as_me 3.6.6, which was
generated by GNU Autoconf 2.63. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -20394,7 +20394,7 @@
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
-glusterfs config.status 3.6.4
+glusterfs config.status 3.6.6
configured by $0, generated by GNU Autoconf 2.63,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/contrib/argp-standalone/Makefile
^
|
@@ -151,13 +151,13 @@
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
-ACLOCAL = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run aclocal-1.11
+ACLOCAL = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run aclocal-1.11
ALLOCA =
-AMTAR = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run tar
+AMTAR = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run tar
AM_DEFAULT_VERBOSITY = 0
-AUTOCONF = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run autoconf
-AUTOHEADER = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run autoheader
-AUTOMAKE = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run automake-1.11
+AUTOCONF = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run autoconf
+AUTOHEADER = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run autoheader
+AUTOMAKE = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run automake-1.11
AWK = gawk
CC = gcc
CCDEPMODE = depmode=gcc3
@@ -182,7 +182,7 @@
LIBOBJS =
LIBS =
LTLIBOBJS =
-MAKEINFO = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run makeinfo
+MAKEINFO = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run makeinfo
MKDIR_P = /bin/mkdir -p
OBJEXT = o
PACKAGE = argp
@@ -197,10 +197,10 @@
SHELL = /bin/sh
STRIP =
VERSION = standalone-1.3
-abs_builddir = /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone
-abs_srcdir = /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone
-abs_top_builddir = /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone
-abs_top_srcdir = /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone
+abs_builddir = /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone
+abs_srcdir = /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone
+abs_top_builddir = /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone
+abs_top_srcdir = /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone
ac_ct_CC = gcc
am__include = include
am__leading_dot = .
@@ -219,7 +219,7 @@
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
-install_sh = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/install-sh
+install_sh = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/contrib/argp-standalone/config.log
^
|
@@ -554,8 +554,8 @@
configure:7255: result: yes
configure:7264: checking for _doprnt
configure:7320: gcc -o conftest -g -O2 conftest.c >&5
-/tmp/ccwlQiZI.o: In function `main':
-/var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/conftest.c:69: undefined reference to `_doprnt'
+/tmp/ccNp5VQ0.o: In function `main':
+/var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/conftest.c:69: undefined reference to `_doprnt'
collect2: ld returned 1 exit status
configure:7327: $? = 1
configure: failed program was:
@@ -812,17 +812,17 @@
## Output variables. ##
## ----------------- ##
-ACLOCAL='${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run aclocal-1.11'
+ACLOCAL='${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run aclocal-1.11'
ALLOCA=''
AMDEPBACKSLASH='\'
AMDEP_FALSE='#'
AMDEP_TRUE=''
-AMTAR='${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run tar'
+AMTAR='${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run tar'
AM_BACKSLASH='\'
AM_DEFAULT_VERBOSITY='0'
-AUTOCONF='${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run autoconf'
-AUTOHEADER='${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run autoheader'
-AUTOMAKE='${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run automake-1.11'
+AUTOCONF='${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run autoconf'
+AUTOHEADER='${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run autoheader'
+AUTOMAKE='${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run automake-1.11'
AWK='gawk'
CC='gcc'
CCDEPMODE='depmode=gcc3'
@@ -846,7 +846,7 @@
LIBOBJS=''
LIBS=''
LTLIBOBJS=''
-MAKEINFO='${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run makeinfo'
+MAKEINFO='${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run makeinfo'
MKDIR_P='/bin/mkdir -p'
OBJEXT='o'
PACKAGE='argp'
@@ -883,7 +883,7 @@
htmldir='${docdir}'
includedir='${prefix}/include'
infodir='${datarootdir}/info'
-install_sh='${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/install-sh'
+install_sh='${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/install-sh'
libdir='${exec_prefix}/lib'
libexecdir='${exec_prefix}/libexec'
localedir='${datarootdir}/locale'
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/contrib/argp-standalone/config.status
^
|
@@ -363,7 +363,7 @@
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
-ac_pwd='/var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone'
+ac_pwd='/var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone'
srcdir='.'
INSTALL='/usr/bin/install -c'
MKDIR_P='/bin/mkdir -p'
@@ -562,7 +562,7 @@
S["AM_DEFAULT_VERBOSITY"]="0"
S["am__untar"]="${AMTAR} xf -"
S["am__tar"]="${AMTAR} chof - \"$$tardir\""
-S["AMTAR"]="${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run tar"
+S["AMTAR"]="${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run tar"
S["am__leading_dot"]="."
S["SET_MAKE"]=""
S["AWK"]="gawk"
@@ -570,12 +570,12 @@
S["MKDIR_P"]="/bin/mkdir -p"
S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s"
S["STRIP"]=""
-S["install_sh"]="${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/install-sh"
-S["MAKEINFO"]="${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run makeinfo"
-S["AUTOHEADER"]="${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run autoheader"
-S["AUTOMAKE"]="${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run automake-1.11"
-S["AUTOCONF"]="${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run autoconf"
-S["ACLOCAL"]="${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/argp-standalone/missing --run aclocal-1.11"
+S["install_sh"]="${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/install-sh"
+S["MAKEINFO"]="${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run makeinfo"
+S["AUTOHEADER"]="${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run autoheader"
+S["AUTOMAKE"]="${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run automake-1.11"
+S["AUTOCONF"]="${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run autoconf"
+S["ACLOCAL"]="${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/argp-standalone/missing --run aclocal-1.11"
S["VERSION"]="standalone-1.3"
S["PACKAGE"]="argp"
S["CYGPATH_W"]="echo"
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/contrib/umountd/Makefile
^
|
@@ -92,8 +92,8 @@
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/missing --run aclocal-1.11
-AMTAR = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/missing --run tar
+ACLOCAL = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/missing --run aclocal-1.11
+AMTAR = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/missing --run tar
AM_DEFAULT_VERBOSITY = 0
AM_LIBTOOLFLAGS = --quiet
AM_MAKEFLAGS = --no-print-directory --quiet
@@ -101,9 +101,9 @@
ARGP_STANDALONE_CPPFLAGS =
ARGP_STANDALONE_DIR =
ARGP_STANDALONE_LDADD =
-AUTOCONF = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/missing --run autoconf
-AUTOHEADER = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/missing --run autoheader
-AUTOMAKE = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/missing --run automake-1.11
+AUTOCONF = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/missing --run autoconf
+AUTOHEADER = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/missing --run autoheader
+AUTOMAKE = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/missing --run automake-1.11
AWK = gawk
BUILD_PYTHON_INC = /usr/include/python2.6
BUILD_PYTHON_LIB = python2.6
@@ -132,7 +132,7 @@
GEOREP_EXTRAS_SUBDIR = geo-rep
GFAPI_EXTRA_LDFLAGS = -Wl,--version-script=$(top_srcdir)/api/src/gfapi.map
GFAPI_LT_VERSION = 0:0:0
-GFAPI_VERSION = 7.3.6.4
+GFAPI_VERSION = 7.3.6.6
GF_CFLAGS =
GF_CPPFLAGS = -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D$(GF_HOST_OS) -I$(top_srcdir)/libglusterfs/src -I$(CONTRIBDIR)/uuid
GF_DISTRIBUTION = Redhat
@@ -178,7 +178,7 @@
LIPO =
LN_S = ln -s
LTLIBOBJS =
-MAKEINFO = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/missing --run makeinfo
+MAKEINFO = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/missing --run makeinfo
MKDIR_P = /bin/mkdir -p
NM = /usr/bin/nm -B
NMEDIT =
@@ -191,9 +191,9 @@
PACKAGE_BUGREPORT = gluster-users@gluster.org
PACKAGE_NAME = glusterfs
PACKAGE_RELEASE = 0
-PACKAGE_STRING = glusterfs 3.6.4
+PACKAGE_STRING = glusterfs 3.6.6
PACKAGE_TARNAME = glusterfs
-PACKAGE_VERSION = 3.6.4
+PACKAGE_VERSION = 3.6.6
PATH_SEPARATOR = :
PKG_CONFIG = /usr/bin/pkg-config
PYTHON = /usr/bin/python
@@ -219,7 +219,7 @@
SYNCDAEMON_COMPILE = 1
SYNCDAEMON_SUBDIR = geo-replication
UMOUNTD_SUBDIR =
-VERSION = 3.6.4
+VERSION = 3.6.6
XML2_CONFIG = /usr/bin/xml2-config
XML_CPPFLAGS = -I/usr/include/libxml2
XML_LIBS = -lxml2 -lz -lm
@@ -227,10 +227,10 @@
YFLAGS =
ZLIB_CFLAGS =
ZLIB_LIBS = -lz
-abs_builddir = /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/umountd
-abs_srcdir = /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/contrib/umountd
-abs_top_builddir = /var/lib/jenkins/work/releases/3.6.4/glusterfs.git
-abs_top_srcdir = /var/lib/jenkins/work/releases/3.6.4/glusterfs.git
+abs_builddir = /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/umountd
+abs_srcdir = /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/contrib/umountd
+abs_top_builddir = /var/lib/jenkins/work/releases/3.6.6/glusterfs.git
+abs_top_srcdir = /var/lib/jenkins/work/releases/3.6.6/glusterfs.git
ac_ct_CC = gcc
ac_ct_DUMPBIN =
am__include = include
@@ -259,7 +259,7 @@
includedir = ${prefix}/include
infodir = ${datarootdir}/info
initdir = /etc/init.d
-install_sh = ${SHELL} /var/lib/jenkins/work/releases/3.6.4/glusterfs.git/install-sh
+install_sh = ${SHELL} /var/lib/jenkins/work/releases/3.6.6/glusterfs.git/install-sh
launchddir = /Library/LaunchDaemons
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/doc/glusterfsd.8
^
|
@@ -101,6 +101,9 @@
.TP
\fB\-\-direct\-io\-mode=BOOL\fR
Enable/Disable direct-io mode in fuse module [default: enable]
+.TP
+\fB\-\-resolve-gids\fR
+Resolve all auxilary groups in fuse translator (max 32 otherwise)
.SS "Miscellaneous Options"
.PP
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/glusterfs.spec
^
|
@@ -10,7 +10,7 @@
##
# if you wish to compile an rpm without rdma support, compile like this...
-# rpmbuild -ta glusterfs-3.6.4.tar.gz --without rdma
+# rpmbuild -ta glusterfs-3.6.6.tar.gz --without rdma
%{?_without_rdma:%global _without_rdma --disable-ibverbs}
# No RDMA Support on s390(x)
@@ -19,15 +19,15 @@
%endif
# if you wish to compile an rpm without epoll...
-# rpmbuild -ta glusterfs-3.6.4.tar.gz --without epoll
+# rpmbuild -ta glusterfs-3.6.6.tar.gz --without epoll
%{?_without_epoll:%global _without_epoll --disable-epoll}
# if you wish to compile an rpm without fusermount...
-# rpmbuild -ta glusterfs-3.6.4.tar.gz --without fusermount
+# rpmbuild -ta glusterfs-3.6.6.tar.gz --without fusermount
%{?_without_fusermount:%global _without_fusermount --disable-fusermount}
# if you wish to compile an rpm without geo-replication support, compile like this...
-# rpmbuild -ta glusterfs-3.6.4.tar.gz --without georeplication
+# rpmbuild -ta glusterfs-3.6.6.tar.gz --without georeplication
%{?_without_georeplication:%global _without_georeplication --disable-georeplication}
# Disable geo-replication on EL5, as its default Python is too old
@@ -36,11 +36,11 @@
%endif
# if you wish to compile an rpm without the OCF resource agents...
-# rpmbuild -ta glusterfs-3.6.4.tar.gz --without ocf
+# rpmbuild -ta glusterfs-3.6.6.tar.gz --without ocf
%{?_without_ocf:%global _without_ocf --without-ocf}
# if you wish to build rpms without syslog logging, compile like this
-# rpmbuild -ta glusterfs-3.6.4.tar.gz --without syslog
+# rpmbuild -ta glusterfs-3.6.6.tar.gz --without syslog
%{?_without_syslog:%global _without_syslog --disable-syslog}
# disable syslog forcefully as rhel <= 6 doesn't have rsyslog or rsyslog-mmcount
@@ -52,7 +52,7 @@
%endif
# if you wish to compile an rpm without the BD map support...
-# rpmbuild -ta glusterfs-3.6.4.tar.gz --without bd
+# rpmbuild -ta glusterfs-3.6.6.tar.gz --without bd
%{?_without_bd:%global _without_bd --disable-bd-xlator}
%if ( 0%{?rhel} && 0%{?rhel} < 6 || 0%{?sles_version} )
@@ -60,7 +60,7 @@
%endif
# if you wish to compile an rpm without the qemu-block support...
-# rpmbuild -ta glusterfs-3.6.4.tar.gz --without qemu-block
+# rpmbuild -ta glusterfs-3.6.6.tar.gz --without qemu-block
%{?_without_qemu_block:%global _without_qemu_block --disable-qemu-block}
%if ( 0%{?rhel} && 0%{?rhel} < 6 )
@@ -150,7 +150,7 @@
Vendor: Fedora Project
%else
Name: glusterfs
-Version: 3.6.4
+Version: 3.6.6
Release: 0.0%{?dist}
Vendor: glusterfs.org
%endif
@@ -168,7 +168,7 @@
Source7: glusterfsd.service
Source8: glusterfsd.init
%else
-Source0: glusterfs-3.6.4.tar.gz
+Source0: glusterfs-3.6.6.tar.gz
%endif
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/glusterfsd/src/glusterfsd.c
^
|
@@ -191,6 +191,8 @@
{"gid-timeout", ARGP_GID_TIMEOUT_KEY, "SECONDS", 0,
"Set auxilary group list timeout to SECONDS for fuse translator "
"[default: 0]"},
+ {"resolve-gids", ARGP_RESOLVE_GIDS_KEY, 0, 0,
+ "Resolve all auxilary groups in fuse translator (max 32 otherwise)"},
{"background-qlen", ARGP_FUSE_BACKGROUND_QLEN_KEY, "N", 0,
"Set fuse module's background queue length to N "
"[default: 64]"},
@@ -419,6 +421,16 @@
goto err;
}
}
+
+ if (cmd_args->resolve_gids) {
+ ret = dict_set_static_ptr (options, "resolve-gids", "on");
+ if (ret < 0) {
+ gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,
+ "resolve-gids");
+ goto err;
+ }
+ }
+
if (cmd_args->background_qlen) {
ret = dict_set_int32 (options, "background-qlen",
cmd_args->background_qlen);
@@ -1055,6 +1067,11 @@
argp_failure(state, -1, 0, "unknown group list timeout %s", arg);
break;
+
+ case ARGP_RESOLVE_GIDS_KEY:
+ cmd_args->resolve_gids = 1;
+ break;
+
case ARGP_FUSE_BACKGROUND_QLEN_KEY:
if (!gf_string2int (arg, &cmd_args->background_qlen))
break;
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/glusterfsd/src/glusterfsd.h
^
|
@@ -92,6 +92,7 @@
ARGP_LOG_BUF_SIZE = 170,
ARGP_LOG_FLUSH_TIMEOUT = 171,
ARGP_SECURE_MGMT_KEY = 172,
+ ARGP_RESOLVE_GIDS_KEY = 173,
};
struct _gfd_vol_top_priv_t {
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/libglusterfs/src/glusterfs.h
^
|
@@ -418,6 +418,7 @@
int background_qlen;
int congestion_threshold;
char *fuse_mountopts;
+ int resolve_gids;
/* key args */
char *mount_point;
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/libglusterfs/src/inode.c
^
|
@@ -1862,6 +1862,28 @@
return ret;
}
+int
+inode_is_linked (inode_t *inode)
+{
+ int ret = 0;
+ inode_table_t *table = NULL;
+
+ if (!inode) {
+ gf_log_callingfn (THIS->name, GF_LOG_WARNING,
+ "inode not found");
+ return 0;
+ }
+
+ table = inode->table;
+
+ pthread_mutex_lock (&table->lock);
+ {
+ ret = __is_inode_hashed (inode);
+ }
+ pthread_mutex_unlock (&table->lock);
+
+ return ret;
+}
void
inode_dump (inode_t *inode, char *prefix)
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/libglusterfs/src/inode.h
^
|
@@ -257,4 +257,7 @@
void
inode_table_set_lru_limit (inode_table_t *table, uint32_t lru_limit);
+int
+inode_is_linked (inode_t *inode);
+
#endif /* _INODE_H */
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/libglusterfs/src/lkowner.h
^
|
@@ -80,4 +80,23 @@
return ((l1->len == l2->len) && !memcmp(l1->data, l2->data, l1->len));
}
+static inline int
+is_lk_owner_null (gf_lkowner_t *lkowner)
+{
+ int is_null = 1;
+ int i = 0;
+
+ if (lkowner == NULL || lkowner->len == 0)
+ goto out;
+
+ for (i = 0; i < lkowner->len; i++) {
+ if (lkowner->data[i] != 0) {
+ is_null = 0;
+ break;
+ }
+ }
+out:
+ return is_null;
+}
+
#endif /* _LK_OWNER_H */
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/libglusterfs/src/store.c
^
|
@@ -374,7 +374,7 @@
}
int32_t
-gf_store_handle_new (char *path, gf_store_handle_t **handle)
+gf_store_handle_new (const char *path, gf_store_handle_t **handle)
{
int32_t ret = -1;
gf_store_handle_t *shandle = NULL;
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/libglusterfs/src/store.h
^
|
@@ -74,7 +74,7 @@
gf_store_save_value (int fd, char *key, char *value);
int32_t
-gf_store_handle_new (char *path, gf_store_handle_t **handle);
+gf_store_handle_new (const char *path, gf_store_handle_t **handle);
int
gf_store_handle_retrieve (char *path, gf_store_handle_t **handle);
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/rpc/rpc-transport/socket/src/socket.c
^
|
@@ -2371,6 +2371,12 @@
uint32_t gen = 0;
char *cname = NULL;
+ GF_ASSERT (this);
+ /* Set THIS early on in the life of this thread, instead of setting it
+ * conditionally
+ */
+ THIS = this->xl;
+
priv->ot_state = OT_RUNNING;
if (priv->use_ssl) {
@@ -2399,7 +2405,6 @@
}
if (priv->connected == 0) {
- THIS = this->xl;
ret = socket_connect_finish (this);
if (ret != 0) {
gf_log (this->name, GF_LOG_WARNING,
@@ -2440,8 +2445,7 @@
"poll error on pipe");
break;
}
- /* Only glusterd actually seems to need this. */
- THIS = this->xl;
+
if (pfd[1].revents & POLL_MASK_INPUT) {
ret = socket_event_poll_in(this);
if (ret >= 0) {
@@ -2519,8 +2523,7 @@
priv->sock = -1;
priv->ot_state = OT_IDLE;
pthread_mutex_unlock(&priv->lock);
- rpc_transport_notify (this->listener, RPC_TRANSPORT_DISCONNECT,
- this);
+ rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this);
rpc_transport_unref (this);
return NULL;
}
|
[-]
[+]
|
Added |
glusterfs-3.6.6.tar.gz/tests/bugs/bug-1258069.t
^
|
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+. $(dirname $0)/../include.rc
+. $(dirname $0)/../volume.rc
+. $(dirname $0)/../nfs.rc
+
+cleanup
+
+TEST glusterd
+TEST pidof glusterd
+TEST $CLI volume create $V0 replica 3 $H0:$B0/${V0}{0,1,2}
+TEST $CLI volume set $V0 cluster.choose-local off
+TEST $CLI volume set $V0 nfs.disable off
+TEST $CLI volume set $V0 diagnostics.client-log-level DEBUG
+TEST $CLI volume start $V0
+
+EXPECT_WITHIN $NFS_EXPORT_TIMEOUT "1" is_nfs_export_available
+TEST mount_nfs $H0:/$V0 $N0 nolock
+TEST mkdir -p $N0/a/b/c
+TEST umount_nfs $N0
+TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0 --attribute-timeout=0 --entry-timeout=0
+rmdir $M0/a/b/c
+mkdir $M0/a/b/c
+TEST mount_nfs $H0:/$V0/a/b/c $N0 nolock
+TEST umount_nfs $N0
+TEST umount $M0
+
+cleanup
|
[-]
[+]
|
Added |
glusterfs-3.6.6.tar.gz/tests/bugs/fuse
^
|
+(directory)
|
[-]
[+]
|
Added |
glusterfs-3.6.6.tar.gz/tests/bugs/fuse/many-groups-for-acl.t
^
|
@@ -0,0 +1,113 @@
+#!/bin/bash
+
+. $(dirname $0)/../../include.rc
+. $(dirname $0)/../../volume.rc
+. $(dirname $0)/../../nfs.rc
+
+cleanup
+
+# prepare the users and groups
+NEW_USER=bug1246275
+NEW_UID=1246275
+NEW_GID=1246275
+LAST_GID=1246403
+NEW_GIDS=${NEW_GID}
+
+# OS-specific overrides
+case $OSTYPE in
+NetBSD|Darwin)
+ # no ACLs, and only NGROUPS_MAX=16 secondary groups are supported
+ SKIP_TESTS
+ exit 0
+ ;;
+FreeBSD)
+ # NGROUPS_MAX=1023 (FreeBSD>=8.0), we can afford 200 groups
+ ;;
+Linux)
+ # NGROUPS_MAX=65536, we can afford 200 groups
+ ;;
+*)
+ ;;
+esac
+
+# create a user that belongs to many groups
+for GID in $(seq -f '%6.0f' ${NEW_GID} ${LAST_GID})
+do
+ groupadd -o -g ${GID} ${NEW_USER}-${GID}
+ NEW_GIDS="${NEW_GIDS},${NEW_USER}-${GID}"
+done
+TEST useradd -o -M -u ${NEW_UID} -g ${NEW_GID} -G ${NEW_USER}-${NEW_GIDS} ${NEW_USER}
+
+# preparation done, start the tests
+
+TEST glusterd
+TEST pidof glusterd
+TEST $CLI volume create ${V0} ${H0}:${B0}/${V0}1
+# disable manage-gids on the server-side for now, gets enabled later
+TEST $CLI volume set ${V0} server.manage-gids off
+TEST $CLI volume start ${V0}
+
+EXPECT_WITHIN ${NFS_EXPORT_TIMEOUT} "1" is_nfs_export_available
+
+# mount the volume with POSIX ACL support, without --resolve-gids
+TEST glusterfs --acl --volfile-id=/${V0} --volfile-server=${H0} ${M0}
+
+# create some directories for testing
+TEST mkdir ${M0}/first-32-gids-1
+TEST setfacl -m g:${NEW_UID}:rwx ${M0}/first-32-gids-1
+TEST mkdir ${M0}/first-32-gids-2
+TEST setfacl -m g:$[NEW_UID+16]:rwx ${M0}/first-32-gids-2
+TEST mkdir ${M0}/gid-64
+TEST setfacl -m g:$[NEW_UID+64]:rwx ${M0}/gid-64
+TEST mkdir ${M0}/gid-120
+TEST setfacl -m g:$[NEW_UID+120]:rwx ${M0}/gid-120
+
+su -m ${NEW_USER} -c "touch ${M0}/first-32-gids-1/success > /dev/null"
+TEST [ $? -eq 0 ]
+
+su -m ${NEW_USER} -c "touch ${M0}/first-32-gids-2/success > /dev/null"
+TEST [ $? -eq 0 ]
+
+su -m ${NEW_USER} -c "touch ${M0}/gid-64/failure > /dev/null"
+TEST [ $? -ne 0 ]
+
+su -m ${NEW_USER} -c "touch ${M0}/gid-120/failure > /dev/null"
+TEST [ $? -ne 0 ]
+
+# unmount and remount with --resolve-gids
+EXPECT_WITHIN ${UMOUNT_TIMEOUT} "Y" force_umount ${M0}
+TEST glusterfs --acl --resolve-gids --volfile-id=/${V0} --volfile-server=${H0} ${M0}
+
+su -m ${NEW_USER} -c "touch ${M0}/gid-64/success > /dev/null"
+TEST [ $? -eq 0 ]
+
+su -m ${NEW_USER} -c "touch ${M0}/gid-120/failure > /dev/null"
+TEST [ $? -ne 0 ]
+
+# enable server-side resolving of the groups
+# stopping and starting is not really needed, but it prevents races
+TEST $CLI volume stop ${V0}
+TEST $CLI volume set ${V0} server.manage-gids on
+TEST $CLI volume start ${V0}
+EXPECT_WITHIN ${NFS_EXPORT_TIMEOUT} "1" is_nfs_export_available
+
+# unmount and remount to prevent more race conditions on test systems
+EXPECT_WITHIN ${UMOUNT_TIMEOUT} "Y" force_umount ${M0}
+TEST glusterfs --acl --resolve-gids --volfile-id=/${V0} --volfile-server=${H0} ${M0}
+
+su -m ${NEW_USER} -c "touch ${M0}/gid-120/success > /dev/null"
+TEST [ $? -eq 0 ]
+
+# cleanup
+userdel --force ${NEW_USER}
+for GID in $(seq -f '%6.0f' ${NEW_GID} ${LAST_GID})
+do
+ groupdel ${NEW_USER}-${GID}
+done
+
+EXPECT_WITHIN ${UMOUNT_TIMEOUT} "Y" force_umount ${M0}
+
+TEST ${CLI} volume stop ${V0}
+TEST ${CLI} volume delete ${V0}
+
+cleanup
|
[-]
[+]
|
Added |
glusterfs-3.6.6.tar.gz/tests/bugs/nfs
^
|
+(directory)
|
[-]
[+]
|
Added |
glusterfs-3.6.6.tar.gz/tests/bugs/nfs/bug-1166862.t
^
|
@@ -0,0 +1,66 @@
+#!/bin/bash
+#
+# When nfs.mount-rmtab is disabled, it should not get updated.
+#
+# Based on: bug-904065.t
+#
+
+# count the lines of a file, return 0 if the file does not exist
+function count_lines()
+{
+ if [ -n "$1" ]
+ then
+ $@ 2>/dev/null | wc -l
+ else
+ echo 0
+ fi
+}
+
+
+. $(dirname $0)/../../include.rc
+. $(dirname $0)/../../nfs.rc
+. $(dirname $0)/../../volume.rc
+
+cleanup
+
+TEST glusterd
+TEST pidof glusterd
+
+TEST $CLI volume create $V0 $H0:$B0/brick1
+EXPECT 'Created' volinfo_field $V0 'Status'
+
+TEST $CLI volume start $V0;
+EXPECT 'Started' volinfo_field $V0 'Status'
+
+# glusterfs/nfs needs some time to start up in the background
+EXPECT_WITHIN $NFS_EXPORT_TIMEOUT 1 is_nfs_export_available
+
+# disable the rmtab by settting it to the magic "/-" value
+TEST $CLI volume set $V0 nfs.mount-rmtab /-
+
+# before mounting the rmtab should be empty
+EXPECT '0' count_lines cat $GLUSTERD_WORKDIR/nfs/rmtab
+
+TEST mount_nfs $H0:/$V0 $N0 nolock
+EXPECT '0' count_lines cat $GLUSTERD_WORKDIR/nfs/rmtab
+
+# showmount should list one client
+EXPECT '1' count_lines showmount --no-headers $H0
+
+# unmount
+EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $N0
+
+# after resetting the option, the rmtab should get updated again
+TEST $CLI volume reset $V0 nfs.mount-rmtab
+
+# before mounting the rmtab should be empty
+EXPECT '0' count_lines cat $GLUSTERD_WORKDIR/nfs/rmtab
+
+TEST mount_nfs $H0:/$V0 $N0 nolock
+EXPECT '2' count_lines cat $GLUSTERD_WORKDIR/nfs/rmtab
+
+# removing a mount
+EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $N0
+EXPECT '0' count_lines cat $GLUSTERD_WORKDIR/nfs/rmtab
+
+cleanup
|
[-]
[+]
|
Added |
glusterfs-3.6.6.tar.gz/tests/bugs/nfs/socket-as-fifo.py
^
|
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+#
+# Create a unix domain socket and test if it is a socket (and not a fifo/pipe).
+#
+# Author: Niels de Vos <ndevos@redhat.com>
+#
+
+import os
+import stat
+import sys
+import socket
+
+ret = 1
+
+if len(sys.argv) != 2:
+ print 'Usage: %s <socket>' % (sys.argv[0])
+ sys.exit(ret)
+
+path = sys.argv[1]
+
+sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+sock.bind(path)
+
+stbuf = os.stat(path)
+mode = stbuf.st_mode
+
+if stat.S_ISSOCK(mode):
+ ret = 0
+
+sock.close()
+os.unlink(path)
+
+sys.exit(ret)
|
[-]
[+]
|
Added |
glusterfs-3.6.6.tar.gz/tests/bugs/nfs/socket-as-fifo.t
^
|
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+. $(dirname $0)/../../include.rc
+. $(dirname $0)/../../volume.rc
+. $(dirname $0)/../../nfs.rc
+
+cleanup;
+
+TEST glusterd
+TEST pidof glusterd
+
+TEST $CLI volume create $V0 $H0:$B0/$V0
+TEST $CLI volume start $V0
+EXPECT_WITHIN $NFS_EXPORT_TIMEOUT "1" is_nfs_export_available;
+TEST mount_nfs $H0:/$V0 $N0 nolock
+
+# this is the actual test
+TEST $(dirname $0)/socket-as-fifo.py $N0/not-a-fifo.socket
+
+TEST umount_nfs $N0
+
+cleanup
|
[-]
[+]
|
Added |
glusterfs-3.6.6.tar.gz/tests/bugs/snapshot
^
|
+(directory)
|
[-]
[+]
|
Added |
glusterfs-3.6.6.tar.gz/tests/bugs/snapshot/bug-1250387.t
^
|
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+. $(dirname $0)/../../include.rc
+. $(dirname $0)/../../volume.rc
+. $(dirname $0)/../../snapshot.rc
+
+cleanup;
+
+TEST init_n_bricks 1;
+TEST setup_lvm 1;
+
+TEST glusterd;
+
+TEST pidof glusterd;
+
+TEST $CLI volume create $V0 $H0:$L1;
+
+TEST $CLI volume start $V0;
+
+TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0;
+
+TEST $CLI snapshot create snap1 $V0;
+
+EXPECT "description" get-cmd-field-xml "snapshot info snap1" "description"
+
+cleanup ;
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/tests/snapshot.rc
^
|
@@ -401,6 +401,20 @@
ls $path/.snaps | wc -l
}
+#return specific fields of xml output
+function get-cmd-field-xml()
+{
+ local cli=$CLI_1;
+ if [ "$cli" = "" ]; then
+ cli=$CLI
+ fi
+
+ COMMAND=$1
+ PATTERN=$2
+
+ $cli $COMMAND --xml | xmllint --format - | grep $PATTERN
+}
+
case $OSTYPE in
NetBSD)
echo "Skip test on LVM which is not available on NetBSD" >&2
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/cluster/afr/src/afr-common.c
^
|
@@ -726,7 +726,7 @@
int
-afr_hash_child (inode_t *inode, int32_t child_count, int hashmode)
+afr_hash_child (afr_read_subvol_args_t *args, int32_t child_count, int hashmode)
{
uuid_t gfid_copy = {0,};
pid_t pid;
@@ -735,11 +735,9 @@
return -1;
}
- if (inode) {
- uuid_copy (gfid_copy, inode->gfid);
- }
+ uuid_copy (gfid_copy, args->gfid);
- if (hashmode > 1 && inode->ia_type != IA_IFDIR) {
+ if ((hashmode > 1) && (args->ia_type != IA_IFDIR)) {
/*
* Why getpid? Because it's one of the cheapest calls
* available - faster than gethostname etc. - and returns a
@@ -760,32 +758,41 @@
int
afr_read_subvol_select_by_policy (inode_t *inode, xlator_t *this,
- unsigned char *readable)
+ unsigned char *readable,
+ afr_read_subvol_args_t *args)
{
- afr_private_t *priv = NULL;
- int read_subvol = -1;
- int i = 0;
+ int i = 0;
+ int read_subvol = -1;
+ afr_private_t *priv = NULL;
+ afr_read_subvol_args_t local_args = {0,};
priv = this->private;
/* first preference - explicitly specified or local subvolume */
if (priv->read_child >= 0 && readable[priv->read_child])
- return priv->read_child;
+ return priv->read_child;
+
+ if (inode_is_linked (inode)) {
+ uuid_copy (local_args.gfid, inode->gfid);
+ local_args.ia_type = inode->ia_type;
+ } else if (args) {
+ local_args = *args;
+ }
/* second preference - use hashed mode */
- read_subvol = afr_hash_child (inode, priv->child_count,
- priv->hash_mode);
+ read_subvol = afr_hash_child (&local_args, priv->child_count,
+ priv->hash_mode);
if (read_subvol >= 0 && readable[read_subvol])
- return read_subvol;
+ return read_subvol;
for (i = 0; i < priv->child_count; i++) {
- if (readable[i])
- return i;
+ if (readable[i])
+ return i;
}
- /* no readable subvolumes, either split brain or all subvols down */
+ /* no readable subvolumes, either split brain or all subvols down */
- return -1;
+ return -1;
}
@@ -808,7 +815,8 @@
int
afr_read_subvol_get (inode_t *inode, xlator_t *this, int *subvol_p,
- int *event_p, afr_transaction_type type)
+ int *event_p, afr_transaction_type type,
+ afr_read_subvol_args_t *args)
{
afr_private_t *priv = NULL;
unsigned char *data_readable = NULL;
@@ -835,10 +843,10 @@
if (AFR_COUNT (intersection, priv->child_count) > 0)
subvol = afr_read_subvol_select_by_policy (inode, this,
- intersection);
+ intersection, args);
else
subvol = afr_read_subvol_select_by_policy (inode, this,
- readable);
+ readable, args);
if (subvol_p)
*subvol_p = subvol;
if (event_p)
@@ -1170,7 +1178,8 @@
priv = this->private;
if (parent)
- par_read_subvol = afr_data_subvol_get (parent, this, 0, 0);
+ par_read_subvol = afr_data_subvol_get (parent, this, 0, 0,
+ NULL);
for (i = 0; i < priv->child_count; i++) {
if (!replies[i].valid)
@@ -1218,6 +1227,8 @@
gf_boolean_t locked_entry = _gf_false;
gf_boolean_t can_interpret = _gf_true;
inode_t *parent = NULL;
+ ia_type_t ia_type = IA_INVAL;
+ afr_read_subvol_args_t args = {0,};
priv = this->private;
local = frame->local;
@@ -1263,6 +1274,7 @@
if (read_subvol == -1 || !readable[read_subvol]) {
read_subvol = i;
uuid_copy (read_gfid, replies[i].poststat.ia_gfid);
+ ia_type = replies[i].poststat.ia_type;
local->op_ret = 0;
}
}
@@ -1308,14 +1320,16 @@
a response from all the UP subvolumes and all of them resolved
to the same GFID
*/
+ uuid_copy (args.gfid, read_gfid);
+ args.ia_type = ia_type;
if (afr_replies_interpret (frame, this, local->inode)) {
read_subvol = afr_data_subvol_get (local->inode, this,
- 0, 0);
+ 0, 0, &args);
afr_inode_read_subvol_reset (local->inode, this);
goto cant_interpret;
} else {
read_subvol = afr_data_subvol_get (local->inode, this,
- 0, 0);
+ 0, 0, &args);
}
} else {
cant_interpret:
@@ -1783,7 +1797,7 @@
afr_replies_interpret (frame, this, local->inode);
- read_subvol = afr_data_subvol_get (local->inode, this, 0, 0);
+ read_subvol = afr_data_subvol_get (local->inode, this, 0, 0, NULL);
if (read_subvol == -1) {
gf_log (this->name, GF_LOG_WARNING, "no read subvols for %s",
local->loc.path);
@@ -1942,7 +1956,7 @@
}
afr_read_subvol_get (loc->inode, this, NULL, &event,
- AFR_DATA_TRANSACTION);
+ AFR_DATA_TRANSACTION, NULL);
if (event != local->event_generation)
afr_inode_refresh (frame, this, loc->inode, afr_discover_do);
@@ -2088,7 +2102,7 @@
}
afr_read_subvol_get (loc->parent, this, NULL, &event,
- AFR_DATA_TRANSACTION);
+ AFR_DATA_TRANSACTION, NULL);
if (event != local->event_generation)
afr_inode_refresh (frame, this, loc->parent, afr_lookup_do);
@@ -2408,7 +2422,7 @@
local = frame->local;
- read_subvol = afr_data_subvol_get (local->inode, this, 0, 0);
+ read_subvol = afr_data_subvol_get (local->inode, this, 0, 0, NULL);
LOCK (&frame->lock);
{
@@ -3600,7 +3614,6 @@
int idx = -1;
int ret = -1;
int call_psh = 0;
- int up_child = -1;
dict_t *input = NULL;
dict_t *output = NULL;
gf_boolean_t had_quorum = _gf_false;
@@ -3661,7 +3674,6 @@
priv->child_up[idx] = 1;
call_psh = 1;
- up_child = idx;
for (i = 0; i < priv->child_count; i++)
if (priv->child_up[i] == 1)
up_children++;
@@ -3797,22 +3809,18 @@
if (propagate)
ret = default_notify (this, event, data);
- if (!had_heard_from_all && have_heard_from_all && priv->shd.iamshd) {
- /*
- * Since self-heal is supposed to be launched only after
- * the responses from all the bricks are collected,
- * launch self-heals now on all up subvols.
+ if ((!had_heard_from_all) || call_psh) {
+ /* Launch self-heal on all local subvolumes if:
+ * a) We have_heard_from_all for the first time
+ * b) Already heard from everyone, but we now got a child-up
+ * event.
*/
- for (i = 0; i < priv->child_count; i++)
- if (priv->child_up[i])
- afr_selfheal_childup (this, i);
- } else if (have_heard_from_all && call_psh && priv->shd.iamshd) {
- /*
- * Already heard from everyone. Just launch heal on now up
- * subvolume.
- */
- afr_selfheal_childup (this, up_child);
- }
+ if (have_heard_from_all && priv->shd.iamshd) {
+ for (i = 0; i < priv->child_count; i++)
+ if (priv->child_up[i])
+ afr_selfheal_childup (this, i);
+ }
+ }
out:
return ret;
}
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/cluster/afr/src/afr-dir-read.c
^
|
@@ -153,7 +153,12 @@
if (!priv->consistent_metadata)
return 0;
- entry_read_subvol = afr_data_subvol_get (inode, this, 0, 0);
+ /* For an inode fetched through readdirp which is yet to be linked,
+ * inode ctx would not be initialised (yet). So this function returns
+ * -1 above due to gen being 0, which is why it is OK to pass NULL for
+ * read_subvol_args here.
+ */
+ entry_read_subvol = afr_data_subvol_get (inode, this, 0, 0, NULL);
if (entry_read_subvol != par_read_subvol)
return -1;
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/cluster/afr/src/afr-dir-write.c
^
|
@@ -95,14 +95,14 @@
if (local->inode) {
afr_replies_interpret (frame, this, local->inode);
inode_read_subvol = afr_data_subvol_get (local->inode, this,
- NULL, NULL);
+ NULL, NULL, NULL);
}
if (local->parent)
parent_read_subvol = afr_data_subvol_get (local->parent, this,
- NULL, NULL);
+ NULL, NULL, NULL);
if (local->parent2)
parent2_read_subvol = afr_data_subvol_get (local->parent2, this,
- NULL, NULL);
+ NULL, NULL, NULL);
local->op_ret = -1;
local->op_errno = afr_final_errno (local, priv);
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/cluster/afr/src/afr-inode-write.c
^
|
@@ -53,10 +53,11 @@
if (local->inode) {
if (local->transaction.type == AFR_METADATA_TRANSACTION)
read_subvol = afr_metadata_subvol_get (local->inode, this,
- NULL, NULL);
+ NULL, NULL,
+ NULL);
else
read_subvol = afr_data_subvol_get (local->inode, this,
- NULL, NULL);
+ NULL, NULL, NULL);
}
local->op_ret = -1;
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/cluster/afr/src/afr-read-txn.c
^
|
@@ -89,7 +89,7 @@
memcpy (local->readable, local->child_up, priv->child_count);
read_subvol = afr_read_subvol_select_by_policy (inode, this,
- local->readable);
+ local->readable, NULL);
if (read_subvol == -1)
AFR_READ_TXN_SET_ERROR_AND_GOTO (-1, EIO, -1, readfn);
@@ -216,7 +216,7 @@
goto refresh;
read_subvol = afr_read_subvol_select_by_policy (inode, this,
- local->readable);
+ local->readable, NULL);
if (read_subvol < 0 || read_subvol > priv->child_count) {
gf_msg (this->name, GF_LOG_WARNING, 0, AFR_MSG_SPLIT_BRAIN,
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/cluster/afr/src/afr.h
^
|
@@ -731,6 +731,10 @@
struct afr_reply *replies;
} afr_local_t;
+typedef struct afr_read_subvol_args {
+ ia_type_t ia_type;
+ uuid_t gfid;
+} afr_read_subvol_args_t;
/* did a call fail due to a child failing? */
#define child_went_down(op_ret, op_errno) (((op_ret) < 0) && \
@@ -764,7 +768,8 @@
int
afr_read_subvol_select_by_policy (inode_t *inode, xlator_t *this,
- unsigned char *readable);
+ unsigned char *readable,
+ afr_read_subvol_args_t *args);
int
afr_inode_read_subvol_type_get (inode_t *inode, xlator_t *this,
@@ -772,13 +777,14 @@
int type);
int
afr_read_subvol_get (inode_t *inode, xlator_t *this, int *subvol_p,
- int *event_p, afr_transaction_type type);
+ int *event_p, afr_transaction_type type,
+ afr_read_subvol_args_t *args);
-#define afr_data_subvol_get(i, t, s, e) \
- afr_read_subvol_get(i, t, s, e, AFR_DATA_TRANSACTION)
+#define afr_data_subvol_get(i, t, s, e, a) \
+ afr_read_subvol_get(i, t, s, e, AFR_DATA_TRANSACTION, a)
-#define afr_metadata_subvol_get(i, t, s, e) \
- afr_read_subvol_get(i, t, s, e, AFR_METADATA_TRANSACTION)
+#define afr_metadata_subvol_get(i, t, s, e, a) \
+ afr_read_subvol_get(i, t, s, e, AFR_METADATA_TRANSACTION, a)
int
afr_inode_refresh (call_frame_t *frame, xlator_t *this, inode_t *inode,
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/features/marker/src/marker-quota.c
^
|
@@ -43,6 +43,33 @@
}
int32_t
+mq_prevalidate_txn (xlator_t *this, loc_t *origin_loc, loc_t *loc)
+{
+ int32_t ret = -1;
+
+ if (origin_loc == NULL || origin_loc->inode == NULL ||
+ uuid_is_null(origin_loc->inode->gfid))
+ goto out;
+
+ loc_copy (loc, origin_loc);
+
+ if (uuid_is_null (loc->gfid))
+ uuid_copy (loc->gfid, loc->inode->gfid);
+
+ if (!loc_is_root(loc) && loc->parent == NULL) {
+ loc->parent = inode_parent (loc->inode, 0, NULL);
+ if (loc->parent == NULL) {
+ ret = -1;
+ goto out;
+ }
+ }
+
+ ret = 0;
+out:
+ return ret;
+}
+
+int32_t
mq_get_local_err (quota_local_t *local,
int32_t *val)
{
@@ -1206,12 +1233,17 @@
int32_t
-mq_set_inode_xattr (xlator_t *this, loc_t *loc)
+mq_set_inode_xattr (xlator_t *this, loc_t *origin_loc)
{
struct gf_flock lock = {0, };
quota_local_t *local = NULL;
int32_t ret = 0;
call_frame_t *frame = NULL;
+ loc_t loc = {0, };
+
+ ret = mq_prevalidate_txn (this, origin_loc, &loc);
+ if (ret < 0)
+ goto err;
frame = create_frame (this, this->ctx->pool);
if (!frame) {
@@ -1226,7 +1258,7 @@
frame->local = local;
- ret = loc_copy (&local->loc, loc);
+ ret = loc_copy (&local->loc, &loc);
if (ret < 0) {
goto err;
}
@@ -1247,7 +1279,10 @@
return 0;
err:
- QUOTA_STACK_DESTROY (frame, this);
+ if (frame)
+ QUOTA_STACK_DESTROY (frame, this);
+
+ loc_wipe (&loc);
return 0;
}
@@ -2026,18 +2061,22 @@
int
-mq_initiate_quota_txn (xlator_t *this, loc_t *loc)
+mq_initiate_quota_txn (xlator_t *this, loc_t *origin_loc)
{
int32_t ret = -1;
gf_boolean_t status = _gf_false;
quota_inode_ctx_t *ctx = NULL;
inode_contribution_t *contribution = NULL;
+ loc_t loc = {0, };
GF_VALIDATE_OR_GOTO ("marker", this, out);
- GF_VALIDATE_OR_GOTO ("marker", loc, out);
- GF_VALIDATE_OR_GOTO ("marker", loc->inode, out);
+ GF_VALIDATE_OR_GOTO ("marker", origin_loc, out);
- ret = mq_inode_ctx_get (loc->inode, this, &ctx);
+ ret = mq_prevalidate_txn (this, origin_loc, &loc);
+ if (ret < 0)
+ goto out;
+
+ ret = mq_inode_ctx_get (loc.inode, this, &ctx);
if (ret == -1) {
gf_log (this->name, GF_LOG_WARNING,
"inode ctx get failed, aborting quota txn");
@@ -2055,30 +2094,30 @@
contribution xattr wont be created and will create problems
for quota operations.
*/
- contribution = mq_get_contribution_node (loc->parent, ctx);
+ contribution = mq_get_contribution_node (loc.parent, ctx);
if (!contribution) {
- if ((loc->path && strcmp (loc->path, "/"))
- || (!uuid_is_null (loc->gfid)
- && !__is_root_gfid (loc->gfid))
- || (loc->inode && !uuid_is_null (loc->inode->gfid)
- && !__is_root_gfid (loc->inode->gfid)))
+ if ((loc.path && strcmp (loc.path, "/"))
+ || (!uuid_is_null (loc.gfid)
+ && !__is_root_gfid (loc.gfid))
+ || (loc.inode && !uuid_is_null (loc.inode->gfid)
+ && !__is_root_gfid (loc.inode->gfid)))
gf_log_callingfn (this->name, GF_LOG_TRACE,
"contribution node for the "
"path (%s) with parent (%s) "
- "not found", loc->path,
- loc->parent?
- uuid_utoa (loc->parent->gfid):
+ "not found", loc.path,
+ loc.parent?
+ uuid_utoa (loc.parent->gfid):
NULL);
- contribution = mq_add_new_contribution_node (this, ctx, loc);
+ contribution = mq_add_new_contribution_node (this, ctx, &loc);
if (!contribution) {
- if(loc->path && strcmp (loc->path, "/"))
+ if(loc.path && strcmp (loc.path, "/"))
gf_log_callingfn (this->name, GF_LOG_WARNING,
"could not allocate "
" contribution node for (%s) "
- "parent: (%s)", loc->path,
- loc->parent?
- uuid_utoa (loc->parent->gfid):
+ "parent: (%s)", loc.path,
+ loc.parent?
+ uuid_utoa (loc.parent->gfid):
NULL);
goto out;
}
@@ -2094,11 +2133,13 @@
goto out;
if (status == _gf_false) {
- mq_start_quota_txn (this, loc, ctx, contribution);
+ mq_start_quota_txn (this, &loc, ctx, contribution);
}
ret = 0;
out:
+ loc_wipe (&loc);
+
return ret;
}
@@ -2277,17 +2318,26 @@
int32_t
mq_xattr_state (xlator_t *this,
- loc_t *loc,
+ loc_t *origin_loc,
dict_t *dict,
struct iatt buf)
{
+ int ret = 0;
+ loc_t loc = {0, };
+
+ ret = mq_prevalidate_txn (this, origin_loc, &loc);
+ if (ret < 0)
+ goto out;
+
if (((buf.ia_type == IA_IFREG) && !dht_is_linkfile (&buf, dict))
|| (buf.ia_type == IA_IFLNK)) {
- mq_inspect_file_xattr (this, loc, dict, buf);
+ mq_inspect_file_xattr (this, &loc, dict, buf);
} else if (buf.ia_type == IA_IFDIR)
- mq_inspect_directory_xattr (this, loc, dict, buf);
+ mq_inspect_directory_xattr (this, &loc, dict, buf);
- return 0;
+out:
+ loc_wipe (&loc);
+ return ret;
}
int32_t
@@ -2562,7 +2612,7 @@
}
int32_t
-mq_reduce_parent_size (xlator_t *this, loc_t *loc, int64_t contri)
+mq_reduce_parent_size (xlator_t *this, loc_t *origin_loc, int64_t contri)
{
int32_t ret = -1;
struct gf_flock lock = {0,};
@@ -2570,18 +2620,23 @@
quota_local_t *local = NULL;
quota_inode_ctx_t *ctx = NULL;
inode_contribution_t *contribution = NULL;
+ loc_t loc = {0, };
GF_VALIDATE_OR_GOTO ("marker", this, out);
- GF_VALIDATE_OR_GOTO ("marker", loc, out);
+ GF_VALIDATE_OR_GOTO ("marker", origin_loc, out);
- ret = mq_inode_ctx_get (loc->inode, this, &ctx);
+ ret = mq_prevalidate_txn (this, origin_loc, &loc);
if (ret < 0)
goto out;
- contribution = mq_get_contribution_node (loc->parent, ctx);
+ ret = mq_inode_ctx_get (loc.inode, this, &ctx);
+ if (ret < 0)
+ goto out;
+
+ contribution = mq_get_contribution_node (loc.parent, ctx);
if (contribution == NULL) {
gf_log_callingfn (this->name, GF_LOG_WARNING, "contribution for"
- " the node %s is NULL", loc->path);
+ " the node %s is NULL", loc.path);
goto out;
}
@@ -2603,23 +2658,23 @@
if (local->size == 0) {
gf_log_callingfn (this->name, GF_LOG_TRACE,
- "local->size is 0 " "path: (%s)", loc->path);
+ "local->size is 0 " "path: (%s)", loc.path);
ret = 0;
goto out;
}
- ret = mq_loc_copy (&local->loc, loc);
+ ret = mq_loc_copy (&local->loc, &loc);
if (ret < 0)
goto out;
local->ctx = ctx;
local->contri = contribution;
- ret = mq_inode_loc_fill (NULL, loc->parent, &local->parent_loc);
+ ret = mq_inode_loc_fill (NULL, loc.parent, &local->parent_loc);
if (ret < 0) {
gf_log_callingfn (this->name, GF_LOG_INFO, "building parent loc"
" failed. (gfid: %s)",
- uuid_utoa (loc->parent->gfid));
+ uuid_utoa (loc.parent->gfid));
goto out;
}
@@ -2657,6 +2712,8 @@
if (local != NULL)
mq_local_unref (this, local);
+ loc_wipe (&loc);
+
return ret;
}
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/features/marker/src/marker.c
^
|
@@ -1575,6 +1575,9 @@
lock.l_type = F_WRLCK;
lock.l_whence = SEEK_SET;
+ if (is_lk_owner_null (&frame->root->lk_owner))
+ set_lk_owner_from_ptr (&frame->root->lk_owner, frame->root);
+
STACK_WIND (frame,
marker_rename_inodelk_cbk,
FIRST_CHILD(this),
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/features/quota/src/quota.c
^
|
@@ -837,8 +837,8 @@
list_for_each_entry (entry, parents, next) {
parent = inode_find (inode->table, entry->par);
-
quota_check_limit (frame, parent, this, NULL, NULL);
+ inode_unref (parent);
}
out:
@@ -3819,16 +3819,9 @@
quota_local_t *local = frame->local;
int ret = -1;
- stub = fop_statfs_stub (frame, quota_statfs_helper,
- &local->loc, local->xdata);
- if (!stub)
- goto err;
-
LOCK (&local->lock);
{
local->inode = inode_ref (inode);
- local->link_count = 1;
- local->stub = stub;
}
UNLOCK (&local->lock);
@@ -3836,12 +3829,6 @@
quota_statfs_validate_cbk);
if (0 > ret)
quota_handle_validate_error (local, -1, -ret);
- return;
-
-err:
- QUOTA_STACK_UNWIND (statfs, frame, -1, ENOMEM, NULL, NULL);
-
- return;
}
void
@@ -3908,6 +3895,7 @@
int8_t ignore_deem_statfs = 0;
quota_priv_t *priv = NULL;
quota_local_t *local = NULL;
+ call_stub_t *stub = NULL;
priv = this->private;
GF_ASSERT (loc);
@@ -3927,6 +3915,7 @@
op_errno = ENOMEM;
goto err;
}
+ frame->local = local;
ret = loc_copy (&local->loc, loc);
if (-1 == ret) {
@@ -3937,9 +3926,19 @@
if (xdata)
local->xdata = dict_ref (xdata);
- local->link_count = 1;
+ stub = fop_statfs_stub (frame, quota_statfs_helper,
+ &local->loc, local->xdata);
+ if (!stub) {
+ op_errno = ENOMEM;
+ goto err;
+ }
- frame->local = local;
+ LOCK (&local->lock);
+ {
+ local->link_count = 1;
+ local->stub = stub;
+ }
+ UNLOCK (&local->lock);
quota_get_limit_dir (frame, loc->inode, this);
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/mgmt/glusterd/src/glusterd-syncop.c
^
|
@@ -1078,7 +1078,7 @@
int
gd_lock_op_phase (glusterd_conf_t *conf, glusterd_op_t op, dict_t *op_ctx,
char **op_errstr, int npeers, uuid_t txn_id,
- struct list_head *peers)
+ struct list_head *peers, gf_boolean_t cluster_lock)
{
int ret = -1;
int peer_cnt = 0;
@@ -1096,7 +1096,7 @@
synctask_barrier_init((&args));
peer_cnt = 0;
list_for_each_local_xaction_peers (peerinfo, peers) {
- if (conf->op_version < GD_OP_VERSION_3_6_0) {
+ if (cluster_lock) {
/* Reset lock status */
peerinfo->locked = _gf_false;
gd_syncop_mgmt_lock (peerinfo, &args,
@@ -1333,7 +1333,8 @@
gd_unlock_op_phase (glusterd_conf_t *conf, glusterd_op_t op, int *op_ret,
rpcsvc_request_t *req, dict_t *op_ctx, char *op_errstr,
int npeers, char *volname, gf_boolean_t is_acquired,
- uuid_t txn_id, struct list_head *peers)
+ uuid_t txn_id, struct list_head *peers,
+ gf_boolean_t cluster_lock)
{
glusterd_peerinfo_t *peerinfo = NULL;
uuid_t tmp_uuid = {0};
@@ -1360,7 +1361,7 @@
synctask_barrier_init((&args));
peer_cnt = 0;
- if (conf->op_version < GD_OP_VERSION_3_6_0) {
+ if (cluster_lock) {
list_for_each_local_xaction_peers (peerinfo, peers) {
/* Only unlock peers that were locked */
if (peerinfo->locked) {
@@ -1403,7 +1404,7 @@
* and clear the op */
glusterd_op_clear_op (op);
- if (conf->op_version < GD_OP_VERSION_3_6_0)
+ if (cluster_lock)
glusterd_unlock (MY_UUID);
else {
if (volname) {
@@ -1531,6 +1532,7 @@
uuid_t *txn_id = NULL;
struct list_head xaction_peers = {0,};
glusterd_op_info_t txn_opinfo = {{0},};
+ gf_boolean_t cluster_lock = _gf_false;
this = THIS;
GF_ASSERT (this);
@@ -1576,8 +1578,11 @@
goto out;
}
+ if (conf->op_version < GD_OP_VERSION_3_6_0)
+ cluster_lock = _gf_true;
+
/* Based on the op_version, acquire a cluster or mgmt_v3 lock */
- if (conf->op_version < GD_OP_VERSION_3_6_0) {
+ if (cluster_lock) {
ret = glusterd_lock (MY_UUID);
if (ret) {
gf_log (this->name, GF_LOG_ERROR,
@@ -1632,9 +1637,10 @@
/* If no volname is given as a part of the command, locks will
* not be held */
- if (volname || (conf->op_version < GD_OP_VERSION_3_6_0)) {
+ if (volname || cluster_lock) {
ret = gd_lock_op_phase (conf, op, op_ctx, &op_errstr,
- npeers, *txn_id, &xaction_peers);
+ npeers, *txn_id, &xaction_peers,
+ cluster_lock);
if (ret) {
gf_log (this->name, GF_LOG_ERROR,
"Locking Peers Failed.");
@@ -1673,7 +1679,7 @@
op_ctx, op_errstr,
npeers, volname,
is_acquired, *txn_id,
- &xaction_peers);
+ &xaction_peers, cluster_lock);
/* Clearing the transaction opinfo */
ret = glusterd_clear_txn_opinfo (txn_id);
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/mgmt/glusterd/src/glusterd-utils.c
^
|
@@ -7353,30 +7353,35 @@
for (fs = glusterd_fs ; fs->fs_type_name; fs++) {
if (strcmp (fs_name, fs->fs_type_name) == 0) {
- snprintf (fs_tool_name, sizeof fs_tool_name,
+ snprintf (fs_tool_name, sizeof (fs_tool_name),
"/usr/sbin/%s", fs->fs_tool_name);
if (access (fs_tool_name, R_OK|X_OK) == 0)
runner_add_arg (&runner, fs_tool_name);
else {
- snprintf (fs_tool_name, sizeof fs_tool_name,
+ snprintf (fs_tool_name, sizeof (fs_tool_name),
"/sbin/%s", fs->fs_tool_name);
if (access (fs_tool_name, R_OK|X_OK) == 0)
runner_add_arg (&runner, fs_tool_name);
}
- if (runner.argv[0]) {
- if (fs->fs_tool_arg)
- runner_add_arg (&runner, fs->fs_tool_arg);
- }
break;
}
}
+ if (runner.argv[0]) {
+ if (fs->fs_tool_arg)
+ runner_add_arg (&runner, fs->fs_tool_arg);
+ runner_add_arg (&runner, device);
+ } else {
+ gf_log (THIS->name, GF_LOG_ERROR, "could not find %s to get"
+ "inode size for %s (%s): %s package missing?",
+ fs->fs_tool_name, device, fs_name, fs->fs_tool_pkg);
+ goto out;
+ }
+
ret = runner_start (&runner);
if (ret) {
- gf_log (THIS->name, GF_LOG_ERROR, "could not get inode "
- "size for %s : %s package missing", fs_name,
- ((strcmp (fs_name, "xfs")) ?
- "e2fsprogs" : "xfsprogs"));
+ gf_log (THIS->name, GF_LOG_ERROR, "failed to execute "
+ "\"%s\": %s", fs->fs_tool_name, strerror (errno));
/*
* Runner_start might return an error after the child has
* been forked, e.g. if the program isn't there. In that
@@ -7384,7 +7389,7 @@
* child and free resources. Fortunately, that seems to
* be harmless for other kinds of failures.
*/
- (void) runner_end(&runner);
+ (void) runner_end (&runner);
goto out;
}
@@ -7431,7 +7436,7 @@
ret = dict_set_dynstr_with_alloc (dict, key, cur_word);
- out:
+out:
if (ret)
gf_log (THIS->name, GF_LOG_ERROR, "failed to get inode size");
return ret;
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/mount/fuse/src/fuse-bridge.c
^
|
@@ -5448,6 +5448,8 @@
goto cleanup_exit;
}
+ GF_OPTION_INIT("resolve-gids", priv->resolve_gids, bool, cleanup_exit);
+
/* default values seemed to work fine during testing */
GF_OPTION_INIT ("background-qlen", priv->background_qlen, int32,
cleanup_exit);
@@ -5675,6 +5677,14 @@
.type = GF_OPTION_TYPE_INT,
.default_value = "2"
},
+ { .key = {"resolve-gids"},
+ .type = GF_OPTION_TYPE_BOOL,
+ .default_value = "false"
+ },
+ { .key = {"resolve-gids"},
+ .type = GF_OPTION_TYPE_BOOL,
+ .default_value = "false"
+ },
{ .key = {"acl"},
.type = GF_OPTION_TYPE_BOOL,
.default_value = "false"
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/mount/fuse/src/fuse-bridge.h
^
|
@@ -128,6 +128,9 @@
/* for using fuse-kernel readdirp*/
gf_boolean_t use_readdirp;
+
+ /* resolve gid with getgrouplist() instead of /proc/%d/status */
+ gf_boolean_t resolve_gids;
};
typedef struct fuse_private fuse_private_t;
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/mount/fuse/src/fuse-helpers.c
^
|
@@ -20,6 +20,8 @@
#elif defined(CTL_KERN)
#include <sys/sysctl.h>
#endif
+#include <pwd.h>
+#include <grp.h>
#include "fuse-bridge.h"
@@ -146,51 +148,87 @@
frame_fill_groups (call_frame_t *frame)
{
#if defined(GF_LINUX_HOST_OS)
- char filename[32];
- char line[4096];
- char *ptr = NULL;
- FILE *fp = NULL;
- int idx = 0;
- long int id = 0;
- char *saveptr = NULL;
- char *endptr = NULL;
- int ret = 0;
-
- ret = snprintf (filename, sizeof filename, "/proc/%d/status",
- frame->root->pid);
- if (ret >= sizeof filename)
- goto out;
-
- fp = fopen (filename, "r");
- if (!fp)
- goto out;
-
- if (call_stack_alloc_groups (frame->root, FUSE_MAX_AUX_GROUPS) != 0)
- goto out;
-
- while ((ptr = fgets (line, sizeof line, fp))) {
- if (strncmp (ptr, "Groups:", 7) != 0)
- continue;
-
- ptr = line + 8;
-
- for (ptr = strtok_r (ptr, " \t\r\n", &saveptr);
- ptr;
- ptr = strtok_r (NULL, " \t\r\n", &saveptr)) {
- errno = 0;
- id = strtol (ptr, &endptr, 0);
- if (errno == ERANGE)
- break;
- if (!endptr || *endptr)
- break;
- frame->root->groups[idx++] = id;
- if (idx == FUSE_MAX_AUX_GROUPS)
- break;
+ xlator_t *this = frame->this;
+ fuse_private_t *priv = this->private;
+ char filename[32];
+ char line[4096];
+ char *ptr = NULL;
+ FILE *fp = NULL;
+ int idx = 0;
+ long int id = 0;
+ char *saveptr = NULL;
+ char *endptr = NULL;
+ int ret = 0;
+ int ngroups = FUSE_MAX_AUX_GROUPS;
+ gid_t mygroups[GF_MAX_AUX_GROUPS];
+
+ if (priv->resolve_gids) {
+ struct passwd pwent;
+ char mystrs[1024];
+ struct passwd *result;
+
+ if (getpwuid_r (frame->root->uid, &pwent, mystrs,
+ sizeof(mystrs), &result) != 0) {
+ gf_log (this->name, GF_LOG_ERROR, "getpwuid_r(%u) "
+ "failed", frame->root->uid);
+ return;
}
- frame->root->ngrps = idx;
- break;
+ ngroups = GF_MAX_AUX_GROUPS;
+ if (getgrouplist (result->pw_name, frame->root->gid, mygroups,
+ &ngroups) == -1) {
+ gf_log (this->name, GF_LOG_ERROR, "could not map %s to "
+ "group list (ngroups %d, max %d)",
+ result->pw_name, ngroups, GF_MAX_AUX_GROUPS);
+ return;
+ }
+
+ if (call_stack_alloc_groups (frame->root, ngroups) != 0)
+ goto out;
+
+ /* Copy data to the frame. */
+ for (idx = 0; idx < ngroups; ++idx) {
+ frame->root->groups[idx] = mygroups[idx];
+ }
+ frame->root->ngrps = ngroups;
+ } else {
+ ret = snprintf (filename, sizeof filename, "/proc/%d/status",
+ frame->root->pid);
+ if (ret >= sizeof filename)
+ goto out;
+
+ fp = fopen (filename, "r");
+ if (!fp)
+ goto out;
+
+ if (call_stack_alloc_groups (frame->root, ngroups) != 0)
+ goto out;
+
+ while ((ptr = fgets (line, sizeof line, fp))) {
+ if (strncmp (ptr, "Groups:", 7) != 0)
+ continue;
+
+ ptr = line + 8;
+
+ for (ptr = strtok_r (ptr, " \t\r\n", &saveptr);
+ ptr;
+ ptr = strtok_r (NULL, " \t\r\n", &saveptr)) {
+ errno = 0;
+ id = strtol (ptr, &endptr, 0);
+ if (errno == ERANGE)
+ break;
+ if (!endptr || *endptr)
+ break;
+ frame->root->groups[idx++] = id;
+ if (idx == FUSE_MAX_AUX_GROUPS)
+ break;
+ }
+
+ frame->root->ngrps = idx;
+ break;
+ }
}
+
out:
if (fp)
fclose (fp);
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/mount/fuse/utils/mount.glusterfs.in
^
|
@@ -177,6 +177,10 @@
cmd_line=$(echo "$cmd_line --aux-gfid-mount");
fi
+ if [ -n "$resolve_gids" ]; then
+ cmd_line=$(echo "$cmd_line --resolve-gids");
+ fi
+
if [ -n "$no_root_squash" ]; then
cmd_line=$(echo "$cmd_line --no-root-squash");
fi
@@ -501,6 +505,9 @@
aux_gfid_mount=1
fi
;;
+ "resolve-gids")
+ resolve_gids=1
+ ;;
# "mount -t glusterfs" sends this, but it's useless.
"rw")
;;
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/nfs/server/src/mount3.c
^
|
@@ -351,6 +351,25 @@
gf_store_unlink_tmppath (sh);
}
+static gf_boolean_t
+mount_open_rmtab (const char *rmtab, gf_store_handle_t **sh)
+{
+ int ret = -1;
+
+ /* updating the rmtab is disabled, use in-memory only */
+ if (!rmtab || rmtab[0] == '\0')
+ return _gf_false;
+
+ ret = gf_store_handle_new (rmtab, sh);
+ if (ret) {
+ gf_log (GF_MNT, GF_LOG_WARNING, "Failed to open '%s'", rmtab);
+ return _gf_false;
+ }
+
+ return _gf_true;
+}
+
+
/* Read the rmtab into a clean ms->mountlist.
*/
static void
@@ -358,16 +377,13 @@
{
gf_store_handle_t *sh = NULL;
struct nfs_state *nfs = NULL;
- int ret;
+ gf_boolean_t read_rmtab = _gf_false;
nfs = (struct nfs_state *)ms->nfsx->private;
- ret = gf_store_handle_new (nfs->rmtab, &sh);
- if (ret) {
- gf_log (GF_MNT, GF_LOG_WARNING, "Failed to open '%s'",
- nfs->rmtab);
+ read_rmtab = mount_open_rmtab (nfs->rmtab, &sh);
+ if (!read_rmtab)
return;
- }
if (gf_store_lock (sh)) {
gf_log (GF_MNT, GF_LOG_WARNING, "Failed to lock '%s'",
@@ -387,6 +403,7 @@
* The rmtab could be empty, or it can exists and have been updated by a
* different storage server without our knowing.
*
+ * 0. if opening the nfs->rmtab fails, return gracefully
* 1. takes the store_handle lock on the current rmtab
* - blocks if an other storage server rewrites the rmtab at the same time
* 2. [if new_rmtab] takes the store_handle lock on the new rmtab
@@ -405,17 +422,15 @@
struct nfs_state *nfs = NULL;
int ret;
char *rmtab = NULL;
+ gf_boolean_t got_old_rmtab = _gf_false;
nfs = (struct nfs_state *)ms->nfsx->private;
- ret = gf_store_handle_new (nfs->rmtab, &sh);
- if (ret) {
- gf_log (GF_MNT, GF_LOG_WARNING, "Failed to open '%s'",
- nfs->rmtab);
+ got_old_rmtab = mount_open_rmtab (nfs->rmtab, &sh);
+ if (!got_old_rmtab && !new_rmtab)
return;
- }
- if (gf_store_lock (sh)) {
+ if (got_old_rmtab && gf_store_lock (sh)) {
gf_log (GF_MNT, GF_LOG_WARNING, "Not rewriting '%s'",
nfs->rmtab);
goto free_sh;
@@ -437,7 +452,8 @@
}
/* always read the currently used rmtab */
- __mount_read_rmtab (sh, &ms->mountlist, _gf_true);
+ if (got_old_rmtab)
+ __mount_read_rmtab (sh, &ms->mountlist, _gf_true);
if (new_rmtab) {
/* read the new rmtab and write changes to the new location */
@@ -464,9 +480,11 @@
if (new_rmtab)
gf_store_handle_destroy (nsh);
unlock_sh:
- gf_store_unlock (sh);
+ if (got_old_rmtab)
+ gf_store_unlock (sh);
free_sh:
- gf_store_handle_destroy (sh);
+ if (got_old_rmtab)
+ gf_store_handle_destroy (sh);
}
/* Add a new NFS-client to the ms->mountlist and update the rmtab if we can.
@@ -490,6 +508,7 @@
char *colon = NULL;
struct nfs_state *nfs = NULL;
gf_store_handle_t *sh = NULL;
+ gf_boolean_t update_rmtab = _gf_false;
if ((!ms) || (!req) || (!expname))
return -1;
@@ -501,12 +520,7 @@
nfs = (struct nfs_state *)ms->nfsx->private;
- ret = gf_store_handle_new (nfs->rmtab, &sh);
- if (ret) {
- gf_log (GF_MNT, GF_LOG_WARNING, "Failed to open '%s'",
- nfs->rmtab);
- goto free_err;
- }
+ update_rmtab = mount_open_rmtab (nfs->rmtab, &sh);
strncpy (me->exname, expname, MNTPATHLEN);
@@ -516,7 +530,7 @@
*/
ret = rpcsvc_transport_peername (req->trans, me->hostname, MNTPATHLEN);
if (ret == -1)
- goto free_err2;
+ goto free_err;
colon = strrchr (me->hostname, ':');
if (colon) {
@@ -525,10 +539,10 @@
LOCK (&ms->mountlock);
{
/* in case locking fails, we just don't write the rmtab */
- if (gf_store_lock (sh)) {
+ if (update_rmtab && gf_store_lock (sh)) {
gf_log (GF_MNT, GF_LOG_WARNING, "Failed to lock '%s'"
", changes will not be written", nfs->rmtab);
- } else {
+ } else if (update_rmtab) {
__mount_read_rmtab (sh, &ms->mountlist, _gf_false);
}
@@ -543,19 +557,19 @@
list_add_tail (&me->mlist, &ms->mountlist);
/* only write the rmtab in case it was locked */
- if (gf_store_locked_local (sh))
+ if (update_rmtab && gf_store_locked_local (sh))
__mount_rewrite_rmtab (ms, sh);
}
dont_add:
- if (gf_store_locked_local (sh))
+ if (update_rmtab && gf_store_locked_local (sh))
gf_store_unlock (sh);
UNLOCK (&ms->mountlock);
-free_err2:
- gf_store_handle_destroy (sh);
-
free_err:
+ if (update_rmtab)
+ gf_store_handle_destroy (sh);
+
if (ret == -1)
GF_FREE (me);
@@ -882,6 +896,21 @@
return ret;
}
+int __mnt3_resolve_subdir (mnt3_resolve_t *mres);
+
+/*
+ * Per the AFR2 comments, this function performs the "fresh" lookup
+ * by deleting the inode from cache and calling __mnt3_resolve_subdir
+ * again.
+ */
+int __mnt3_fresh_lookup (mnt3_resolve_t *mres) {
+ inode_unlink (mres->resolveloc.inode,
+ mres->resolveloc.parent, mres->resolveloc.name);
+ strncpy (mres->remainingdir, mres->resolveloc.path,
+ strlen(mres->resolveloc.path));
+ nfs_loc_wipe (&mres->resolveloc);
+ return __mnt3_resolve_subdir (mres);
+}
int32_t
mnt3_resolve_subdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
@@ -901,7 +930,11 @@
mres = frame->local;
mntxl = (xlator_t *)cookie;
- if (op_ret == -1) {
+ if (op_ret == -1 && op_errno == ESTALE) {
+ /* Nuke inode from cache and try the LOOKUP
+ * request again. */
+ return __mnt3_fresh_lookup (mres);
+ } else if (op_ret == -1) {
gf_log (GF_NFS, GF_LOG_ERROR, "path=%s (%s)",
mres->resolveloc.path, strerror (op_errno));
mntstat = mnt3svc_errno_to_mnterr (op_errno);
@@ -1609,27 +1642,25 @@
int ret = -1;
gf_store_handle_t *sh = NULL;
struct nfs_state *nfs = NULL;
+ gf_boolean_t update_rmtab = _gf_false;
if ((!ms) || (!dirpath) || (!hostname))
return -1;
nfs = (struct nfs_state *)ms->nfsx->private;
- ret = gf_store_handle_new (nfs->rmtab, &sh);
- if (ret) {
- gf_log (GF_MNT, GF_LOG_WARNING, "Failed to open '%s'",
- nfs->rmtab);
- return 0;
- }
-
- ret = gf_store_lock (sh);
- if (ret) {
- goto out_free;
+ update_rmtab = mount_open_rmtab (nfs->rmtab, &sh);
+ if (update_rmtab) {
+ ret = gf_store_lock (sh);
+ if (ret)
+ goto out_free;
}
LOCK (&ms->mountlock);
{
- __mount_read_rmtab (sh, &ms->mountlist, _gf_false);
+ if (update_rmtab)
+ __mount_read_rmtab (sh, &ms->mountlist, _gf_false);
+
if (list_empty (&ms->mountlist)) {
ret = 0;
goto out_unlock;
@@ -1661,13 +1692,20 @@
list_del (&me->mlist);
GF_FREE (me);
- __mount_rewrite_rmtab (ms, sh);
+
+ if (update_rmtab)
+ __mount_rewrite_rmtab (ms, sh);
}
out_unlock:
UNLOCK (&ms->mountlock);
- gf_store_unlock (sh);
+
+ if (update_rmtab)
+ gf_store_unlock (sh);
+
out_free:
- gf_store_handle_destroy (sh);
+ if (update_rmtab)
+ gf_store_handle_destroy (sh);
+
return ret;
}
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/nfs/server/src/nfs.c
^
|
@@ -881,6 +881,12 @@
gf_log (GF_NFS, GF_LOG_ERROR, "Failed to parse dict");
goto free_foppool;
}
+
+ /* check if writing the rmtab is disabled*/
+ if (nfs->rmtab && strcmp ("/-", nfs->rmtab) == 0) {
+ GF_FREE (nfs->rmtab);
+ nfs->rmtab = NULL;
+ }
}
/* support both options rpc-auth.ports.insecure and
@@ -1109,7 +1115,13 @@
}
gf_path_strip_trailing_slashes (rmtab);
}
- if (strcmp (nfs->rmtab, rmtab) != 0) {
+ /* check if writing the rmtab is disabled*/
+ if (strcmp ("/-", rmtab) == 0) {
+ GF_FREE (nfs->rmtab);
+ nfs->rmtab = NULL;
+ gf_log (GF_NFS, GF_LOG_INFO,
+ "Disabled writing of nfs.mount-rmtab");
+ } else if (!nfs->rmtab || strcmp (nfs->rmtab, rmtab) != 0) {
mount_rewrite_rmtab (nfs->mstate, rmtab);
gf_log (GF_NFS, GF_LOG_INFO,
"Reconfigured nfs.mount-rmtab path: %s",
@@ -1857,7 +1869,8 @@
"list all the NFS-clients that have connected "
"through the MOUNT protocol. If this is on shared "
"storage, all GlusterFS servers will update and "
- "output (with 'showmount') the same list."
+ "output (with 'showmount') the same list. Set to "
+ "\"/-\" to disable."
},
{ .key = {OPT_SERVER_RPC_STATD},
.type = GF_OPTION_TYPE_PATH,
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/nfs/server/src/nfs3.c
^
|
@@ -3030,7 +3030,7 @@
}
-int
+static int
nfs3_mknod_reply (rpcsvc_request_t *req, nfsstat3 stat, struct nfs3_fh *fh,
struct iatt *buf, struct iatt *preparent,
struct iatt *postparent)
@@ -3126,7 +3126,7 @@
}
-int
+static int
nfs3_mknod_device (nfs3_call_state_t *cs)
{
int ret = -EFAULT;
@@ -3157,12 +3157,11 @@
}
-int
-nfs3_mknod_fifo (nfs3_call_state_t *cs)
+static int
+nfs3_mknod_fifo (nfs3_call_state_t *cs, mode_t mode)
{
int ret = -EFAULT;
nfs_user_t nfu = {0, };
- mode_t mode = S_IFIFO;
if (!cs)
return ret;
@@ -3181,7 +3180,7 @@
}
-int
+static int
nfs3_mknod_resume (void *carg)
{
nfsstat3 stat = NFS3ERR_SERVERFAULT;
@@ -3200,8 +3199,10 @@
ret = nfs3_mknod_device (cs);
break;
case NF3SOCK:
+ ret = nfs3_mknod_fifo (cs, S_IFSOCK);
+ break;
case NF3FIFO:
- ret = nfs3_mknod_fifo (cs);
+ ret = nfs3_mknod_fifo (cs, S_IFIFO);
break;
default:
ret = -EBADF;
|
[-]
[+]
|
Changed |
glusterfs-3.6.6.tar.gz/xlators/storage/posix/src/posix.c
^
|
@@ -4538,9 +4538,10 @@
array = NULL;
}
- array = NULL;
-
out:
+ if (array)
+ GF_FREE (array);
+
return op_ret;
}
|