diff options
author | James Morris <jmorris@namei.org> | 2009-02-05 19:01:45 -0500 |
---|---|---|
committer | James Morris <jmorris@namei.org> | 2009-02-05 19:01:45 -0500 |
commit | cb5629b10d64a8006622ce3a52bc887d91057d69 (patch) | |
tree | 7c06d8f30783115e3384721046258ce615b129c5 /fs/ocfs2/ocfs2.h | |
parent | 8920d5ad6ba74ae8ab020e90cc4d976980e68701 (diff) | |
parent | f01d1d546abb2f4028b5299092f529eefb01253a (diff) |
Merge branch 'master' into next
Conflicts:
fs/namei.c
Manually merged per:
diff --cc fs/namei.c
index 734f2b5,bbc15c2..0000000
--- a/fs/namei.c
+++ b/fs/namei.c
@@@ -860,9 -848,8 +849,10 @@@ static int __link_path_walk(const char
nd->flags |= LOOKUP_CONTINUE;
err = exec_permission_lite(inode);
if (err == -EAGAIN)
- err = vfs_permission(nd, MAY_EXEC);
+ err = inode_permission(nd->path.dentry->d_inode,
+ MAY_EXEC);
+ if (!err)
+ err = ima_path_check(&nd->path, MAY_EXEC);
if (err)
break;
@@@ -1525,14 -1506,9 +1509,14 @@@ int may_open(struct path *path, int acc
flag &= ~O_TRUNC;
}
- error = vfs_permission(nd, acc_mode);
+ error = inode_permission(inode, acc_mode);
if (error)
return error;
+
- error = ima_path_check(&nd->path,
++ error = ima_path_check(path,
+ acc_mode & (MAY_READ | MAY_WRITE | MAY_EXEC));
+ if (error)
+ return error;
/*
* An append-only file must be opened in append mode for writing.
*/
Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'fs/ocfs2/ocfs2.h')
-rw-r--r-- | fs/ocfs2/ocfs2.h | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h index 3fed9e3d8992..077384135f4e 100644 --- a/fs/ocfs2/ocfs2.h +++ b/fs/ocfs2/ocfs2.h | |||
@@ -161,6 +161,7 @@ enum ocfs2_vol_state | |||
161 | { | 161 | { |
162 | VOLUME_INIT = 0, | 162 | VOLUME_INIT = 0, |
163 | VOLUME_MOUNTED, | 163 | VOLUME_MOUNTED, |
164 | VOLUME_MOUNTED_QUOTAS, | ||
164 | VOLUME_DISMOUNTED, | 165 | VOLUME_DISMOUNTED, |
165 | VOLUME_DISABLED | 166 | VOLUME_DISABLED |
166 | }; | 167 | }; |
@@ -195,6 +196,9 @@ enum ocfs2_mount_options | |||
195 | OCFS2_MOUNT_LOCALFLOCKS = 1 << 5, /* No cluster aware user file locks */ | 196 | OCFS2_MOUNT_LOCALFLOCKS = 1 << 5, /* No cluster aware user file locks */ |
196 | OCFS2_MOUNT_NOUSERXATTR = 1 << 6, /* No user xattr */ | 197 | OCFS2_MOUNT_NOUSERXATTR = 1 << 6, /* No user xattr */ |
197 | OCFS2_MOUNT_INODE64 = 1 << 7, /* Allow inode numbers > 2^32 */ | 198 | OCFS2_MOUNT_INODE64 = 1 << 7, /* Allow inode numbers > 2^32 */ |
199 | OCFS2_MOUNT_POSIX_ACL = 1 << 8, /* POSIX access control lists */ | ||
200 | OCFS2_MOUNT_USRQUOTA = 1 << 9, /* We support user quotas */ | ||
201 | OCFS2_MOUNT_GRPQUOTA = 1 << 10, /* We support group quotas */ | ||
198 | }; | 202 | }; |
199 | 203 | ||
200 | #define OCFS2_OSB_SOFT_RO 0x0001 | 204 | #define OCFS2_OSB_SOFT_RO 0x0001 |
@@ -205,6 +209,8 @@ enum ocfs2_mount_options | |||
205 | struct ocfs2_journal; | 209 | struct ocfs2_journal; |
206 | struct ocfs2_slot_info; | 210 | struct ocfs2_slot_info; |
207 | struct ocfs2_recovery_map; | 211 | struct ocfs2_recovery_map; |
212 | struct ocfs2_quota_recovery; | ||
213 | struct ocfs2_dentry_lock; | ||
208 | struct ocfs2_super | 214 | struct ocfs2_super |
209 | { | 215 | { |
210 | struct task_struct *commit_task; | 216 | struct task_struct *commit_task; |
@@ -286,10 +292,11 @@ struct ocfs2_super | |||
286 | char *local_alloc_debug_buf; | 292 | char *local_alloc_debug_buf; |
287 | #endif | 293 | #endif |
288 | 294 | ||
289 | /* Next two fields are for local node slot recovery during | 295 | /* Next three fields are for local node slot recovery during |
290 | * mount. */ | 296 | * mount. */ |
291 | int dirty; | 297 | int dirty; |
292 | struct ocfs2_dinode *local_alloc_copy; | 298 | struct ocfs2_dinode *local_alloc_copy; |
299 | struct ocfs2_quota_recovery *quota_rec; | ||
293 | 300 | ||
294 | struct ocfs2_alloc_stats alloc_stats; | 301 | struct ocfs2_alloc_stats alloc_stats; |
295 | char dev_str[20]; /* "major,minor" of the device */ | 302 | char dev_str[20]; /* "major,minor" of the device */ |
@@ -319,6 +326,11 @@ struct ocfs2_super | |||
319 | struct list_head blocked_lock_list; | 326 | struct list_head blocked_lock_list; |
320 | unsigned long blocked_lock_count; | 327 | unsigned long blocked_lock_count; |
321 | 328 | ||
329 | /* List of dentry locks to release. Anyone can add locks to | ||
330 | * the list, ocfs2_wq processes the list */ | ||
331 | struct ocfs2_dentry_lock *dentry_lock_list; | ||
332 | struct work_struct dentry_lock_work; | ||
333 | |||
322 | wait_queue_head_t osb_mount_event; | 334 | wait_queue_head_t osb_mount_event; |
323 | 335 | ||
324 | /* Truncate log info */ | 336 | /* Truncate log info */ |
@@ -333,6 +345,10 @@ struct ocfs2_super | |||
333 | 345 | ||
334 | #define OCFS2_SB(sb) ((struct ocfs2_super *)(sb)->s_fs_info) | 346 | #define OCFS2_SB(sb) ((struct ocfs2_super *)(sb)->s_fs_info) |
335 | 347 | ||
348 | /* Useful typedef for passing around journal access functions */ | ||
349 | typedef int (*ocfs2_journal_access_func)(handle_t *handle, struct inode *inode, | ||
350 | struct buffer_head *bh, int type); | ||
351 | |||
336 | static inline int ocfs2_should_order_data(struct inode *inode) | 352 | static inline int ocfs2_should_order_data(struct inode *inode) |
337 | { | 353 | { |
338 | if (!S_ISREG(inode->i_mode)) | 354 | if (!S_ISREG(inode->i_mode)) |
@@ -376,6 +392,13 @@ static inline int ocfs2_supports_xattr(struct ocfs2_super *osb) | |||
376 | return 0; | 392 | return 0; |
377 | } | 393 | } |
378 | 394 | ||
395 | static inline int ocfs2_meta_ecc(struct ocfs2_super *osb) | ||
396 | { | ||
397 | if (osb->s_feature_incompat & OCFS2_FEATURE_INCOMPAT_META_ECC) | ||
398 | return 1; | ||
399 | return 0; | ||
400 | } | ||
401 | |||
379 | /* set / clear functions because cluster events can make these happen | 402 | /* set / clear functions because cluster events can make these happen |
380 | * in parallel so we want the transitions to be atomic. this also | 403 | * in parallel so we want the transitions to be atomic. this also |
381 | * means that any future flags osb_flags must be protected by spinlock | 404 | * means that any future flags osb_flags must be protected by spinlock |
@@ -443,39 +466,19 @@ static inline int ocfs2_uses_extended_slot_map(struct ocfs2_super *osb) | |||
443 | #define OCFS2_IS_VALID_DINODE(ptr) \ | 466 | #define OCFS2_IS_VALID_DINODE(ptr) \ |
444 | (!strcmp((ptr)->i_signature, OCFS2_INODE_SIGNATURE)) | 467 | (!strcmp((ptr)->i_signature, OCFS2_INODE_SIGNATURE)) |
445 | 468 | ||
446 | #define OCFS2_RO_ON_INVALID_DINODE(__sb, __di) do { \ | ||
447 | typeof(__di) ____di = (__di); \ | ||
448 | ocfs2_error((__sb), \ | ||
449 | "Dinode # %llu has bad signature %.*s", \ | ||
450 | (unsigned long long)le64_to_cpu((____di)->i_blkno), 7, \ | ||
451 | (____di)->i_signature); \ | ||
452 | } while (0) | ||
453 | |||
454 | #define OCFS2_IS_VALID_EXTENT_BLOCK(ptr) \ | 469 | #define OCFS2_IS_VALID_EXTENT_BLOCK(ptr) \ |
455 | (!strcmp((ptr)->h_signature, OCFS2_EXTENT_BLOCK_SIGNATURE)) | 470 | (!strcmp((ptr)->h_signature, OCFS2_EXTENT_BLOCK_SIGNATURE)) |
456 | 471 | ||
457 | #define OCFS2_RO_ON_INVALID_EXTENT_BLOCK(__sb, __eb) do { \ | ||
458 | typeof(__eb) ____eb = (__eb); \ | ||
459 | ocfs2_error((__sb), \ | ||
460 | "Extent Block # %llu has bad signature %.*s", \ | ||
461 | (unsigned long long)le64_to_cpu((____eb)->h_blkno), 7, \ | ||
462 | (____eb)->h_signature); \ | ||
463 | } while (0) | ||
464 | |||
465 | #define OCFS2_IS_VALID_GROUP_DESC(ptr) \ | 472 | #define OCFS2_IS_VALID_GROUP_DESC(ptr) \ |
466 | (!strcmp((ptr)->bg_signature, OCFS2_GROUP_DESC_SIGNATURE)) | 473 | (!strcmp((ptr)->bg_signature, OCFS2_GROUP_DESC_SIGNATURE)) |
467 | 474 | ||
468 | #define OCFS2_RO_ON_INVALID_GROUP_DESC(__sb, __gd) do { \ | ||
469 | typeof(__gd) ____gd = (__gd); \ | ||
470 | ocfs2_error((__sb), \ | ||
471 | "Group Descriptor # %llu has bad signature %.*s", \ | ||
472 | (unsigned long long)le64_to_cpu((____gd)->bg_blkno), 7, \ | ||
473 | (____gd)->bg_signature); \ | ||
474 | } while (0) | ||
475 | 475 | ||
476 | #define OCFS2_IS_VALID_XATTR_BLOCK(ptr) \ | 476 | #define OCFS2_IS_VALID_XATTR_BLOCK(ptr) \ |
477 | (!strcmp((ptr)->xb_signature, OCFS2_XATTR_BLOCK_SIGNATURE)) | 477 | (!strcmp((ptr)->xb_signature, OCFS2_XATTR_BLOCK_SIGNATURE)) |
478 | 478 | ||
479 | #define OCFS2_IS_VALID_DIR_TRAILER(ptr) \ | ||
480 | (!strcmp((ptr)->db_signature, OCFS2_DIR_TRAILER_SIGNATURE)) | ||
481 | |||
479 | static inline unsigned long ino_from_blkno(struct super_block *sb, | 482 | static inline unsigned long ino_from_blkno(struct super_block *sb, |
480 | u64 blkno) | 483 | u64 blkno) |
481 | { | 484 | { |
@@ -632,5 +635,6 @@ static inline s16 ocfs2_get_inode_steal_slot(struct ocfs2_super *osb) | |||
632 | #define ocfs2_clear_bit ext2_clear_bit | 635 | #define ocfs2_clear_bit ext2_clear_bit |
633 | #define ocfs2_test_bit ext2_test_bit | 636 | #define ocfs2_test_bit ext2_test_bit |
634 | #define ocfs2_find_next_zero_bit ext2_find_next_zero_bit | 637 | #define ocfs2_find_next_zero_bit ext2_find_next_zero_bit |
638 | #define ocfs2_find_next_bit ext2_find_next_bit | ||
635 | #endif /* OCFS2_H */ | 639 | #endif /* OCFS2_H */ |
636 | 640 | ||