]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
vol: Handle large volume IDs in VLockFile
authorAndrew Deason <adeason@sinenomine.net>
Thu, 10 Mar 2011 23:59:39 +0000 (17:59 -0600)
committerDerrick Brashear <shadow@dementix.org>
Wed, 2 Nov 2011 02:32:36 +0000 (19:32 -0700)
VLockVolumeByIdNB currently cannot handle volume IDs larger than
2^31-1. Fix this by using struct flock64, F_SETLKW64, and F_SETLK64 in
the VLockFile functions where possible.

Thanks to Simon Wilkinson for pointing out F_SETLK64.

Reviewed-on: http://gerrit.openafs.org/4198
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
(cherry picked from commit 85edec7105dd653ed1d8046b69b8262281e97bba)

Change-Id: Iee09a8bc4a0aabbd12fe156940fa61d6947642e8
Reviewed-on: http://gerrit.openafs.org/5758
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: Derrick Brashear <shadow@dementix.org>
src/vol/vutil.c

index 261fd12cda7d702651c059d04fb25bbc80c691a1..6f7f7ce137d67c6d289d2647360388a69fbdfbce 100644 (file)
 
 #define nFILES (sizeof (stuff)/sizeof(struct stuff))
 
+#ifndef AFS_NT40_ENV
+# ifdef O_LARGEFILE
+#  define AFS_SETLKW   F_SETLKW64
+#  define AFS_SETLK    F_SETLK64
+#  define afs_st_flock flock64
+# else
+#  define AFS_SETLKW   F_SETLKW
+#  define AFS_SETLK    F_SETLK
+#  define afs_st_flock flock
+# endif
+#endif
+
 /* Note:  the volume creation functions herein leave the destroyMe flag in the
    volume header ON:  this means that the volumes will not be attached by the
    file server and WILL BE DESTROYED the next time a system salvage is performed */
@@ -971,14 +983,14 @@ static_inline int
 _VLockFd(int fd, afs_uint32 offset, int locktype, int nonblock)
 {
     int l_type = F_WRLCK;
-    int cmd = F_SETLKW;
-    struct flock sf;
+    int cmd = AFS_SETLKW;
+    struct afs_st_flock sf;
 
     if (locktype == READ_LOCK) {
        l_type = F_RDLCK;
     }
     if (nonblock) {
-       cmd = F_SETLK;
+       cmd = AFS_SETLK;
     }
 
     sf.l_start = offset;
@@ -1035,14 +1047,14 @@ _VCloseFd(int fd)
 static_inline void
 _VUnlockFd(int fd, afs_uint32 offset)
 {
-    struct flock sf;
+    struct afs_st_flock sf;
 
     sf.l_start = offset;
     sf.l_len = 1;
     sf.l_type = F_UNLCK;
     sf.l_whence = SEEK_SET;
 
-    if (fcntl(fd, F_SETLK, &sf)) {
+    if (fcntl(fd, AFS_SETLK, &sf)) {
        Log("_VUnlockFd: fcntl failed with error %d when trying to unlock "
            "fd %d\n", errno, fd);
     }