Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LU-3744 llite: use 64bits flags in ll_lov_setea()
[fs/lustre-release.git]
/
lustre
/
llite
/
llite_internal.h
diff --git
a/lustre/llite/llite_internal.h
b/lustre/llite/llite_internal.h
index
6d41614
..
c55a63a
100644
(file)
--- a/
lustre/llite/llite_internal.h
+++ b/
lustre/llite/llite_internal.h
@@
-27,7
+27,7
@@
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 201
2
, Intel Corporation.
+ * Copyright (c) 2011, 201
3
, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
*/
/*
* This file is part of Lustre, http://www.lustre.org/
@@
-36,9
+36,6
@@
#ifndef LLITE_INTERNAL_H
#define LLITE_INTERNAL_H
#ifndef LLITE_INTERNAL_H
#define LLITE_INTERNAL_H
-
-#include <lustre_acl.h>
-
#include <lustre_debug.h>
#include <lustre_ver.h>
#include <lustre_disk.h> /* for s2sbi */
#include <lustre_debug.h>
#include <lustre_ver.h>
#include <lustre_disk.h> /* for s2sbi */
@@
-49,6
+46,7
@@
#include <lclient.h>
#include <lustre_mdc.h>
#include <linux/lustre_intent.h>
#include <lclient.h>
#include <lustre_mdc.h>
#include <linux/lustre_intent.h>
+#include <linux/compat.h>
#ifndef FMODE_EXEC
#define FMODE_EXEC 0
#ifndef FMODE_EXEC
#define FMODE_EXEC 0
@@
-126,6
+124,10
@@
enum lli_flags {
LLIF_SRVLOCK = (1 << 5),
/* File data is modified. */
LLIF_DATA_MODIFIED = (1 << 6),
LLIF_SRVLOCK = (1 << 5),
/* File data is modified. */
LLIF_DATA_MODIFIED = (1 << 6),
+ /* File is being restored */
+ LLIF_FILE_RESTORING = (1 << 7),
+ /* Xattr cache is attached to the file */
+ LLIF_XATTR_CACHE = (1 << 8),
};
struct ll_inode_info {
};
struct ll_inode_info {
@@
-278,8
+280,27
@@
struct ll_inode_info {
struct mutex lli_layout_mutex;
/* valid only inside LAYOUT ibits lock, protected by lli_layout_mutex */
__u32 lli_layout_gen;
struct mutex lli_layout_mutex;
/* valid only inside LAYOUT ibits lock, protected by lli_layout_mutex */
__u32 lli_layout_gen;
+
+ struct rw_semaphore lli_xattrs_list_rwsem;
+ struct mutex lli_xattrs_enq_lock;
+ struct list_head lli_xattrs; /* ll_xattr_entry->xe_list */
};
};
+int ll_xattr_cache_destroy(struct inode *inode);
+
+int ll_xattr_cache_get(struct inode *inode,
+ const char *name,
+ char *buffer,
+ size_t size,
+ __u64 valid);
+
+int ll_xattr_cache_update(struct inode *inode,
+ const char *name,
+ const char *newval,
+ size_t size,
+ __u64 valid,
+ int flags);
+
/*
* Locking to guarantee consistency of non-atomic updates to long long i_size,
* consistency between file size and KMS.
/*
* Locking to guarantee consistency of non-atomic updates to long long i_size,
* consistency between file size and KMS.
@@
-299,10
+320,10
@@
static inline struct ll_inode_info *ll_i2info(struct inode *inode)
/* default to about 40meg of readahead on a given system. That much tied
* up in 512k readahead requests serviced at 40ms each is about 1GB/s. */
/* default to about 40meg of readahead on a given system. That much tied
* up in 512k readahead requests serviced at 40ms each is about 1GB/s. */
-#define SBI_DEFAULT_READAHEAD_MAX (40UL << (20 -
CFS_PAG
E_SHIFT))
+#define SBI_DEFAULT_READAHEAD_MAX (40UL << (20 -
PAGE_CACH
E_SHIFT))
/* default to read-ahead full files smaller than 2MB on the second read */
/* default to read-ahead full files smaller than 2MB on the second read */
-#define SBI_DEFAULT_READAHEAD_WHOLE_MAX (2UL << (20 -
CFS_PAG
E_SHIFT))
+#define SBI_DEFAULT_READAHEAD_WHOLE_MAX (2UL << (20 -
PAGE_CACH
E_SHIFT))
enum ra_stat {
RA_STAT_HIT = 0,
enum ra_stat {
RA_STAT_HIT = 0,
@@
-401,6
+422,7
@@
enum stats_track_type {
#define LL_SBI_VERBOSE 0x10000 /* verbose mount/umount */
#define LL_SBI_LAYOUT_LOCK 0x20000 /* layout lock support */
#define LL_SBI_USER_FID2PATH 0x40000 /* allow fid2path by unprivileged users */
#define LL_SBI_VERBOSE 0x10000 /* verbose mount/umount */
#define LL_SBI_LAYOUT_LOCK 0x20000 /* layout lock support */
#define LL_SBI_USER_FID2PATH 0x40000 /* allow fid2path by unprivileged users */
+#define LL_SBI_XATTR_CACHE 0x80000 /* support for xattr cache */
#define LL_SBI_FLAGS { \
"nolck", \
#define LL_SBI_FLAGS { \
"nolck", \
@@
-408,6
+430,7
@@
enum stats_track_type {
"flock", \
"xattr", \
"acl", \
"flock", \
"xattr", \
"acl", \
+ "???", \
"rmt_client", \
"mds_capa", \
"oss_capa", \
"rmt_client", \
"mds_capa", \
"oss_capa", \
@@
-420,7
+443,9
@@
enum stats_track_type {
"agl", \
"verbose", \
"layout", \
"agl", \
"verbose", \
"layout", \
- "user_fid2path" }
+ "user_fid2path",\
+ "xattr", \
+}
/* default value for ll_sb_info->contention_time */
#define SBI_DEFAULT_CONTENTION_SECONDS 60
/* default value for ll_sb_info->contention_time */
#define SBI_DEFAULT_CONTENTION_SECONDS 60
@@
-468,6
+493,8
@@
struct ll_sb_info {
struct lu_fid ll_root_fid; /* root object fid */
int ll_flags;
struct lu_fid ll_root_fid; /* root object fid */
int ll_flags;
+ unsigned int ll_umounting:1,
+ ll_xattr_cache_enabled:1;
cfs_list_t ll_conn_chain; /* per-conn chain of SBs */
struct lustre_client_ocd ll_lco;
cfs_list_t ll_conn_chain; /* per-conn chain of SBs */
struct lustre_client_ocd ll_lco;
@@
-514,6
+541,7
@@
struct ll_sb_info {
* clustred nfs */
struct rmtacl_ctl_table ll_rct;
struct eacl_table ll_et;
* clustred nfs */
struct rmtacl_ctl_table ll_rct;
struct eacl_table ll_et;
+ __kernel_fsid_t ll_fsid;
};
#define LL_DEFAULT_MAX_RW_CHUNK (32 * 1024 * 1024)
};
#define LL_DEFAULT_MAX_RW_CHUNK (32 * 1024 * 1024)
@@
-611,15
+639,19
@@
struct ll_readahead_state {
unsigned long ras_consecutive_stride_requests;
};
unsigned long ras_consecutive_stride_requests;
};
-extern
cfs_mem_cache_t
*ll_file_data_slab;
+extern
struct kmem_cache
*ll_file_data_slab;
struct lustre_handle;
struct ll_file_data {
struct lustre_handle;
struct ll_file_data {
- struct ll_readahead_state fd_ras;
- int fd_omode;
- struct ccc_grouplock fd_grouplock;
+ struct ll_readahead_state fd_ras;
+ struct ccc_grouplock fd_grouplock;
__u64 lfd_pos;
__u64 lfd_pos;
- __u32 fd_flags;
- struct file *fd_file;
+ __u32 fd_flags;
+ fmode_t fd_omode;
+ /* openhandle if lease exists for this file.
+ * Borrow lli->lli_och_mutex to protect assignment */
+ struct obd_client_handle *fd_lease_och;
+ struct obd_client_handle *fd_och;
+ struct file *fd_file;
/* Indicate whether need to report failure when close.
* true: failure is known, not report again.
* false: unknown failure, should report. */
/* Indicate whether need to report failure when close.
* true: failure is known, not report again.
* false: unknown failure, should report. */
@@
-651,13
+683,18
@@
static inline int ll_need_32bit_api(struct ll_sb_info *sbi)
#if BITS_PER_LONG == 32
return 1;
#else
#if BITS_PER_LONG == 32
return 1;
#else
- return unlikely(cfs_curproc_is_32bit() || (sbi->ll_flags & LL_SBI_32BIT_API));
+ return unlikely(
+#ifdef CONFIG_COMPAT
+ is_compat_task() ||
+#endif
+ (sbi->ll_flags & LL_SBI_32BIT_API)
+ );
#endif
}
#define LLAP_MAGIC 98764321
#endif
}
#define LLAP_MAGIC 98764321
-extern
cfs_mem_cache_t
*ll_async_page_slab;
+extern
struct kmem_cache
*ll_async_page_slab;
extern size_t ll_async_page_slab_size;
void ll_ra_read_in(struct file *f, struct ll_ra_read *rar);
extern size_t ll_async_page_slab_size;
void ll_ra_read_in(struct file *f, struct ll_ra_read *rar);
@@
-733,7
+770,8
@@
extern int ll_inode_revalidate_it(struct dentry *, struct lookup_intent *,
extern int ll_have_md_lock(struct inode *inode, __u64 *bits,
ldlm_mode_t l_req_mode);
extern ldlm_mode_t ll_take_md_lock(struct inode *inode, __u64 bits,
extern int ll_have_md_lock(struct inode *inode, __u64 *bits,
ldlm_mode_t l_req_mode);
extern ldlm_mode_t ll_take_md_lock(struct inode *inode, __u64 bits,
- struct lustre_handle *lockh, __u64 flags);
+ struct lustre_handle *lockh, __u64 flags,
+ ldlm_mode_t mode);
int __ll_inode_revalidate_it(struct dentry *, struct lookup_intent *,
__u64 bits);
#ifdef HAVE_IOP_ATOMIC_OPEN
int __ll_inode_revalidate_it(struct dentry *, struct lookup_intent *,
__u64 bits);
#ifdef HAVE_IOP_ATOMIC_OPEN
@@
-783,8
+821,8
@@
int ll_inode_permission(struct inode *inode, int mask);
#endif
int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file,
#endif
int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file,
-
int
flags, struct lov_user_md *lum,
-
int lum_size);
+
__u64
flags, struct lov_user_md *lum,
+ int lum_size);
int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename,
struct lov_mds_md **lmm, int *lmm_size,
struct ptlrpc_request **request);
int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename,
struct lov_mds_md **lmm, int *lmm_size,
struct ptlrpc_request **request);
@@
-806,10
+844,16
@@
int ll_get_grouplock(struct inode *inode, struct file *file, unsigned long arg);
int ll_put_grouplock(struct inode *inode, struct file *file, unsigned long arg);
int ll_fid2path(struct inode *inode, void *arg);
int ll_data_version(struct inode *inode, __u64 *data_version, int extent_lock);
int ll_put_grouplock(struct inode *inode, struct file *file, unsigned long arg);
int ll_fid2path(struct inode *inode, void *arg);
int ll_data_version(struct inode *inode, __u64 *data_version, int extent_lock);
+int ll_hsm_release(struct inode *inode);
+
+struct obd_client_handle *ll_lease_open(struct inode *inode, struct file *file,
+ fmode_t mode, __u64 flags);
+int ll_lease_close(struct obd_client_handle *och, struct inode *inode,
+ bool *lease_broken);
/* llite/dcache.c */
/* llite/dcache.c */
-int ll_d
ops_init(struct dentry *de, int block, int init_sa
);
+int ll_d
_init(struct dentry *de
);
extern struct dentry_operations ll_d_ops;
void ll_intent_drop_lock(struct lookup_intent *);
void ll_intent_release(struct lookup_intent *);
extern struct dentry_operations ll_d_ops;
void ll_intent_drop_lock(struct lookup_intent *);
void ll_intent_release(struct lookup_intent *);
@@
-837,7
+881,7
@@
void ll_kill_super(struct super_block *sb);
struct inode *ll_inode_from_resource_lock(struct ldlm_lock *lock);
struct inode *ll_inode_from_lock(struct ldlm_lock *lock);
void ll_clear_inode(struct inode *inode);
struct inode *ll_inode_from_resource_lock(struct ldlm_lock *lock);
struct inode *ll_inode_from_lock(struct ldlm_lock *lock);
void ll_clear_inode(struct inode *inode);
-int ll_setattr_raw(struct dentry *dentry, struct iattr *attr);
+int ll_setattr_raw(struct dentry *dentry, struct iattr *attr
, bool hsm_import
);
int ll_setattr(struct dentry *de, struct iattr *attr);
int ll_statfs(struct dentry *de, struct kstatfs *sfs);
int ll_statfs_internal(struct super_block *sb, struct obd_statfs *osfs,
int ll_setattr(struct dentry *de, struct iattr *attr);
int ll_statfs(struct dentry *de, struct kstatfs *sfs);
int ll_statfs_internal(struct super_block *sb, struct obd_statfs *osfs,
@@
-848,18
+892,14
@@
void ll_delete_inode(struct inode *inode);
int ll_iocontrol(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg);
int ll_flush_ctx(struct inode *inode);
int ll_iocontrol(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg);
int ll_flush_ctx(struct inode *inode);
-#ifdef HAVE_UMOUNTBEGIN_VFSMOUNT
-void ll_umount_begin(struct vfsmount *vfsmnt, int flags);
-#else
void ll_umount_begin(struct super_block *sb);
void ll_umount_begin(struct super_block *sb);
-#endif
int ll_remount_fs(struct super_block *sb, int *flags, char *data);
#ifdef HAVE_SUPEROPS_USE_DENTRY
int ll_show_options(struct seq_file *seq, struct dentry *dentry);
#else
int ll_show_options(struct seq_file *seq, struct vfsmount *vfs);
#endif
int ll_remount_fs(struct super_block *sb, int *flags, char *data);
#ifdef HAVE_SUPEROPS_USE_DENTRY
int ll_show_options(struct seq_file *seq, struct dentry *dentry);
#else
int ll_show_options(struct seq_file *seq, struct vfsmount *vfs);
#endif
-void ll_dirty_page_discard_warn(
cfs_page_t
*page, int ioret);
+void ll_dirty_page_discard_warn(
struct page
*page, int ioret);
int ll_prep_inode(struct inode **inode, struct ptlrpc_request *req,
struct super_block *, struct lookup_intent *);
void lustre_dump_dentry(struct dentry *, int recur);
int ll_prep_inode(struct inode **inode, struct ptlrpc_request *req,
struct super_block *, struct lookup_intent *);
void lustre_dump_dentry(struct dentry *, int recur);
@@
-878,6
+918,7
@@
char *ll_get_fsname(struct super_block *sb, char *buf, int buflen);
/* llite/llite_nfs.c */
extern struct export_operations lustre_export_operations;
__u32 get_uuid2int(const char *name, int len);
/* llite/llite_nfs.c */
extern struct export_operations lustre_export_operations;
__u32 get_uuid2int(const char *name, int len);
+void get_uuid2fsid(const char *name, int len, __kernel_fsid_t *fsid);
struct inode *search_inode_for_lustre(struct super_block *sb,
const struct lu_fid *fid);
struct inode *search_inode_for_lustre(struct super_block *sb,
const struct lu_fid *fid);
@@
-942,20
+983,7
@@
struct vvp_io {
/**
* locked page returned from vvp_io
*/
/**
* locked page returned from vvp_io
*/
- cfs_page_t *ft_vmpage;
-#ifndef HAVE_VM_OP_FAULT
- struct vm_nopage_api {
- /**
- * Virtual address at which fault occurred.
- */
- unsigned long ft_address;
- /**
- * Fault type, as to be supplied to
- * filemap_nopage().
- */
- int *ft_type;
- } nopage;
-#else
+ struct page *ft_vmpage;
struct vm_fault_api {
/**
* kernel fault info
struct vm_fault_api {
/**
* kernel fault info
@@
-966,7
+994,6
@@
struct vvp_io {
*/
unsigned int ft_flags;
} fault;
*/
unsigned int ft_flags;
} fault;
-#endif
} fault;
} u;
/**
} fault;
} u;
/**
@@
-993,9
+1020,7
@@
struct vvp_io_args {
union {
struct {
union {
struct {
-#ifndef HAVE_FILE_WRITEV
struct kiocb *via_iocb;
struct kiocb *via_iocb;
-#endif
struct iovec *via_iov;
unsigned long via_nrsegs;
} normal;
struct iovec *via_iov;
unsigned long via_nrsegs;
} normal;
@@
-1101,7
+1126,7
@@
static inline void ll_invalidate_page(struct page *vmpage)
if (mapping == NULL)
return;
if (mapping == NULL)
return;
-
ll_teardown_mmaps(mapping, offset, offset + CFS_PAG
E_SIZE);
+
ll_teardown_mmaps(mapping, offset, offset + PAGE_CACH
E_SIZE);
truncate_complete_page(mapping, vmpage);
}
truncate_complete_page(mapping, vmpage);
}
@@
-1172,8
+1197,8
@@
ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size);
int ll_removexattr(struct dentry *dentry, const char *name);
/* llite/remote_perm.c */
int ll_removexattr(struct dentry *dentry, const char *name);
/* llite/remote_perm.c */
-extern
cfs_mem_cache_t
*ll_remote_perm_cachep;
-extern
cfs_mem_cache_t
*ll_rmtperm_hash_cachep;
+extern
struct kmem_cache
*ll_remote_perm_cachep;
+extern
struct kmem_cache
*ll_rmtperm_hash_cachep;
cfs_hlist_head_t *alloc_rmtperm_hash(void);
void free_rmtperm_hash(cfs_hlist_head_t *hash);
cfs_hlist_head_t *alloc_rmtperm_hash(void);
void free_rmtperm_hash(cfs_hlist_head_t *hash);
@@
-1280,7
+1305,7
@@
struct ll_statahead_info {
cfs_waitq_t sai_waitq; /* stat-ahead wait queue */
struct ptlrpc_thread sai_thread; /* stat-ahead thread */
struct ptlrpc_thread sai_agl_thread; /* AGL thread */
cfs_waitq_t sai_waitq; /* stat-ahead wait queue */
struct ptlrpc_thread sai_thread; /* stat-ahead thread */
struct ptlrpc_thread sai_agl_thread; /* AGL thread */
-
cfs_list_t sai_entries_sent; /* entries sent ou
t */
+
cfs_list_t sai_entries; /* entry lis
t */
cfs_list_t sai_entries_received; /* entries returned */
cfs_list_t sai_entries_stated; /* entries stated */
cfs_list_t sai_entries_agl; /* AGL entries to be sent */
cfs_list_t sai_entries_received; /* entries returned */
cfs_list_t sai_entries_stated; /* entries stated */
cfs_list_t sai_entries_agl; /* AGL entries to be sent */
@@
-1316,8
+1341,9
@@
ll_statahead_mark(struct inode *dir, struct dentry *dentry)
if (lli->lli_opendir_pid != cfs_curproc_pid())
return;
if (lli->lli_opendir_pid != cfs_curproc_pid())
return;
- if (sai != NULL && ldd != NULL)
- ldd->lld_sa_generation = sai->sai_generation;
+ LASSERT(ldd != NULL);
+ if (sai != NULL)
+ ldd->lld_sa_generation = sai->sai_generation;
}
static inline int
}
static inline int
@@
-1445,8
+1471,8
@@
static inline void cl_isize_unlock(struct inode *inode)
static inline void cl_isize_write_nolock(struct inode *inode, loff_t kms)
{
static inline void cl_isize_write_nolock(struct inode *inode, loff_t kms)
{
-
LASSERT_SEM_LOCKED(&ll_i2info(inode)->lli_size_sem
);
-
i_size_write(inode, kms);
+
LASSERT(down_trylock(&ll_i2info(inode)->lli_size_sem) != 0
);
+ i_size_write(inode, kms);
}
static inline void cl_isize_write(struct inode *inode, loff_t kms)
}
static inline void cl_isize_write(struct inode *inode, loff_t kms)
@@
-1470,7
+1496,7
@@
static inline int cl_merge_lvb(const struct lu_env *env, struct inode *inode)
struct obd_capa *cl_capa_lookup(struct inode *inode, enum cl_req_type crt);
int cl_sync_file_range(struct inode *inode, loff_t start, loff_t end,
struct obd_capa *cl_capa_lookup(struct inode *inode, enum cl_req_type crt);
int cl_sync_file_range(struct inode *inode, loff_t start, loff_t end,
- enum cl_fsync_mode mode);
+ enum cl_fsync_mode mode
, int ignore_layout
);
/** direct write pages */
struct ll_dio_pages {
/** direct write pages */
struct ll_dio_pages {
@@
-1587,13
+1613,14
@@
static inline void __d_lustre_invalidate(struct dentry *dentry)
* ll_md_blocking_ast), unhash this dentry, and let dcache to reclaim it later;
* else dput() of the last refcount will unhash this dentry and kill it.
*/
* ll_md_blocking_ast), unhash this dentry, and let dcache to reclaim it later;
* else dput() of the last refcount will unhash this dentry and kill it.
*/
-static inline void d_lustre_invalidate(struct dentry *dentry)
+static inline void d_lustre_invalidate(struct dentry *dentry
, int nested
)
{
CDEBUG(D_DENTRY, "invalidate dentry %.*s (%p) parent %p inode %p "
"refc %d\n", dentry->d_name.len, dentry->d_name.name, dentry,
dentry->d_parent, dentry->d_inode, d_refcount(dentry));
{
CDEBUG(D_DENTRY, "invalidate dentry %.*s (%p) parent %p inode %p "
"refc %d\n", dentry->d_name.len, dentry->d_name.name, dentry,
dentry->d_parent, dentry->d_inode, d_refcount(dentry));
- spin_lock(&dentry->d_lock);
+ spin_lock_nested(&dentry->d_lock,
+ nested ? DENTRY_D_LOCK_NESTED : DENTRY_D_LOCK_NORMAL);
__d_lustre_invalidate(dentry);
if (d_refcount(dentry) == 0)
__d_drop(dentry);
__d_lustre_invalidate(dentry);
if (d_refcount(dentry) == 0)
__d_drop(dentry);
@@
-1633,5
+1660,9
@@
enum {
int ll_layout_conf(struct inode *inode, const struct cl_object_conf *conf);
int ll_layout_refresh(struct inode *inode, __u32 *gen);
int ll_layout_conf(struct inode *inode, const struct cl_object_conf *conf);
int ll_layout_refresh(struct inode *inode, __u32 *gen);
+int ll_layout_restore(struct inode *inode);
+
+int ll_xattr_init(void);
+void ll_xattr_fini(void);
#endif /* LLITE_INTERNAL_H */
#endif /* LLITE_INTERNAL_H */