| [2337] | 1 | From 53774c945e91ea344cbe51c9fafae8acf711f558 Mon Sep 17 00:00:00 2001 |
|---|
| 2 | From: Marc Dionne <marc.c.dionne@gmail.com> |
|---|
| 3 | Date: Mon, 28 May 2012 21:43:12 -0400 |
|---|
| 4 | Subject: [PATCH 01/12] Linux 3.4: replace end_writeback with clear_inode |
|---|
| 5 | |
|---|
| 6 | end_writeback() is renamed to clear_inode(). Add a configure test |
|---|
| 7 | and cope. |
|---|
| 8 | |
|---|
| 9 | Change-Id: Icaf5b6b54d0ee377fabcf0b295d690eaa6b4be5e |
|---|
| 10 | Reviewed-on: http://gerrit.openafs.org/7503 |
|---|
| 11 | Reviewed-by: Derrick Brashear <shadow@dementix.org> |
|---|
| 12 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 13 | (cherry picked from commit 2b33384a4a7b88842281021129ffccc837d91d36) |
|---|
| 14 | --- |
|---|
| 15 | acinclude.m4 | 3 +++ |
|---|
| 16 | src/afs/LINUX/osi_vfsops.c | 4 ++++ |
|---|
| 17 | 2 files changed, 7 insertions(+) |
|---|
| 18 | |
|---|
| 19 | diff --git a/acinclude.m4 b/acinclude.m4 |
|---|
| 20 | index 6e2c9ae..c14b581 100644 |
|---|
| 21 | --- a/acinclude.m4 |
|---|
| 22 | +++ b/acinclude.m4 |
|---|
| 23 | @@ -840,6 +840,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) |
|---|
| 24 | #include <linux/page-flags.h>], |
|---|
| 25 | [struct page *_page; |
|---|
| 26 | int bchecked = PageFsMisc(_page);]) |
|---|
| 27 | + AC_CHECK_LINUX_FUNC([clear_inode], |
|---|
| 28 | + [#include <linux/fs.h>], |
|---|
| 29 | + [clear_inode(NULL);]) |
|---|
| 30 | AC_CHECK_LINUX_FUNC([current_kernel_time], |
|---|
| 31 | [#include <linux/time.h>], |
|---|
| 32 | [struct timespec s; |
|---|
| 33 | diff --git a/src/afs/LINUX/osi_vfsops.c b/src/afs/LINUX/osi_vfsops.c |
|---|
| 34 | index a6be1b3..bc951a2 100644 |
|---|
| 35 | --- a/src/afs/LINUX/osi_vfsops.c |
|---|
| 36 | +++ b/src/afs/LINUX/osi_vfsops.c |
|---|
| 37 | @@ -284,7 +284,11 @@ afs_evict_inode(struct inode *ip) |
|---|
| 38 | osi_Panic("inode freed while still hashed"); |
|---|
| 39 | |
|---|
| 40 | truncate_inode_pages(&ip->i_data, 0); |
|---|
| 41 | +#if defined(HAVE_LINUX_CLEAR_INODE) |
|---|
| 42 | + clear_inode(ip); |
|---|
| 43 | +#else |
|---|
| 44 | end_writeback(ip); |
|---|
| 45 | +#endif |
|---|
| 46 | |
|---|
| 47 | #if !defined(STRUCT_SUPER_OPERATIONS_HAS_ALLOC_INODE) |
|---|
| 48 | afs_osi_Free(ip->u.generic_ip, sizeof(struct vcache)); |
|---|
| 49 | -- |
|---|
| 50 | 1.8.0 |
|---|
| 51 | |
|---|
| 52 | |
|---|
| 53 | From 235dee4c449bb5d5307f9b14d5effa4509d58efc Mon Sep 17 00:00:00 2001 |
|---|
| 54 | From: Marc Dionne <marc.c.dionne@gmail.com> |
|---|
| 55 | Date: Sat, 2 Jun 2012 21:35:53 -0400 |
|---|
| 56 | Subject: [PATCH 02/12] Linux 3.5: encode_fh API change |
|---|
| 57 | |
|---|
| 58 | The encode_fh export operation now expects two inode arguments |
|---|
| 59 | instead of a dentry and a "connectable" flag. Use the inode of |
|---|
| 60 | the dentry we're interested in, and NULL as the parent inode which |
|---|
| 61 | is the same as passing a 0 flag in the previous API. |
|---|
| 62 | |
|---|
| 63 | Change-Id: I05cf146fb2a4bacdca20a9f108d04ccb11530804 |
|---|
| 64 | Reviewed-on: http://gerrit.openafs.org/7523 |
|---|
| 65 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 66 | Reviewed-by: Derrick Brashear <shadow@dementix.org> |
|---|
| 67 | (cherry picked from commit 5227148ae17949705487ea673d558ebfe143e635) |
|---|
| 68 | --- |
|---|
| 69 | acinclude.m4 | 1 + |
|---|
| 70 | src/afs/LINUX/osi_compat.h | 4 ++++ |
|---|
| 71 | src/cf/linux-test4.m4 | 14 ++++++++++++++ |
|---|
| 72 | 3 files changed, 19 insertions(+) |
|---|
| 73 | |
|---|
| 74 | diff --git a/acinclude.m4 b/acinclude.m4 |
|---|
| 75 | index c14b581..25484cf 100644 |
|---|
| 76 | --- a/acinclude.m4 |
|---|
| 77 | +++ b/acinclude.m4 |
|---|
| 78 | @@ -958,6 +958,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) |
|---|
| 79 | LINUX_D_COUNT_IS_INT |
|---|
| 80 | LINUX_IOP_MKDIR_TAKES_UMODE_T |
|---|
| 81 | LINUX_IOP_CREATE_TAKES_UMODE_T |
|---|
| 82 | + LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES |
|---|
| 83 | |
|---|
| 84 | dnl If we are guaranteed that keyrings will work - that is |
|---|
| 85 | dnl a) The kernel has keyrings enabled |
|---|
| 86 | diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h |
|---|
| 87 | index b94295c..4c7c261 100644 |
|---|
| 88 | --- a/src/afs/LINUX/osi_compat.h |
|---|
| 89 | +++ b/src/afs/LINUX/osi_compat.h |
|---|
| 90 | @@ -333,7 +333,11 @@ afs_get_dentry_from_fh(struct super_block *afs_cacheSBp, afs_dcache_id_t *ainode |
|---|
| 91 | static inline int |
|---|
| 92 | afs_get_fh_from_dentry(struct dentry *dp, afs_ufs_dcache_id_t *ainode, int *max_lenp) { |
|---|
| 93 | if (dp->d_sb->s_export_op->encode_fh) |
|---|
| 94 | +#if defined(EXPORT_OP_ENCODE_FH_TAKES_INODES) |
|---|
| 95 | + return dp->d_sb->s_export_op->encode_fh(dp->d_inode, &ainode->raw[0], max_lenp, NULL); |
|---|
| 96 | +#else |
|---|
| 97 | return dp->d_sb->s_export_op->encode_fh(dp, &ainode->raw[0], max_lenp, 0); |
|---|
| 98 | +#endif |
|---|
| 99 | #if defined(NEW_EXPORT_OPS) |
|---|
| 100 | /* If fs doesn't provide an encode_fh method, assume the default INO32 type */ |
|---|
| 101 | *max_lenp = sizeof(struct fid)/4; |
|---|
| 102 | diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 |
|---|
| 103 | index f5e91b1..f13e97d 100644 |
|---|
| 104 | --- a/src/cf/linux-test4.m4 |
|---|
| 105 | +++ b/src/cf/linux-test4.m4 |
|---|
| 106 | @@ -661,3 +661,17 @@ AC_DEFUN([LINUX_IOP_CREATE_TAKES_UMODE_T], [ |
|---|
| 107 | [define if inode.i_op->create takes a umode_t argument], |
|---|
| 108 | [-Werror]) |
|---|
| 109 | ]) |
|---|
| 110 | + |
|---|
| 111 | + |
|---|
| 112 | +AC_DEFUN([LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES], [ |
|---|
| 113 | + AC_CHECK_LINUX_BUILD([whether export operation encode_fh takes inode arguments], |
|---|
| 114 | + [ac_cv_linux_export_op_encode_fh__takes_inodes], |
|---|
| 115 | + [#include <linux/exportfs.h>], |
|---|
| 116 | + [struct export_operations _exp_ops; |
|---|
| 117 | + int _encode_fh(struct inode *i, __u32 *fh, int *len, struct inode *p) |
|---|
| 118 | + {return 0;}; |
|---|
| 119 | + _exp_ops.encode_fh = _encode_fh;], |
|---|
| 120 | + [EXPORT_OP_ENCODE_FH_TAKES_INODES], |
|---|
| 121 | + [define if encode_fh export op takes inode arguments], |
|---|
| 122 | + [-Werror]) |
|---|
| 123 | +]) |
|---|
| 124 | -- |
|---|
| 125 | 1.8.0 |
|---|
| 126 | |
|---|
| 127 | |
|---|
| 128 | From f6093c4716d36b7499b5c84950e6ec4480745467 Mon Sep 17 00:00:00 2001 |
|---|
| 129 | From: Marc Dionne <marc.c.dionne@gmail.com> |
|---|
| 130 | Date: Sat, 2 Jun 2012 20:45:08 -0400 |
|---|
| 131 | Subject: [PATCH 03/12] afsd: include sys/resource.h in afsd_kernel.c |
|---|
| 132 | |
|---|
| 133 | With a recent glibc update, sys/wait.h no longer includes |
|---|
| 134 | sys/resource.h unless __USE_SVID, __USE_XOPEN or __USE_XOPEN2K8 |
|---|
| 135 | are set. |
|---|
| 136 | |
|---|
| 137 | Don't rely on the indirect inclusion to get the bits we need; |
|---|
| 138 | include it directly in afsd_kernel.c. This include used to be |
|---|
| 139 | there but was dropped when afsd_kernel.c was split off. |
|---|
| 140 | |
|---|
| 141 | Reviewed-on: http://gerrit.openafs.org/7522 |
|---|
| 142 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 143 | Reviewed-by: Derrick Brashear <shadow@dementix.org> |
|---|
| 144 | (cherry picked from commit bc3a32a84facb8114a8c7de87025f972d0281098) |
|---|
| 145 | |
|---|
| 146 | Change-Id: Ia5ba6a0e662607e680b4431f146c969b7069bcfd |
|---|
| 147 | Reviewed-on: http://gerrit.openafs.org/8155 |
|---|
| 148 | Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com> |
|---|
| 149 | Reviewed-by: Derrick Brashear <shadow@your-file-system.com> |
|---|
| 150 | Tested-by: Derrick Brashear <shadow@your-file-system.com> |
|---|
| 151 | (cherry picked from commit 5842f856652051a4386b1e0170f18dca911ca4c6) |
|---|
| 152 | --- |
|---|
| 153 | src/afsd/afsd_kernel.c | 4 ++++ |
|---|
| 154 | 1 file changed, 4 insertions(+) |
|---|
| 155 | |
|---|
| 156 | diff --git a/src/afsd/afsd_kernel.c b/src/afsd/afsd_kernel.c |
|---|
| 157 | index 1f7fdbb..e1e87a7 100644 |
|---|
| 158 | --- a/src/afsd/afsd_kernel.c |
|---|
| 159 | +++ b/src/afsd/afsd_kernel.c |
|---|
| 160 | @@ -37,6 +37,10 @@ |
|---|
| 161 | #include <sys/param.h> |
|---|
| 162 | #endif |
|---|
| 163 | |
|---|
| 164 | +#if defined(AFS_LINUX20_ENV) |
|---|
| 165 | +#include <sys/resource.h> |
|---|
| 166 | +#endif |
|---|
| 167 | + |
|---|
| 168 | #ifdef HAVE_SYS_FS_TYPES_H |
|---|
| 169 | #include <sys/fs_types.h> |
|---|
| 170 | #endif |
|---|
| 171 | -- |
|---|
| 172 | 1.8.0 |
|---|
| 173 | |
|---|
| 174 | |
|---|
| 175 | From 31a7f5ef2fcb81c2510834befd15fb057d067eaf Mon Sep 17 00:00:00 2001 |
|---|
| 176 | From: Marc Dionne <marc.c.dionne@gmail.com> |
|---|
| 177 | Date: Mon, 13 Aug 2012 20:32:08 -0400 |
|---|
| 178 | Subject: [PATCH 04/12] Linux: bypass: consolidate copy_page macros into a |
|---|
| 179 | single function |
|---|
| 180 | |
|---|
| 181 | The copy_page(s) macros are very similar; combine them into a |
|---|
| 182 | single function that can be used for all cases. |
|---|
| 183 | |
|---|
| 184 | This will make it easier to add some pre-processor logic around |
|---|
| 185 | the kmap_atomic calls to adapt to Linux API changes. |
|---|
| 186 | |
|---|
| 187 | Reviewed-on: http://gerrit.openafs.org/7980 |
|---|
| 188 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 189 | Reviewed-by: Derrick Brashear <shadow@dementix.org> |
|---|
| 190 | (cherry picked from commit 0a8256a26fafb490b454f2a857b0c15d859572c5) |
|---|
| 191 | |
|---|
| 192 | Change-Id: I6835a024428b26a8cd8d073f6304d0d0b3042b24 |
|---|
| 193 | Reviewed-on: http://gerrit.openafs.org/8077 |
|---|
| 194 | Reviewed-by: Derrick Brashear <shadow@your-file-system.com> |
|---|
| 195 | Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com> |
|---|
| 196 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 197 | (cherry picked from commit 54db9af1a87c03d6f00ab70565c9d1f733813fc2) |
|---|
| 198 | --- |
|---|
| 199 | src/afs/afs_bypasscache.c | 63 ++++++++++++++++++----------------------------- |
|---|
| 200 | 1 file changed, 24 insertions(+), 39 deletions(-) |
|---|
| 201 | |
|---|
| 202 | diff --git a/src/afs/afs_bypasscache.c b/src/afs/afs_bypasscache.c |
|---|
| 203 | index e447024..b350233 100644 |
|---|
| 204 | --- a/src/afs/afs_bypasscache.c |
|---|
| 205 | +++ b/src/afs/afs_bypasscache.c |
|---|
| 206 | @@ -270,49 +270,12 @@ done: |
|---|
| 207 | #ifdef UKERNEL |
|---|
| 208 | typedef void * bypass_page_t; |
|---|
| 209 | |
|---|
| 210 | -#define copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curiov) \ |
|---|
| 211 | - do { \ |
|---|
| 212 | - int dolen = auio->uio_iov[curiov].iov_len - pageoff; \ |
|---|
| 213 | - memcpy(((char *)pp) + pageoff, \ |
|---|
| 214 | - ((char *)rxiov[iovno].iov_base) + iovoff, dolen); \ |
|---|
| 215 | - auio->uio_resid -= dolen; \ |
|---|
| 216 | - } while(0) |
|---|
| 217 | - |
|---|
| 218 | -#define copy_pages(pp, pageoff, rxiov, iovno, iovoff, auio, curiov) \ |
|---|
| 219 | - do { \ |
|---|
| 220 | - int dolen = rxiov[iovno].iov_len - iovoff; \ |
|---|
| 221 | - memcpy(((char *)pp) + pageoff, \ |
|---|
| 222 | - ((char *)rxiov[iovno].iov_base) + iovoff, dolen); \ |
|---|
| 223 | - auio->uio_resid -= dolen; \ |
|---|
| 224 | - } while(0) |
|---|
| 225 | - |
|---|
| 226 | #define unlock_and_release_pages(auio) |
|---|
| 227 | #define release_full_page(pp, pageoff) |
|---|
| 228 | |
|---|
| 229 | #else |
|---|
| 230 | typedef struct page * bypass_page_t; |
|---|
| 231 | |
|---|
| 232 | -#define copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curiov) \ |
|---|
| 233 | - do { \ |
|---|
| 234 | - char *address; \ |
|---|
| 235 | - int dolen = auio->uio_iov[curiov].iov_len - pageoff; \ |
|---|
| 236 | - address = kmap_atomic(pp, KM_USER0); \ |
|---|
| 237 | - memcpy(address + pageoff, \ |
|---|
| 238 | - (char *)(rxiov[iovno].iov_base) + iovoff, dolen); \ |
|---|
| 239 | - kunmap_atomic(address, KM_USER0); \ |
|---|
| 240 | - } while(0) |
|---|
| 241 | - |
|---|
| 242 | -#define copy_pages(pp, pageoff, rxiov, iovno, iovoff, auio, curiov) \ |
|---|
| 243 | - do { \ |
|---|
| 244 | - char *address; \ |
|---|
| 245 | - int dolen = rxiov[iovno].iov_len - iovoff; \ |
|---|
| 246 | - address = kmap_atomic(pp, KM_USER0); \ |
|---|
| 247 | - memcpy(address + pageoff, \ |
|---|
| 248 | - (char *)(rxiov[iovno].iov_base) + iovoff, dolen); \ |
|---|
| 249 | - kunmap_atomic(address, KM_USER0); \ |
|---|
| 250 | - } while(0) |
|---|
| 251 | - |
|---|
| 252 | - |
|---|
| 253 | #define unlock_and_release_pages(auio) \ |
|---|
| 254 | do { \ |
|---|
| 255 | struct iovec *ciov; \ |
|---|
| 256 | @@ -347,8 +310,30 @@ typedef struct page * bypass_page_t; |
|---|
| 257 | afs_warn("afs_NoCacheFetchProc: page not locked!\n"); \ |
|---|
| 258 | put_page(pp); /* decrement refcount */ \ |
|---|
| 259 | } while(0) |
|---|
| 260 | +#endif |
|---|
| 261 | + |
|---|
| 262 | +static void |
|---|
| 263 | +afs_bypass_copy_page(bypass_page_t pp, int pageoff, struct iovec *rxiov, |
|---|
| 264 | + int iovno, int iovoff, struct uio *auio, int curiov, int partial) |
|---|
| 265 | +{ |
|---|
| 266 | + char *address; |
|---|
| 267 | + int dolen; |
|---|
| 268 | + |
|---|
| 269 | + if (partial) |
|---|
| 270 | + dolen = rxiov[iovno].iov_len - iovoff; |
|---|
| 271 | + else |
|---|
| 272 | + dolen = auio->uio_iov[curiov].iov_len - pageoff; |
|---|
| 273 | |
|---|
| 274 | +#if !defined(UKERNEL) |
|---|
| 275 | + address = kmap_atomic(pp, KM_USER0); |
|---|
| 276 | +#else |
|---|
| 277 | + address = pp; |
|---|
| 278 | #endif |
|---|
| 279 | + memcpy(address + pageoff, (char *)(rxiov[iovno].iov_base) + iovoff, dolen); |
|---|
| 280 | +#if !defined(UKERNEL) |
|---|
| 281 | + kunmap_atomic(address, KM_USER0); |
|---|
| 282 | +#endif |
|---|
| 283 | +} |
|---|
| 284 | |
|---|
| 285 | /* no-cache prefetch routine */ |
|---|
| 286 | static afs_int32 |
|---|
| 287 | @@ -447,7 +432,7 @@ afs_NoCacheFetchProc(struct rx_call *acall, |
|---|
| 288 | if (pageoff + (rxiov[iovno].iov_len - iovoff) <= auio->uio_iov[curpage].iov_len) { |
|---|
| 289 | /* Copy entire (or rest of) current iovec into current page */ |
|---|
| 290 | if (pp) |
|---|
| 291 | - copy_pages(pp, pageoff, rxiov, iovno, iovoff, auio, curpage); |
|---|
| 292 | + afs_bypass_copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curpage, 0); |
|---|
| 293 | length -= (rxiov[iovno].iov_len - iovoff); |
|---|
| 294 | pageoff += rxiov[iovno].iov_len - iovoff; |
|---|
| 295 | iovno++; |
|---|
| 296 | @@ -455,7 +440,7 @@ afs_NoCacheFetchProc(struct rx_call *acall, |
|---|
| 297 | } else { |
|---|
| 298 | /* Copy only what's needed to fill current page */ |
|---|
| 299 | if (pp) |
|---|
| 300 | - copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curpage); |
|---|
| 301 | + afs_bypass_copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curpage, 1); |
|---|
| 302 | length -= (auio->uio_iov[curpage].iov_len - pageoff); |
|---|
| 303 | iovoff += auio->uio_iov[curpage].iov_len - pageoff; |
|---|
| 304 | pageoff = auio->uio_iov[curpage].iov_len; |
|---|
| 305 | -- |
|---|
| 306 | 1.8.0 |
|---|
| 307 | |
|---|
| 308 | |
|---|
| 309 | From 51102503174a33c0bbb74a062a9413a0f041588e Mon Sep 17 00:00:00 2001 |
|---|
| 310 | From: Marc Dionne <marc.c.dionne@gmail.com> |
|---|
| 311 | Date: Tue, 14 Aug 2012 16:34:42 -0400 |
|---|
| 312 | Subject: [PATCH 05/12] Linux 3.6: kmap_atomic API change |
|---|
| 313 | |
|---|
| 314 | kmap_atomic no longer requires a KM_TYPE argument. Test for this |
|---|
| 315 | and adjust the affected code. |
|---|
| 316 | |
|---|
| 317 | Reviewed-on: http://gerrit.openafs.org/7981 |
|---|
| 318 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 319 | Reviewed-by: Derrick Brashear <shadow@dementix.org> |
|---|
| 320 | (cherry picked from commit 049c485b4a39ba510035788b4959d839ef668c55) |
|---|
| 321 | |
|---|
| 322 | Change-Id: Iac8be7901da4b277864b1b6cc987cf5087992789 |
|---|
| 323 | Reviewed-on: http://gerrit.openafs.org/8078 |
|---|
| 324 | Reviewed-by: Derrick Brashear <shadow@your-file-system.com> |
|---|
| 325 | Reviewed-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil> |
|---|
| 326 | Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com> |
|---|
| 327 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 328 | (cherry picked from commit 76ab286feb1570efa9763e076020fc43fb0a95fa) |
|---|
| 329 | --- |
|---|
| 330 | acinclude.m4 | 1 + |
|---|
| 331 | src/afs/afs_bypasscache.c | 8 ++++++++ |
|---|
| 332 | src/cf/linux-test4.m4 | 12 ++++++++++++ |
|---|
| 333 | 3 files changed, 21 insertions(+) |
|---|
| 334 | |
|---|
| 335 | diff --git a/acinclude.m4 b/acinclude.m4 |
|---|
| 336 | index 25484cf..20fd15e 100644 |
|---|
| 337 | --- a/acinclude.m4 |
|---|
| 338 | +++ b/acinclude.m4 |
|---|
| 339 | @@ -959,6 +959,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) |
|---|
| 340 | LINUX_IOP_MKDIR_TAKES_UMODE_T |
|---|
| 341 | LINUX_IOP_CREATE_TAKES_UMODE_T |
|---|
| 342 | LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES |
|---|
| 343 | + LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE |
|---|
| 344 | |
|---|
| 345 | dnl If we are guaranteed that keyrings will work - that is |
|---|
| 346 | dnl a) The kernel has keyrings enabled |
|---|
| 347 | diff --git a/src/afs/afs_bypasscache.c b/src/afs/afs_bypasscache.c |
|---|
| 348 | index b350233..1138f89 100644 |
|---|
| 349 | --- a/src/afs/afs_bypasscache.c |
|---|
| 350 | +++ b/src/afs/afs_bypasscache.c |
|---|
| 351 | @@ -325,13 +325,21 @@ afs_bypass_copy_page(bypass_page_t pp, int pageoff, struct iovec *rxiov, |
|---|
| 352 | dolen = auio->uio_iov[curiov].iov_len - pageoff; |
|---|
| 353 | |
|---|
| 354 | #if !defined(UKERNEL) |
|---|
| 355 | +# if defined(KMAP_ATOMIC_TAKES_NO_KM_TYPE) |
|---|
| 356 | + address = kmap_atomic(pp); |
|---|
| 357 | +# else |
|---|
| 358 | address = kmap_atomic(pp, KM_USER0); |
|---|
| 359 | +# endif |
|---|
| 360 | #else |
|---|
| 361 | address = pp; |
|---|
| 362 | #endif |
|---|
| 363 | memcpy(address + pageoff, (char *)(rxiov[iovno].iov_base) + iovoff, dolen); |
|---|
| 364 | #if !defined(UKERNEL) |
|---|
| 365 | +# if defined(KMAP_ATOMIC_TAKES_NO_KM_TYPE) |
|---|
| 366 | + kunmap_atomic(address); |
|---|
| 367 | +# else |
|---|
| 368 | kunmap_atomic(address, KM_USER0); |
|---|
| 369 | +# endif |
|---|
| 370 | #endif |
|---|
| 371 | } |
|---|
| 372 | |
|---|
| 373 | diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 |
|---|
| 374 | index f13e97d..7db805f 100644 |
|---|
| 375 | --- a/src/cf/linux-test4.m4 |
|---|
| 376 | +++ b/src/cf/linux-test4.m4 |
|---|
| 377 | @@ -675,3 +675,15 @@ AC_DEFUN([LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES], [ |
|---|
| 378 | [define if encode_fh export op takes inode arguments], |
|---|
| 379 | [-Werror]) |
|---|
| 380 | ]) |
|---|
| 381 | + |
|---|
| 382 | + |
|---|
| 383 | +AC_DEFUN([LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE], [ |
|---|
| 384 | + AC_CHECK_LINUX_BUILD([whether kmap_atomic takes no km_type argument], |
|---|
| 385 | + [ac_cv_linux_kma_atomic_takes_no_km_type], |
|---|
| 386 | + [#include <linux/highmem.h>], |
|---|
| 387 | + [struct page *p = NULL; |
|---|
| 388 | + kmap_atomic(p);], |
|---|
| 389 | + [KMAP_ATOMIC_TAKES_NO_KM_TYPE], |
|---|
| 390 | + [define if kmap_atomic takes no km_type argument], |
|---|
| 391 | + [-Werror]) |
|---|
| 392 | +]) |
|---|
| 393 | -- |
|---|
| 394 | 1.8.0 |
|---|
| 395 | |
|---|
| 396 | |
|---|
| 397 | From f842c54d6cba963ce34f2d092c9586c6ee21a13c Mon Sep 17 00:00:00 2001 |
|---|
| 398 | From: Marc Dionne <marc.c.dionne@gmail.com> |
|---|
| 399 | Date: Mon, 13 Aug 2012 21:36:15 -0400 |
|---|
| 400 | Subject: [PATCH 06/12] Linux 3.6: dentry_open API change |
|---|
| 401 | |
|---|
| 402 | dentry_open now takes a path argument that combines the dentry and |
|---|
| 403 | the vfsmount pointers. |
|---|
| 404 | Add a configure test and a new compat inline function to keep things |
|---|
| 405 | cleaner in the main source file. |
|---|
| 406 | |
|---|
| 407 | Reviewed-on: http://gerrit.openafs.org/7982 |
|---|
| 408 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 409 | Reviewed-by: Derrick Brashear <shadow@dementix.org> |
|---|
| 410 | (cherry picked from commit 8766a65e97eb90cb6c97ccd35181c441ece14f8a) |
|---|
| 411 | |
|---|
| 412 | Change-Id: I2c0f59ad9aa6e544a2a613e902933d463f22a5b6 |
|---|
| 413 | Reviewed-on: http://gerrit.openafs.org/8079 |
|---|
| 414 | Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com> |
|---|
| 415 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 416 | Reviewed-by: Derrick Brashear <shadow@your-file-system.com> |
|---|
| 417 | (cherry picked from commit 1bba9760b26bdb1ef1e17f9d1e15be9d565828cc) |
|---|
| 418 | --- |
|---|
| 419 | acinclude.m4 | 1 + |
|---|
| 420 | src/afs/LINUX/osi_compat.h | 16 ++++++++++++++++ |
|---|
| 421 | src/afs/LINUX/osi_file.c | 4 ++-- |
|---|
| 422 | src/cf/linux-test4.m4 | 12 ++++++++++++ |
|---|
| 423 | 4 files changed, 31 insertions(+), 2 deletions(-) |
|---|
| 424 | |
|---|
| 425 | diff --git a/acinclude.m4 b/acinclude.m4 |
|---|
| 426 | index 20fd15e..d99c755 100644 |
|---|
| 427 | --- a/acinclude.m4 |
|---|
| 428 | +++ b/acinclude.m4 |
|---|
| 429 | @@ -960,6 +960,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) |
|---|
| 430 | LINUX_IOP_CREATE_TAKES_UMODE_T |
|---|
| 431 | LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES |
|---|
| 432 | LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE |
|---|
| 433 | + LINUX_DENTRY_OPEN_TAKES_PATH |
|---|
| 434 | |
|---|
| 435 | dnl If we are guaranteed that keyrings will work - that is |
|---|
| 436 | dnl a) The kernel has keyrings enabled |
|---|
| 437 | diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h |
|---|
| 438 | index 4c7c261..84fcaa5 100644 |
|---|
| 439 | --- a/src/afs/LINUX/osi_compat.h |
|---|
| 440 | +++ b/src/afs/LINUX/osi_compat.h |
|---|
| 441 | @@ -445,4 +445,20 @@ afs_get_dentry_ref(struct path *path, struct vfsmount **mnt, struct dentry **dpp |
|---|
| 442 | #endif |
|---|
| 443 | } |
|---|
| 444 | |
|---|
| 445 | +#if defined(STRUCT_TASK_STRUCT_HAS_CRED) |
|---|
| 446 | +static inline struct file * |
|---|
| 447 | +afs_dentry_open(struct dentry *dp, struct vfsmount *mnt, int flags, const struct cred *creds) { |
|---|
| 448 | +#if defined(DENTRY_OPEN_TAKES_PATH) |
|---|
| 449 | + struct path path; |
|---|
| 450 | + struct file *filp; |
|---|
| 451 | + path.mnt = mnt; |
|---|
| 452 | + path.dentry = dp; |
|---|
| 453 | + filp = dentry_open(&path, flags, creds); |
|---|
| 454 | + return filp; |
|---|
| 455 | +#else |
|---|
| 456 | + return dentry_open(dp, mntget(mnt), flags, creds); |
|---|
| 457 | +#endif |
|---|
| 458 | +} |
|---|
| 459 | +#endif |
|---|
| 460 | + |
|---|
| 461 | #endif /* AFS_LINUX_OSI_COMPAT_H */ |
|---|
| 462 | diff --git a/src/afs/LINUX/osi_file.c b/src/afs/LINUX/osi_file.c |
|---|
| 463 | index 3c20fd9..27806ab 100644 |
|---|
| 464 | --- a/src/afs/LINUX/osi_file.c |
|---|
| 465 | +++ b/src/afs/LINUX/osi_file.c |
|---|
| 466 | @@ -56,9 +56,9 @@ afs_linux_raw_open(afs_dcache_id_t *ainode) |
|---|
| 467 | |
|---|
| 468 | #if defined(STRUCT_TASK_STRUCT_HAS_CRED) |
|---|
| 469 | /* Use stashed credentials - prevent selinux/apparmor problems */ |
|---|
| 470 | - filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, cache_creds); |
|---|
| 471 | + filp = afs_dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, cache_creds); |
|---|
| 472 | if (IS_ERR(filp)) |
|---|
| 473 | - filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, current_cred()); |
|---|
| 474 | + filp = afs_dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, current_cred()); |
|---|
| 475 | #else |
|---|
| 476 | filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR); |
|---|
| 477 | #endif |
|---|
| 478 | diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 |
|---|
| 479 | index 7db805f..427c5e1 100644 |
|---|
| 480 | --- a/src/cf/linux-test4.m4 |
|---|
| 481 | +++ b/src/cf/linux-test4.m4 |
|---|
| 482 | @@ -687,3 +687,15 @@ AC_DEFUN([LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE], [ |
|---|
| 483 | [define if kmap_atomic takes no km_type argument], |
|---|
| 484 | [-Werror]) |
|---|
| 485 | ]) |
|---|
| 486 | + |
|---|
| 487 | + |
|---|
| 488 | +AC_DEFUN([LINUX_DENTRY_OPEN_TAKES_PATH], [ |
|---|
| 489 | + AC_CHECK_LINUX_BUILD([whether dentry_open takes a path argument], |
|---|
| 490 | + [ac_cv_linux_dentry_open_takes_path], |
|---|
| 491 | + [#include <linux/fs.h>], |
|---|
| 492 | + [struct path p; |
|---|
| 493 | + dentry_open(&p, 0, NULL);], |
|---|
| 494 | + [DENTRY_OPEN_TAKES_PATH], |
|---|
| 495 | + [define if dentry_open takes a path argument], |
|---|
| 496 | + [-Werror]) |
|---|
| 497 | +]) |
|---|
| 498 | -- |
|---|
| 499 | 1.8.0 |
|---|
| 500 | |
|---|
| 501 | |
|---|
| 502 | From 1aebd8757ba9684e0be18d722797a594146cefce Mon Sep 17 00:00:00 2001 |
|---|
| 503 | From: Marc Dionne <marc.c.dionne@gmail.com> |
|---|
| 504 | Date: Mon, 13 Aug 2012 21:55:25 -0400 |
|---|
| 505 | Subject: [PATCH 07/12] Linux 3.6: d_alias and i_dentry are now hlists |
|---|
| 506 | |
|---|
| 507 | The d_alias pointer is now the head of an hlist. This means the |
|---|
| 508 | iterator is a different macro and has no "reverse" version since |
|---|
| 509 | hlists have no direct pointer to the list tail. |
|---|
| 510 | |
|---|
| 511 | inode->i_dentry gets the same treatment. Adjust where we use it. |
|---|
| 512 | |
|---|
| 513 | Reviewed-on: http://gerrit.openafs.org/7983 |
|---|
| 514 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 515 | Reviewed-by: Derrick Brashear <shadow@dementix.org> |
|---|
| 516 | (cherry picked from commit 6bea047fb404bde828c6358ae06f7941aa2bc959) |
|---|
| 517 | |
|---|
| 518 | Change-Id: I7e7b87e5f5c240f3f0ff25fa723c857ab9d0108c |
|---|
| 519 | Reviewed-on: http://gerrit.openafs.org/8080 |
|---|
| 520 | Reviewed-by: Derrick Brashear <shadow@your-file-system.com> |
|---|
| 521 | Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com> |
|---|
| 522 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 523 | (cherry picked from commit b5a66fb391b47848f023042e96c87a1b7d49b888) |
|---|
| 524 | --- |
|---|
| 525 | acinclude.m4 | 1 + |
|---|
| 526 | src/afs/LINUX/osi_vcache.c | 12 ++++++++++++ |
|---|
| 527 | src/afs/afs_daemons.c | 5 +++++ |
|---|
| 528 | src/cf/linux-test4.m4 | 13 +++++++++++++ |
|---|
| 529 | 4 files changed, 31 insertions(+) |
|---|
| 530 | |
|---|
| 531 | diff --git a/acinclude.m4 b/acinclude.m4 |
|---|
| 532 | index d99c755..d52d149 100644 |
|---|
| 533 | --- a/acinclude.m4 |
|---|
| 534 | +++ b/acinclude.m4 |
|---|
| 535 | @@ -961,6 +961,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) |
|---|
| 536 | LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES |
|---|
| 537 | LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE |
|---|
| 538 | LINUX_DENTRY_OPEN_TAKES_PATH |
|---|
| 539 | + LINUX_D_ALIAS_IS_HLIST |
|---|
| 540 | |
|---|
| 541 | dnl If we are guaranteed that keyrings will work - that is |
|---|
| 542 | dnl a) The kernel has keyrings enabled |
|---|
| 543 | diff --git a/src/afs/LINUX/osi_vcache.c b/src/afs/LINUX/osi_vcache.c |
|---|
| 544 | index e82d78e..cd61c65 100644 |
|---|
| 545 | --- a/src/afs/LINUX/osi_vcache.c |
|---|
| 546 | +++ b/src/afs/LINUX/osi_vcache.c |
|---|
| 547 | @@ -19,7 +19,11 @@ osi_TryEvictVCache(struct vcache *avc, int *slept, int defersleep) { |
|---|
| 548 | |
|---|
| 549 | struct dentry *dentry; |
|---|
| 550 | struct inode *inode = AFSTOV(avc); |
|---|
| 551 | +#if defined(D_ALIAS_IS_HLIST) |
|---|
| 552 | + struct hlist_node *cur, *head; |
|---|
| 553 | +#else |
|---|
| 554 | struct list_head *cur, *head; |
|---|
| 555 | +#endif |
|---|
| 556 | |
|---|
| 557 | /* First, see if we can evict the inode from the dcache */ |
|---|
| 558 | if (defersleep && avc != afs_globalVp && VREFCOUNT(avc) > 1 && avc->opens == 0) { |
|---|
| 559 | @@ -53,12 +57,20 @@ restart: |
|---|
| 560 | spin_unlock(&dcache_lock); |
|---|
| 561 | #else /* HAVE_DCACHE_LOCK */ |
|---|
| 562 | spin_lock(&inode->i_lock); |
|---|
| 563 | +#if defined(D_ALIAS_IS_HLIST) |
|---|
| 564 | + head = inode->i_dentry.first; |
|---|
| 565 | +#else |
|---|
| 566 | head = &inode->i_dentry; |
|---|
| 567 | +#endif |
|---|
| 568 | |
|---|
| 569 | restart: |
|---|
| 570 | cur = head; |
|---|
| 571 | while ((cur = cur->next) != head) { |
|---|
| 572 | +#if defined(D_ALIAS_IS_HLIST) |
|---|
| 573 | + dentry = hlist_entry(cur, struct dentry, d_alias); |
|---|
| 574 | +#else |
|---|
| 575 | dentry = list_entry(cur, struct dentry, d_alias); |
|---|
| 576 | +#endif |
|---|
| 577 | |
|---|
| 578 | spin_lock(&dentry->d_lock); |
|---|
| 579 | if (d_unhashed(dentry)) { |
|---|
| 580 | diff --git a/src/afs/afs_daemons.c b/src/afs/afs_daemons.c |
|---|
| 581 | index 23655e3..f47be0e 100644 |
|---|
| 582 | --- a/src/afs/afs_daemons.c |
|---|
| 583 | +++ b/src/afs/afs_daemons.c |
|---|
| 584 | @@ -396,8 +396,13 @@ afs_CheckRootVolume(void) |
|---|
| 585 | spin_lock(&dp->d_lock); |
|---|
| 586 | #endif |
|---|
| 587 | #endif |
|---|
| 588 | +#if defined(D_ALIAS_IS_HLIST) |
|---|
| 589 | + hlist_del_init(&dp->d_alias); |
|---|
| 590 | + hlist_add_head(&dp->d_alias, &(AFSTOV(vcp)->i_dentry)); |
|---|
| 591 | +#else |
|---|
| 592 | list_del_init(&dp->d_alias); |
|---|
| 593 | list_add(&dp->d_alias, &(AFSTOV(vcp)->i_dentry)); |
|---|
| 594 | +#endif |
|---|
| 595 | dp->d_inode = AFSTOV(vcp); |
|---|
| 596 | #if defined(AFS_LINUX24_ENV) |
|---|
| 597 | #if defined(AFS_LINUX26_ENV) |
|---|
| 598 | diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 |
|---|
| 599 | index 427c5e1..6b70059 100644 |
|---|
| 600 | --- a/src/cf/linux-test4.m4 |
|---|
| 601 | +++ b/src/cf/linux-test4.m4 |
|---|
| 602 | @@ -699,3 +699,16 @@ AC_DEFUN([LINUX_DENTRY_OPEN_TAKES_PATH], [ |
|---|
| 603 | [define if dentry_open takes a path argument], |
|---|
| 604 | [-Werror]) |
|---|
| 605 | ]) |
|---|
| 606 | + |
|---|
| 607 | + |
|---|
| 608 | +AC_DEFUN([LINUX_D_ALIAS_IS_HLIST], [ |
|---|
| 609 | + AC_CHECK_LINUX_BUILD([whether dentry->d_alias is an hlist], |
|---|
| 610 | + [ac_cv_linux_d_alias_is_hlist], |
|---|
| 611 | + [#include <linux/fs.h>], |
|---|
| 612 | + [struct dentry *d = NULL; |
|---|
| 613 | + struct hlist_node *hn = NULL; |
|---|
| 614 | + d->d_alias = *hn;], |
|---|
| 615 | + [D_ALIAS_IS_HLIST], |
|---|
| 616 | + [define if dentry->d_alias is an hlist], |
|---|
| 617 | + []) |
|---|
| 618 | +]) |
|---|
| 619 | -- |
|---|
| 620 | 1.8.0 |
|---|
| 621 | |
|---|
| 622 | |
|---|
| 623 | From 10f8f641542d9bc16c9a9c953324fa9d89b81607 Mon Sep 17 00:00:00 2001 |
|---|
| 624 | From: Marc Dionne <marc.c.dionne@gmail.com> |
|---|
| 625 | Date: Tue, 14 Aug 2012 17:11:08 -0400 |
|---|
| 626 | Subject: [PATCH 08/12] Linux: fix variable used to test for the iop create |
|---|
| 627 | API |
|---|
| 628 | |
|---|
| 629 | Use correct variable when testing for the create API to use. |
|---|
| 630 | |
|---|
| 631 | This is just for looks - there is no effect since mkdir and create |
|---|
| 632 | were changed in the same kernel release. |
|---|
| 633 | |
|---|
| 634 | Reviewed-on: http://gerrit.openafs.org/7984 |
|---|
| 635 | Reviewed-by: Alistair Ferguson <alistair.ferguson@mac.com> |
|---|
| 636 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 637 | Reviewed-by: Derrick Brashear <shadow@dementix.org> |
|---|
| 638 | (cherry picked from commit c633a92a1bc7881f18ee641082ff2efe7da1a8cb) |
|---|
| 639 | |
|---|
| 640 | Change-Id: Ib23fe9a34bc07227614c149b0f16d3b0a067501b |
|---|
| 641 | Reviewed-on: http://gerrit.openafs.org/8081 |
|---|
| 642 | Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com> |
|---|
| 643 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 644 | Reviewed-by: Derrick Brashear <shadow@your-file-system.com> |
|---|
| 645 | (cherry picked from commit aecd183acb34a0a9b850fb69eed472d2c9a27612) |
|---|
| 646 | --- |
|---|
| 647 | src/afs/LINUX/osi_vnodeops.c | 2 +- |
|---|
| 648 | 1 file changed, 1 insertion(+), 1 deletion(-) |
|---|
| 649 | |
|---|
| 650 | diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c |
|---|
| 651 | index 4cda547..b3bf115 100644 |
|---|
| 652 | --- a/src/afs/LINUX/osi_vnodeops.c |
|---|
| 653 | +++ b/src/afs/LINUX/osi_vnodeops.c |
|---|
| 654 | @@ -1094,7 +1094,7 @@ struct dentry_operations afs_dentry_operations = { |
|---|
| 655 | * name is in kernel space at this point. |
|---|
| 656 | */ |
|---|
| 657 | static int |
|---|
| 658 | -#if defined(IOP_MKDIR_TAKES_UMODE_T) |
|---|
| 659 | +#if defined(IOP_CREATE_TAKES_UMODE_T) |
|---|
| 660 | afs_linux_create(struct inode *dip, struct dentry *dp, umode_t mode, |
|---|
| 661 | struct nameidata *nd) |
|---|
| 662 | #else |
|---|
| 663 | -- |
|---|
| 664 | 1.8.0 |
|---|
| 665 | |
|---|
| 666 | |
|---|
| 667 | From 6cbb9a258b73c28c0295f93b75cbd437efe3713a Mon Sep 17 00:00:00 2001 |
|---|
| 668 | From: Marc Dionne <marc.c.dionne@gmail.com> |
|---|
| 669 | Date: Tue, 14 Aug 2012 17:28:50 -0400 |
|---|
| 670 | Subject: [PATCH 09/12] Linux 3.6: create inode operation API change |
|---|
| 671 | |
|---|
| 672 | The nameidata argument is dropped and a flag is added. |
|---|
| 673 | |
|---|
| 674 | Reviewed-on: http://gerrit.openafs.org/7985 |
|---|
| 675 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 676 | Reviewed-by: Derrick Brashear <shadow@dementix.org> |
|---|
| 677 | (cherry picked from commit 020e32779c103817ca89caa51259fb53bc3dde79) |
|---|
| 678 | |
|---|
| 679 | Change-Id: Iae2a0301a1c4acb6835eb0bdca6ae22b143b2cda |
|---|
| 680 | Reviewed-on: http://gerrit.openafs.org/8082 |
|---|
| 681 | Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com> |
|---|
| 682 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 683 | Reviewed-by: Derrick Brashear <shadow@your-file-system.com> |
|---|
| 684 | (cherry picked from commit 5210d97865d974d5e14f68eec6a58b292d6b7893) |
|---|
| 685 | --- |
|---|
| 686 | acinclude.m4 | 1 + |
|---|
| 687 | src/afs/LINUX/osi_vnodeops.c | 9 +++++---- |
|---|
| 688 | src/cf/linux-test4.m4 | 15 +++++++++++++++ |
|---|
| 689 | 3 files changed, 21 insertions(+), 4 deletions(-) |
|---|
| 690 | |
|---|
| 691 | diff --git a/acinclude.m4 b/acinclude.m4 |
|---|
| 692 | index d52d149..1c84354 100644 |
|---|
| 693 | --- a/acinclude.m4 |
|---|
| 694 | +++ b/acinclude.m4 |
|---|
| 695 | @@ -962,6 +962,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) |
|---|
| 696 | LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE |
|---|
| 697 | LINUX_DENTRY_OPEN_TAKES_PATH |
|---|
| 698 | LINUX_D_ALIAS_IS_HLIST |
|---|
| 699 | + LINUX_IOP_I_CREATE_TAKES_BOOL |
|---|
| 700 | |
|---|
| 701 | dnl If we are guaranteed that keyrings will work - that is |
|---|
| 702 | dnl a) The kernel has keyrings enabled |
|---|
| 703 | diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c |
|---|
| 704 | index b3bf115..8c8045b 100644 |
|---|
| 705 | --- a/src/afs/LINUX/osi_vnodeops.c |
|---|
| 706 | +++ b/src/afs/LINUX/osi_vnodeops.c |
|---|
| 707 | @@ -1094,17 +1094,18 @@ struct dentry_operations afs_dentry_operations = { |
|---|
| 708 | * name is in kernel space at this point. |
|---|
| 709 | */ |
|---|
| 710 | static int |
|---|
| 711 | -#if defined(IOP_CREATE_TAKES_UMODE_T) |
|---|
| 712 | +#if defined(IOP_CREATE_TAKES_BOOL) |
|---|
| 713 | +afs_linux_create(struct inode *dip, struct dentry *dp, umode_t mode, |
|---|
| 714 | + bool excl) |
|---|
| 715 | +#elif defined(IOP_CREATE_TAKES_UMODE_T) |
|---|
| 716 | afs_linux_create(struct inode *dip, struct dentry *dp, umode_t mode, |
|---|
| 717 | struct nameidata *nd) |
|---|
| 718 | -#else |
|---|
| 719 | -#ifdef IOP_CREATE_TAKES_NAMEIDATA |
|---|
| 720 | +#elif defined(IOP_CREATE_TAKES_NAMEIDATA) |
|---|
| 721 | afs_linux_create(struct inode *dip, struct dentry *dp, int mode, |
|---|
| 722 | struct nameidata *nd) |
|---|
| 723 | #else |
|---|
| 724 | afs_linux_create(struct inode *dip, struct dentry *dp, int mode) |
|---|
| 725 | #endif |
|---|
| 726 | -#endif |
|---|
| 727 | { |
|---|
| 728 | struct vattr vattr; |
|---|
| 729 | cred_t *credp = crref(); |
|---|
| 730 | diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 |
|---|
| 731 | index 6b70059..dc30770 100644 |
|---|
| 732 | --- a/src/cf/linux-test4.m4 |
|---|
| 733 | +++ b/src/cf/linux-test4.m4 |
|---|
| 734 | @@ -712,3 +712,18 @@ AC_DEFUN([LINUX_D_ALIAS_IS_HLIST], [ |
|---|
| 735 | [define if dentry->d_alias is an hlist], |
|---|
| 736 | []) |
|---|
| 737 | ]) |
|---|
| 738 | + |
|---|
| 739 | + |
|---|
| 740 | +AC_DEFUN([LINUX_IOP_I_CREATE_TAKES_BOOL], [ |
|---|
| 741 | + AC_CHECK_LINUX_BUILD([whether inode_operations.create takes a bool], |
|---|
| 742 | + [ac_cv_linux_func_i_create_takes_bool], |
|---|
| 743 | + [#include <linux/fs.h> |
|---|
| 744 | + #include <linux/namei.h>], |
|---|
| 745 | + [struct inode _inode = {}; |
|---|
| 746 | + struct dentry _dentry; |
|---|
| 747 | + bool b = true; |
|---|
| 748 | + (void)_inode.i_op->create(&_inode, &_dentry, 0, b);], |
|---|
| 749 | + [IOP_CREATE_TAKES_BOOL], |
|---|
| 750 | + [define if your iops.create takes a bool argument], |
|---|
| 751 | + [-Werror]) |
|---|
| 752 | +]) |
|---|
| 753 | -- |
|---|
| 754 | 1.8.0 |
|---|
| 755 | |
|---|
| 756 | |
|---|
| 757 | From ebfd3de107e0dd97127aa12e572684cc98a457cf Mon Sep 17 00:00:00 2001 |
|---|
| 758 | From: Marc Dionne <marc.c.dionne@gmail.com> |
|---|
| 759 | Date: Tue, 14 Aug 2012 18:08:51 -0400 |
|---|
| 760 | Subject: [PATCH 10/12] Linux 3.6: revalidate dentry op API change |
|---|
| 761 | |
|---|
| 762 | The nameidata argument is dropped, replaced by an unsigned flags |
|---|
| 763 | value. The configure test is very specific; kernels with the |
|---|
| 764 | older API with a signed int flags value should fall through. |
|---|
| 765 | |
|---|
| 766 | Reviewed-on: http://gerrit.openafs.org/7986 |
|---|
| 767 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 768 | Reviewed-by: Derrick Brashear <shadow@dementix.org> |
|---|
| 769 | (cherry picked from commit 7413cd09a53f89882a46fd100bf6c501348f2188) |
|---|
| 770 | |
|---|
| 771 | Change-Id: Ie68d70dcf414d24e7e980c8a8f35b83550d2da7c |
|---|
| 772 | Reviewed-on: http://gerrit.openafs.org/8083 |
|---|
| 773 | Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com> |
|---|
| 774 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 775 | Reviewed-by: Derrick Brashear <shadow@your-file-system.com> |
|---|
| 776 | (cherry picked from commit 4ab59d7ee924a6be1d553f75a67b0b253cc85e88) |
|---|
| 777 | --- |
|---|
| 778 | acinclude.m4 | 1 + |
|---|
| 779 | src/afs/LINUX/osi_vnodeops.c | 8 +++++++- |
|---|
| 780 | src/cf/linux-test4.m4 | 14 ++++++++++++++ |
|---|
| 781 | 3 files changed, 22 insertions(+), 1 deletion(-) |
|---|
| 782 | |
|---|
| 783 | diff --git a/acinclude.m4 b/acinclude.m4 |
|---|
| 784 | index 1c84354..8bb5bf7 100644 |
|---|
| 785 | --- a/acinclude.m4 |
|---|
| 786 | +++ b/acinclude.m4 |
|---|
| 787 | @@ -963,6 +963,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) |
|---|
| 788 | LINUX_DENTRY_OPEN_TAKES_PATH |
|---|
| 789 | LINUX_D_ALIAS_IS_HLIST |
|---|
| 790 | LINUX_IOP_I_CREATE_TAKES_BOOL |
|---|
| 791 | + LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED |
|---|
| 792 | |
|---|
| 793 | dnl If we are guaranteed that keyrings will work - that is |
|---|
| 794 | dnl a) The kernel has keyrings enabled |
|---|
| 795 | diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c |
|---|
| 796 | index 8c8045b..49f8b96 100644 |
|---|
| 797 | --- a/src/afs/LINUX/osi_vnodeops.c |
|---|
| 798 | +++ b/src/afs/LINUX/osi_vnodeops.c |
|---|
| 799 | @@ -906,7 +906,9 @@ afs_linux_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *sta |
|---|
| 800 | * later on, we shouldn't have to do it until later. Perhaps in the future.. |
|---|
| 801 | */ |
|---|
| 802 | static int |
|---|
| 803 | -#ifdef DOP_REVALIDATE_TAKES_NAMEIDATA |
|---|
| 804 | +#if defined(DOP_REVALIDATE_TAKES_UNSIGNED) |
|---|
| 805 | +afs_linux_dentry_revalidate(struct dentry *dp, unsigned int flags) |
|---|
| 806 | +#elif defined(DOP_REVALIDATE_TAKES_NAMEIDATA) |
|---|
| 807 | afs_linux_dentry_revalidate(struct dentry *dp, struct nameidata *nd) |
|---|
| 808 | #else |
|---|
| 809 | afs_linux_dentry_revalidate(struct dentry *dp, int flags) |
|---|
| 810 | @@ -921,7 +923,11 @@ afs_linux_dentry_revalidate(struct dentry *dp, int flags) |
|---|
| 811 | |
|---|
| 812 | #ifdef LOOKUP_RCU |
|---|
| 813 | /* We don't support RCU path walking */ |
|---|
| 814 | +# if defined(DOP_REVALIDATE_TAKES_UNSIGNED) |
|---|
| 815 | + if (flags & LOOKUP_RCU) |
|---|
| 816 | +# else |
|---|
| 817 | if (nd->flags & LOOKUP_RCU) |
|---|
| 818 | +# endif |
|---|
| 819 | return -ECHILD; |
|---|
| 820 | #endif |
|---|
| 821 | AFS_GLOCK(); |
|---|
| 822 | diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 |
|---|
| 823 | index dc30770..4a6ec02 100644 |
|---|
| 824 | --- a/src/cf/linux-test4.m4 |
|---|
| 825 | +++ b/src/cf/linux-test4.m4 |
|---|
| 826 | @@ -727,3 +727,17 @@ AC_DEFUN([LINUX_IOP_I_CREATE_TAKES_BOOL], [ |
|---|
| 827 | [define if your iops.create takes a bool argument], |
|---|
| 828 | [-Werror]) |
|---|
| 829 | ]) |
|---|
| 830 | + |
|---|
| 831 | + |
|---|
| 832 | +AC_DEFUN([LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED], [ |
|---|
| 833 | + AC_CHECK_LINUX_BUILD([whether dentry_operations.d_revalidate takes an unsigned int], |
|---|
| 834 | + [ac_cv_linux_func_d_revalidate_takes_unsigned], |
|---|
| 835 | + [#include <linux/fs.h> |
|---|
| 836 | + #include <linux/namei.h>], |
|---|
| 837 | + [struct dentry_operations dops; |
|---|
| 838 | + int reval(struct dentry *d, unsigned int i) { return 0; }; |
|---|
| 839 | + dops.d_revalidate = reval;], |
|---|
| 840 | + [DOP_REVALIDATE_TAKES_UNSIGNED], |
|---|
| 841 | + [define if your dops.d_revalidate takes an unsigned int argument], |
|---|
| 842 | + [-Werror]) |
|---|
| 843 | +]) |
|---|
| 844 | -- |
|---|
| 845 | 1.8.0 |
|---|
| 846 | |
|---|
| 847 | |
|---|
| 848 | From 208d7925bd59490712bfd6bedc41ba5e3a8f4a6c Mon Sep 17 00:00:00 2001 |
|---|
| 849 | From: Marc Dionne <marc.c.dionne@gmail.com> |
|---|
| 850 | Date: Tue, 14 Aug 2012 18:26:24 -0400 |
|---|
| 851 | Subject: [PATCH 11/12] Linux 3.6: lookup inode operation API change |
|---|
| 852 | |
|---|
| 853 | The nameidata argument is replaced with an unsigned int flags |
|---|
| 854 | argument. |
|---|
| 855 | |
|---|
| 856 | Reviewed-on: http://gerrit.openafs.org/7987 |
|---|
| 857 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 858 | Reviewed-by: Derrick Brashear <shadow@dementix.org> |
|---|
| 859 | (cherry picked from commit ec48dca871ef98adb69792a34047c6be5818f1b2) |
|---|
| 860 | |
|---|
| 861 | Change-Id: Ic8be26141ede6e1c4062872c79a846efb0045bda |
|---|
| 862 | Reviewed-on: http://gerrit.openafs.org/8084 |
|---|
| 863 | Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com> |
|---|
| 864 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 865 | Reviewed-by: Derrick Brashear <shadow@your-file-system.com> |
|---|
| 866 | (cherry picked from commit 6c22f2e1de91fa3080221df22fdcd05064b57307) |
|---|
| 867 | --- |
|---|
| 868 | acinclude.m4 | 1 + |
|---|
| 869 | src/afs/LINUX/osi_vnodeops.c | 5 ++++- |
|---|
| 870 | src/cf/linux-test4.m4 | 14 ++++++++++++++ |
|---|
| 871 | 3 files changed, 19 insertions(+), 1 deletion(-) |
|---|
| 872 | |
|---|
| 873 | diff --git a/acinclude.m4 b/acinclude.m4 |
|---|
| 874 | index 8bb5bf7..4b49449 100644 |
|---|
| 875 | --- a/acinclude.m4 |
|---|
| 876 | +++ b/acinclude.m4 |
|---|
| 877 | @@ -964,6 +964,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) |
|---|
| 878 | LINUX_D_ALIAS_IS_HLIST |
|---|
| 879 | LINUX_IOP_I_CREATE_TAKES_BOOL |
|---|
| 880 | LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED |
|---|
| 881 | + LINUX_IOP_LOOKUP_TAKES_UNSIGNED |
|---|
| 882 | |
|---|
| 883 | dnl If we are guaranteed that keyrings will work - that is |
|---|
| 884 | dnl a) The kernel has keyrings enabled |
|---|
| 885 | diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c |
|---|
| 886 | index 49f8b96..c376bd1 100644 |
|---|
| 887 | --- a/src/afs/LINUX/osi_vnodeops.c |
|---|
| 888 | +++ b/src/afs/LINUX/osi_vnodeops.c |
|---|
| 889 | @@ -1147,7 +1147,10 @@ afs_linux_create(struct inode *dip, struct dentry *dp, int mode) |
|---|
| 890 | |
|---|
| 891 | /* afs_linux_lookup */ |
|---|
| 892 | static struct dentry * |
|---|
| 893 | -#ifdef IOP_LOOKUP_TAKES_NAMEIDATA |
|---|
| 894 | +#if defined(IOP_LOOKUP_TAKES_UNSIGNED) |
|---|
| 895 | +afs_linux_lookup(struct inode *dip, struct dentry *dp, |
|---|
| 896 | + unsigned flags) |
|---|
| 897 | +#elif defined(IOP_LOOKUP_TAKES_NAMEIDATA) |
|---|
| 898 | afs_linux_lookup(struct inode *dip, struct dentry *dp, |
|---|
| 899 | struct nameidata *nd) |
|---|
| 900 | #else |
|---|
| 901 | diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 |
|---|
| 902 | index 4a6ec02..fc0149f 100644 |
|---|
| 903 | --- a/src/cf/linux-test4.m4 |
|---|
| 904 | +++ b/src/cf/linux-test4.m4 |
|---|
| 905 | @@ -741,3 +741,17 @@ AC_DEFUN([LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED], [ |
|---|
| 906 | [define if your dops.d_revalidate takes an unsigned int argument], |
|---|
| 907 | [-Werror]) |
|---|
| 908 | ]) |
|---|
| 909 | + |
|---|
| 910 | + |
|---|
| 911 | +AC_DEFUN([LINUX_IOP_LOOKUP_TAKES_UNSIGNED], [ |
|---|
| 912 | + AC_CHECK_LINUX_BUILD([whether inode operation lookup takes an unsigned int], |
|---|
| 913 | + [ac_cv_linux_func_lookup_takes_unsigned], |
|---|
| 914 | + [#include <linux/fs.h> |
|---|
| 915 | + #include <linux/namei.h>], |
|---|
| 916 | + [struct inode_operations iops; |
|---|
| 917 | + struct dentry *look(struct inode *i, struct dentry *d, unsigned int j) { return NULL; }; |
|---|
| 918 | + iops.lookup = look;], |
|---|
| 919 | + [IOP_LOOKUP_TAKES_UNSIGNED], |
|---|
| 920 | + [define if your iops.lookup takes an unsigned int argument], |
|---|
| 921 | + [-Werror]) |
|---|
| 922 | +]) |
|---|
| 923 | -- |
|---|
| 924 | 1.8.0 |
|---|
| 925 | |
|---|
| 926 | |
|---|
| 927 | From 6c53a1dea7d8fe3174405febf2bf7b98a219824d Mon Sep 17 00:00:00 2001 |
|---|
| 928 | From: Marc Dionne <marc.c.dionne@gmail.com> |
|---|
| 929 | Date: Fri, 12 Oct 2012 16:25:43 -0400 |
|---|
| 930 | Subject: [PATCH 12/12] Linux: osi_vcache: Fix loop for the hlist case |
|---|
| 931 | |
|---|
| 932 | An hlist is not circular, and the end is marked by a NULL next |
|---|
| 933 | pointer. |
|---|
| 934 | |
|---|
| 935 | Reviewed-on: http://gerrit.openafs.org/8233 |
|---|
| 936 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 937 | Reviewed-by: Derrick Brashear <shadow@your-file-system.com> |
|---|
| 938 | (cherry picked from commit 78ae01fb9837d79e7bbdb2918872ab106d4c7e98) |
|---|
| 939 | |
|---|
| 940 | Change-Id: I7e4e3ed2515dd8c2ec765d8acbb97eba189d6aeb |
|---|
| 941 | Reviewed-on: http://gerrit.openafs.org/8239 |
|---|
| 942 | Tested-by: BuildBot <buildbot@rampaginggeek.com> |
|---|
| 943 | Reviewed-by: Derrick Brashear <shadow@your-file-system.com> |
|---|
| 944 | (cherry picked from commit 0506af9c058e22e3475f7e152c022571c0823253) |
|---|
| 945 | --- |
|---|
| 946 | src/afs/LINUX/osi_vcache.c | 8 +++++--- |
|---|
| 947 | 1 file changed, 5 insertions(+), 3 deletions(-) |
|---|
| 948 | |
|---|
| 949 | diff --git a/src/afs/LINUX/osi_vcache.c b/src/afs/LINUX/osi_vcache.c |
|---|
| 950 | index cd61c65..dc3685b 100644 |
|---|
| 951 | --- a/src/afs/LINUX/osi_vcache.c |
|---|
| 952 | +++ b/src/afs/LINUX/osi_vcache.c |
|---|
| 953 | @@ -20,9 +20,9 @@ osi_TryEvictVCache(struct vcache *avc, int *slept, int defersleep) { |
|---|
| 954 | struct dentry *dentry; |
|---|
| 955 | struct inode *inode = AFSTOV(avc); |
|---|
| 956 | #if defined(D_ALIAS_IS_HLIST) |
|---|
| 957 | - struct hlist_node *cur, *head; |
|---|
| 958 | + struct hlist_node *cur, *head, *list_end; |
|---|
| 959 | #else |
|---|
| 960 | - struct list_head *cur, *head; |
|---|
| 961 | + struct list_head *cur, *head, *list_end; |
|---|
| 962 | #endif |
|---|
| 963 | |
|---|
| 964 | /* First, see if we can evict the inode from the dcache */ |
|---|
| 965 | @@ -59,13 +59,15 @@ restart: |
|---|
| 966 | spin_lock(&inode->i_lock); |
|---|
| 967 | #if defined(D_ALIAS_IS_HLIST) |
|---|
| 968 | head = inode->i_dentry.first; |
|---|
| 969 | + list_end = NULL; |
|---|
| 970 | #else |
|---|
| 971 | head = &inode->i_dentry; |
|---|
| 972 | + list_end = head; |
|---|
| 973 | #endif |
|---|
| 974 | |
|---|
| 975 | restart: |
|---|
| 976 | cur = head; |
|---|
| 977 | - while ((cur = cur->next) != head) { |
|---|
| 978 | + while ((cur = cur->next) != list_end) { |
|---|
| 979 | #if defined(D_ALIAS_IS_HLIST) |
|---|
| 980 | dentry = hlist_entry(cur, struct dentry, d_alias); |
|---|
| 981 | #else |
|---|
| 982 | -- |
|---|
| 983 | 1.8.0 |
|---|
| 984 | |
|---|