Merge upstream 2.6.13-rc3 into ieee80211 branch of netdev-2.6.
This commit is contained in:
@@ -206,7 +206,10 @@ struct acpi_table_plat_int_src {
|
||||
u8 eid;
|
||||
u8 iosapic_vector;
|
||||
u32 global_irq;
|
||||
u32 reserved;
|
||||
struct {
|
||||
u32 cpei_override_flag:1;
|
||||
u32 reserved:31;
|
||||
} plint_flags;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
enum acpi_interrupt_id {
|
||||
@@ -475,7 +478,7 @@ struct acpi_prt_list {
|
||||
struct pci_dev;
|
||||
|
||||
int acpi_pci_irq_enable (struct pci_dev *dev);
|
||||
void acpi_penalize_isa_irq(int irq);
|
||||
void acpi_penalize_isa_irq(int irq, int active);
|
||||
|
||||
#ifdef CONFIG_ACPI_DEALLOCATE_IRQ
|
||||
void acpi_pci_irq_disable (struct pci_dev *dev);
|
||||
|
@@ -165,7 +165,7 @@
|
||||
#define AUDIT_ARCH_SH64 (EM_SH|__AUDIT_ARCH_64BIT)
|
||||
#define AUDIT_ARCH_SHEL64 (EM_SH|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
|
||||
#define AUDIT_ARCH_SPARC (EM_SPARC)
|
||||
#define AUDIT_ARCH_SPARC64 (EM_SPARC64|__AUDIT_ARCH_64BIT)
|
||||
#define AUDIT_ARCH_SPARC64 (EM_SPARCV9|__AUDIT_ARCH_64BIT)
|
||||
#define AUDIT_ARCH_V850 (EM_V850|__AUDIT_ARCH_LE)
|
||||
#define AUDIT_ARCH_X86_64 (EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
|
||||
|
||||
|
@@ -19,6 +19,9 @@ enum bh_state_bits {
|
||||
BH_Dirty, /* Is dirty */
|
||||
BH_Lock, /* Is locked */
|
||||
BH_Req, /* Has been submitted for I/O */
|
||||
BH_Uptodate_Lock,/* Used by the first bh in a page, to serialise
|
||||
* IO completion of other buffers in the page
|
||||
*/
|
||||
|
||||
BH_Mapped, /* Has a disk mapping */
|
||||
BH_New, /* Disk mapping was newly created by get_block */
|
||||
|
@@ -13,6 +13,12 @@
|
||||
#define SMP_CACHE_BYTES L1_CACHE_BYTES
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_X86) || defined(CONFIG_SPARC64)
|
||||
#define __read_mostly __attribute__((__section__(".data.read_mostly")))
|
||||
#else
|
||||
#define __read_mostly
|
||||
#endif
|
||||
|
||||
#ifndef ____cacheline_aligned
|
||||
#define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES)))
|
||||
#endif
|
||||
|
@@ -346,10 +346,27 @@ COMPATIBLE_IOCTL(PPPOEIOCDFWD)
|
||||
/* LP */
|
||||
COMPATIBLE_IOCTL(LPGETSTATUS)
|
||||
/* ppdev */
|
||||
COMPATIBLE_IOCTL(PPSETMODE)
|
||||
COMPATIBLE_IOCTL(PPRSTATUS)
|
||||
COMPATIBLE_IOCTL(PPRCONTROL)
|
||||
COMPATIBLE_IOCTL(PPWCONTROL)
|
||||
COMPATIBLE_IOCTL(PPFCONTROL)
|
||||
COMPATIBLE_IOCTL(PPRDATA)
|
||||
COMPATIBLE_IOCTL(PPWDATA)
|
||||
COMPATIBLE_IOCTL(PPCLAIM)
|
||||
COMPATIBLE_IOCTL(PPRELEASE)
|
||||
COMPATIBLE_IOCTL(PPEXCL)
|
||||
COMPATIBLE_IOCTL(PPYIELD)
|
||||
COMPATIBLE_IOCTL(PPEXCL)
|
||||
COMPATIBLE_IOCTL(PPDATADIR)
|
||||
COMPATIBLE_IOCTL(PPNEGOT)
|
||||
COMPATIBLE_IOCTL(PPWCTLONIRQ)
|
||||
COMPATIBLE_IOCTL(PPCLRIRQ)
|
||||
COMPATIBLE_IOCTL(PPSETPHASE)
|
||||
COMPATIBLE_IOCTL(PPGETMODES)
|
||||
COMPATIBLE_IOCTL(PPGETMODE)
|
||||
COMPATIBLE_IOCTL(PPGETPHASE)
|
||||
COMPATIBLE_IOCTL(PPGETFLAGS)
|
||||
COMPATIBLE_IOCTL(PPSETFLAGS)
|
||||
/* CDROM stuff */
|
||||
COMPATIBLE_IOCTL(CDROMPAUSE)
|
||||
COMPATIBLE_IOCTL(CDROMRESUME)
|
||||
|
@@ -201,7 +201,7 @@ struct cpufreq_driver {
|
||||
|
||||
/* optional */
|
||||
int (*exit) (struct cpufreq_policy *policy);
|
||||
int (*suspend) (struct cpufreq_policy *policy, u32 state);
|
||||
int (*suspend) (struct cpufreq_policy *policy, pm_message_t pmsg);
|
||||
int (*resume) (struct cpufreq_policy *policy);
|
||||
struct freq_attr **attr;
|
||||
};
|
||||
|
@@ -61,6 +61,15 @@
|
||||
#define CRYPTO_DIR_DECRYPT 0
|
||||
|
||||
struct scatterlist;
|
||||
struct crypto_tfm;
|
||||
|
||||
struct cipher_desc {
|
||||
struct crypto_tfm *tfm;
|
||||
void (*crfn)(void *ctx, u8 *dst, const u8 *src);
|
||||
unsigned int (*prfn)(const struct cipher_desc *desc, u8 *dst,
|
||||
const u8 *src, unsigned int nbytes);
|
||||
void *info;
|
||||
};
|
||||
|
||||
/*
|
||||
* Algorithms: modular crypto algorithm implementations, managed
|
||||
@@ -73,6 +82,19 @@ struct cipher_alg {
|
||||
unsigned int keylen, u32 *flags);
|
||||
void (*cia_encrypt)(void *ctx, u8 *dst, const u8 *src);
|
||||
void (*cia_decrypt)(void *ctx, u8 *dst, const u8 *src);
|
||||
|
||||
unsigned int (*cia_encrypt_ecb)(const struct cipher_desc *desc,
|
||||
u8 *dst, const u8 *src,
|
||||
unsigned int nbytes);
|
||||
unsigned int (*cia_decrypt_ecb)(const struct cipher_desc *desc,
|
||||
u8 *dst, const u8 *src,
|
||||
unsigned int nbytes);
|
||||
unsigned int (*cia_encrypt_cbc)(const struct cipher_desc *desc,
|
||||
u8 *dst, const u8 *src,
|
||||
unsigned int nbytes);
|
||||
unsigned int (*cia_decrypt_cbc)(const struct cipher_desc *desc,
|
||||
u8 *dst, const u8 *src,
|
||||
unsigned int nbytes);
|
||||
};
|
||||
|
||||
struct digest_alg {
|
||||
@@ -102,6 +124,7 @@ struct crypto_alg {
|
||||
u32 cra_flags;
|
||||
unsigned int cra_blocksize;
|
||||
unsigned int cra_ctxsize;
|
||||
unsigned int cra_alignmask;
|
||||
const char cra_name[CRYPTO_MAX_ALG_NAME];
|
||||
|
||||
union {
|
||||
@@ -136,7 +159,6 @@ static inline int crypto_alg_available(const char *name, u32 flags)
|
||||
* and core processing logic. Managed via crypto_alloc_tfm() and
|
||||
* crypto_free_tfm(), as well as the various helpers below.
|
||||
*/
|
||||
struct crypto_tfm;
|
||||
|
||||
struct cipher_tfm {
|
||||
void *cit_iv;
|
||||
@@ -266,6 +288,16 @@ static inline unsigned int crypto_tfm_alg_digestsize(struct crypto_tfm *tfm)
|
||||
return tfm->__crt_alg->cra_digest.dia_digestsize;
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_tfm_alg_alignmask(struct crypto_tfm *tfm)
|
||||
{
|
||||
return tfm->__crt_alg->cra_alignmask;
|
||||
}
|
||||
|
||||
static inline void *crypto_tfm_ctx(struct crypto_tfm *tfm)
|
||||
{
|
||||
return (void *)&tfm[1];
|
||||
}
|
||||
|
||||
/*
|
||||
* API wrappers.
|
||||
*/
|
||||
|
@@ -69,7 +69,7 @@ struct bus_type {
|
||||
extern int bus_register(struct bus_type * bus);
|
||||
extern void bus_unregister(struct bus_type * bus);
|
||||
|
||||
extern int bus_rescan_devices(struct bus_type * bus);
|
||||
extern void bus_rescan_devices(struct bus_type * bus);
|
||||
|
||||
extern struct bus_type * get_bus(struct bus_type * bus);
|
||||
extern void put_bus(struct bus_type * bus);
|
||||
@@ -80,6 +80,8 @@ extern struct bus_type * find_bus(char * name);
|
||||
|
||||
int bus_for_each_dev(struct bus_type * bus, struct device * start, void * data,
|
||||
int (*fn)(struct device *, void *));
|
||||
struct device * bus_find_device(struct bus_type *bus, struct device *start,
|
||||
void *data, int (*match)(struct device *, void *));
|
||||
|
||||
int bus_for_each_drv(struct bus_type * bus, struct device_driver * start,
|
||||
void * data, int (*fn)(struct device_driver *, void *));
|
||||
@@ -142,6 +144,9 @@ extern void driver_remove_file(struct device_driver *, struct driver_attribute *
|
||||
|
||||
extern int driver_for_each_device(struct device_driver * drv, struct device * start,
|
||||
void * data, int (*fn)(struct device *, void *));
|
||||
struct device * driver_find_device(struct device_driver *drv,
|
||||
struct device *start, void *data,
|
||||
int (*match)(struct device *, void *));
|
||||
|
||||
|
||||
/*
|
||||
@@ -279,8 +284,10 @@ struct device {
|
||||
struct device_driver *driver; /* which driver has allocated this
|
||||
device */
|
||||
void *driver_data; /* data private to the driver */
|
||||
void *platform_data; /* Platform specific data (e.g. ACPI,
|
||||
BIOS data relevant to device) */
|
||||
void *platform_data; /* Platform specific data, device
|
||||
core doesn't touch it */
|
||||
void *firmware_data; /* Firmware specific data (e.g. ACPI,
|
||||
BIOS data),reserved for device core*/
|
||||
struct dev_pm_info power;
|
||||
|
||||
u64 *dma_mask; /* dma mask (if dma'able device) */
|
||||
|
@@ -33,7 +33,7 @@ extern int eth_header(struct sk_buff *skb, struct net_device *dev,
|
||||
unsigned short type, void *daddr,
|
||||
void *saddr, unsigned len);
|
||||
extern int eth_rebuild_header(struct sk_buff *skb);
|
||||
extern unsigned short eth_type_trans(struct sk_buff *skb, struct net_device *dev);
|
||||
extern __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev);
|
||||
extern void eth_header_cache_update(struct hh_cache *hh, struct net_device *dev,
|
||||
unsigned char * haddr);
|
||||
extern int eth_header_cache(struct neighbour *neigh,
|
||||
|
@@ -238,6 +238,20 @@ struct ext3_new_group_data {
|
||||
#define EXT3_IOC_GETRSVSZ _IOR('f', 5, long)
|
||||
#define EXT3_IOC_SETRSVSZ _IOW('f', 6, long)
|
||||
|
||||
/*
|
||||
* Mount options
|
||||
*/
|
||||
struct ext3_mount_options {
|
||||
unsigned long s_mount_opt;
|
||||
uid_t s_resuid;
|
||||
gid_t s_resgid;
|
||||
unsigned long s_commit_interval;
|
||||
#ifdef CONFIG_QUOTA
|
||||
int s_jquota_fmt;
|
||||
char *s_qf_names[MAXQUOTAS];
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure of an inode on the disk
|
||||
*/
|
||||
|
@@ -25,7 +25,7 @@
|
||||
#include <linux/if_fddi.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
extern unsigned short fddi_type_trans(struct sk_buff *skb,
|
||||
extern __be16 fddi_type_trans(struct sk_buff *skb,
|
||||
struct net_device *dev);
|
||||
extern struct net_device *alloc_fddidev(int sizeof_priv);
|
||||
#endif
|
||||
|
@@ -474,6 +474,11 @@ struct inode {
|
||||
struct dnotify_struct *i_dnotify; /* for directory notifications */
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_INOTIFY
|
||||
struct list_head inotify_watches; /* watches on this inode */
|
||||
struct semaphore inotify_sem; /* protects the watches list */
|
||||
#endif
|
||||
|
||||
unsigned long i_state;
|
||||
unsigned long dirtied_when; /* jiffies of first dirtying */
|
||||
|
||||
@@ -1393,7 +1398,6 @@ extern void emergency_remount(void);
|
||||
extern int do_remount_sb(struct super_block *sb, int flags,
|
||||
void *data, int force);
|
||||
extern sector_t bmap(struct inode *, sector_t);
|
||||
extern int setattr_mask(unsigned int);
|
||||
extern int notify_change(struct dentry *, struct iattr *);
|
||||
extern int permission(struct inode *, int, struct nameidata *);
|
||||
extern int generic_permission(struct inode *, int,
|
||||
@@ -1435,6 +1439,7 @@ extern struct inode * igrab(struct inode *);
|
||||
extern ino_t iunique(struct super_block *, ino_t);
|
||||
extern int inode_needs_sync(struct inode *inode);
|
||||
extern void generic_delete_inode(struct inode *inode);
|
||||
extern void generic_drop_inode(struct inode *inode);
|
||||
|
||||
extern struct inode *ilookup5(struct super_block *sb, unsigned long hashval,
|
||||
int (*test)(struct inode *, void *), void *data);
|
||||
|
248
include/linux/fsnotify.h
Normal file
248
include/linux/fsnotify.h
Normal file
@@ -0,0 +1,248 @@
|
||||
#ifndef _LINUX_FS_NOTIFY_H
|
||||
#define _LINUX_FS_NOTIFY_H
|
||||
|
||||
/*
|
||||
* include/linux/fsnotify.h - generic hooks for filesystem notification, to
|
||||
* reduce in-source duplication from both dnotify and inotify.
|
||||
*
|
||||
* We don't compile any of this away in some complicated menagerie of ifdefs.
|
||||
* Instead, we rely on the code inside to optimize away as needed.
|
||||
*
|
||||
* (C) Copyright 2005 Robert Love
|
||||
*/
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/dnotify.h>
|
||||
#include <linux/inotify.h>
|
||||
|
||||
/*
|
||||
* fsnotify_move - file old_name at old_dir was moved to new_name at new_dir
|
||||
*/
|
||||
static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir,
|
||||
const char *old_name, const char *new_name,
|
||||
int isdir)
|
||||
{
|
||||
u32 cookie = inotify_get_cookie();
|
||||
|
||||
if (old_dir == new_dir)
|
||||
inode_dir_notify(old_dir, DN_RENAME);
|
||||
else {
|
||||
inode_dir_notify(old_dir, DN_DELETE);
|
||||
inode_dir_notify(new_dir, DN_CREATE);
|
||||
}
|
||||
|
||||
if (isdir)
|
||||
isdir = IN_ISDIR;
|
||||
inotify_inode_queue_event(old_dir, IN_MOVED_FROM|isdir,cookie,old_name);
|
||||
inotify_inode_queue_event(new_dir, IN_MOVED_TO|isdir, cookie, new_name);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_unlink - file was unlinked
|
||||
*/
|
||||
static inline void fsnotify_unlink(struct dentry *dentry, struct inode *dir)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
|
||||
inode_dir_notify(dir, DN_DELETE);
|
||||
inotify_inode_queue_event(dir, IN_DELETE, 0, dentry->d_name.name);
|
||||
inotify_inode_queue_event(inode, IN_DELETE_SELF, 0, NULL);
|
||||
|
||||
inotify_inode_is_dead(inode);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_rmdir - directory was removed
|
||||
*/
|
||||
static inline void fsnotify_rmdir(struct dentry *dentry, struct inode *inode,
|
||||
struct inode *dir)
|
||||
{
|
||||
inode_dir_notify(dir, DN_DELETE);
|
||||
inotify_inode_queue_event(dir,IN_DELETE|IN_ISDIR,0,dentry->d_name.name);
|
||||
inotify_inode_queue_event(inode, IN_DELETE_SELF | IN_ISDIR, 0, NULL);
|
||||
inotify_inode_is_dead(inode);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_create - 'name' was linked in
|
||||
*/
|
||||
static inline void fsnotify_create(struct inode *inode, const char *name)
|
||||
{
|
||||
inode_dir_notify(inode, DN_CREATE);
|
||||
inotify_inode_queue_event(inode, IN_CREATE, 0, name);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_mkdir - directory 'name' was created
|
||||
*/
|
||||
static inline void fsnotify_mkdir(struct inode *inode, const char *name)
|
||||
{
|
||||
inode_dir_notify(inode, DN_CREATE);
|
||||
inotify_inode_queue_event(inode, IN_CREATE | IN_ISDIR, 0, name);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_access - file was read
|
||||
*/
|
||||
static inline void fsnotify_access(struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
u32 mask = IN_ACCESS;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
mask |= IN_ISDIR;
|
||||
|
||||
dnotify_parent(dentry, DN_ACCESS);
|
||||
inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name);
|
||||
inotify_inode_queue_event(inode, mask, 0, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_modify - file was modified
|
||||
*/
|
||||
static inline void fsnotify_modify(struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
u32 mask = IN_MODIFY;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
mask |= IN_ISDIR;
|
||||
|
||||
dnotify_parent(dentry, DN_MODIFY);
|
||||
inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name);
|
||||
inotify_inode_queue_event(inode, mask, 0, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_open - file was opened
|
||||
*/
|
||||
static inline void fsnotify_open(struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
u32 mask = IN_OPEN;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
mask |= IN_ISDIR;
|
||||
|
||||
inotify_inode_queue_event(inode, mask, 0, NULL);
|
||||
inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_close - file was closed
|
||||
*/
|
||||
static inline void fsnotify_close(struct file *file)
|
||||
{
|
||||
struct dentry *dentry = file->f_dentry;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
const char *name = dentry->d_name.name;
|
||||
mode_t mode = file->f_mode;
|
||||
u32 mask = (mode & FMODE_WRITE) ? IN_CLOSE_WRITE : IN_CLOSE_NOWRITE;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
mask |= IN_ISDIR;
|
||||
|
||||
inotify_dentry_parent_queue_event(dentry, mask, 0, name);
|
||||
inotify_inode_queue_event(inode, mask, 0, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_xattr - extended attributes were changed
|
||||
*/
|
||||
static inline void fsnotify_xattr(struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
u32 mask = IN_ATTRIB;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
mask |= IN_ISDIR;
|
||||
|
||||
inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name);
|
||||
inotify_inode_queue_event(inode, mask, 0, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_change - notify_change event. file was modified and/or metadata
|
||||
* was changed.
|
||||
*/
|
||||
static inline void fsnotify_change(struct dentry *dentry, unsigned int ia_valid)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
int dn_mask = 0;
|
||||
u32 in_mask = 0;
|
||||
|
||||
if (ia_valid & ATTR_UID) {
|
||||
in_mask |= IN_ATTRIB;
|
||||
dn_mask |= DN_ATTRIB;
|
||||
}
|
||||
if (ia_valid & ATTR_GID) {
|
||||
in_mask |= IN_ATTRIB;
|
||||
dn_mask |= DN_ATTRIB;
|
||||
}
|
||||
if (ia_valid & ATTR_SIZE) {
|
||||
in_mask |= IN_MODIFY;
|
||||
dn_mask |= DN_MODIFY;
|
||||
}
|
||||
/* both times implies a utime(s) call */
|
||||
if ((ia_valid & (ATTR_ATIME | ATTR_MTIME)) == (ATTR_ATIME | ATTR_MTIME))
|
||||
{
|
||||
in_mask |= IN_ATTRIB;
|
||||
dn_mask |= DN_ATTRIB;
|
||||
} else if (ia_valid & ATTR_ATIME) {
|
||||
in_mask |= IN_ACCESS;
|
||||
dn_mask |= DN_ACCESS;
|
||||
} else if (ia_valid & ATTR_MTIME) {
|
||||
in_mask |= IN_MODIFY;
|
||||
dn_mask |= DN_MODIFY;
|
||||
}
|
||||
if (ia_valid & ATTR_MODE) {
|
||||
in_mask |= IN_ATTRIB;
|
||||
dn_mask |= DN_ATTRIB;
|
||||
}
|
||||
|
||||
if (dn_mask)
|
||||
dnotify_parent(dentry, dn_mask);
|
||||
if (in_mask) {
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
in_mask |= IN_ISDIR;
|
||||
inotify_inode_queue_event(inode, in_mask, 0, NULL);
|
||||
inotify_dentry_parent_queue_event(dentry, in_mask, 0,
|
||||
dentry->d_name.name);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_INOTIFY /* inotify helpers */
|
||||
|
||||
/*
|
||||
* fsnotify_oldname_init - save off the old filename before we change it
|
||||
*/
|
||||
static inline const char *fsnotify_oldname_init(const char *name)
|
||||
{
|
||||
return kstrdup(name, GFP_KERNEL);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_oldname_free - free the name we got from fsnotify_oldname_init
|
||||
*/
|
||||
static inline void fsnotify_oldname_free(const char *old_name)
|
||||
{
|
||||
kfree(old_name);
|
||||
}
|
||||
|
||||
#else /* CONFIG_INOTIFY */
|
||||
|
||||
static inline const char *fsnotify_oldname_init(const char *name)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void fsnotify_oldname_free(const char *old_name)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* ! CONFIG_INOTIFY */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _LINUX_FS_NOTIFY_H */
|
@@ -12,8 +12,8 @@ struct vm_area_struct;
|
||||
* GFP bitmasks..
|
||||
*/
|
||||
/* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low two bits) */
|
||||
#define __GFP_DMA 0x01
|
||||
#define __GFP_HIGHMEM 0x02
|
||||
#define __GFP_DMA 0x01u
|
||||
#define __GFP_HIGHMEM 0x02u
|
||||
|
||||
/*
|
||||
* Action modifiers - doesn't change the zoning
|
||||
|
@@ -2,6 +2,7 @@
|
||||
#define LINUX_HARDIRQ_H
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/preempt.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <asm/hardirq.h>
|
||||
#include <asm/system.h>
|
||||
|
@@ -242,8 +242,8 @@ static __inline__ struct net_device_stats *hdlc_stats(struct net_device *dev)
|
||||
}
|
||||
|
||||
|
||||
static __inline__ unsigned short hdlc_type_trans(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
static __inline__ __be16 hdlc_type_trans(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
{
|
||||
hdlc_device *hdlc = dev_to_hdlc(dev);
|
||||
|
||||
|
@@ -23,7 +23,7 @@ struct shaper
|
||||
__u32 shapeclock;
|
||||
unsigned long recovery; /* Time we can next clock a packet out on
|
||||
an empty queue */
|
||||
struct semaphore sem;
|
||||
spinlock_t lock;
|
||||
struct net_device_stats stats;
|
||||
struct net_device *dev;
|
||||
int (*hard_start_xmit) (struct sk_buff *skb,
|
||||
|
@@ -148,7 +148,6 @@ struct ip_sf_socklist
|
||||
struct ip_mc_socklist
|
||||
{
|
||||
struct ip_mc_socklist *next;
|
||||
int count;
|
||||
struct ip_mreqn multi;
|
||||
unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */
|
||||
struct ip_sf_socklist *sflist;
|
||||
|
108
include/linux/inotify.h
Normal file
108
include/linux/inotify.h
Normal file
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Inode based directory notification for Linux
|
||||
*
|
||||
* Copyright (C) 2005 John McCutchan
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_INOTIFY_H
|
||||
#define _LINUX_INOTIFY_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/*
|
||||
* struct inotify_event - structure read from the inotify device for each event
|
||||
*
|
||||
* When you are watching a directory, you will receive the filename for events
|
||||
* such as IN_CREATE, IN_DELETE, IN_OPEN, IN_CLOSE, ..., relative to the wd.
|
||||
*/
|
||||
struct inotify_event {
|
||||
__s32 wd; /* watch descriptor */
|
||||
__u32 mask; /* watch mask */
|
||||
__u32 cookie; /* cookie to synchronize two events */
|
||||
__u32 len; /* length (including nulls) of name */
|
||||
char name[0]; /* stub for possible name */
|
||||
};
|
||||
|
||||
/* the following are legal, implemented events that user-space can watch for */
|
||||
#define IN_ACCESS 0x00000001 /* File was accessed */
|
||||
#define IN_MODIFY 0x00000002 /* File was modified */
|
||||
#define IN_ATTRIB 0x00000004 /* Metadata changed */
|
||||
#define IN_CLOSE_WRITE 0x00000008 /* Writtable file was closed */
|
||||
#define IN_CLOSE_NOWRITE 0x00000010 /* Unwrittable file closed */
|
||||
#define IN_OPEN 0x00000020 /* File was opened */
|
||||
#define IN_MOVED_FROM 0x00000040 /* File was moved from X */
|
||||
#define IN_MOVED_TO 0x00000080 /* File was moved to Y */
|
||||
#define IN_CREATE 0x00000100 /* Subfile was created */
|
||||
#define IN_DELETE 0x00000200 /* Subfile was deleted */
|
||||
#define IN_DELETE_SELF 0x00000400 /* Self was deleted */
|
||||
|
||||
/* the following are legal events. they are sent as needed to any watch */
|
||||
#define IN_UNMOUNT 0x00002000 /* Backing fs was unmounted */
|
||||
#define IN_Q_OVERFLOW 0x00004000 /* Event queued overflowed */
|
||||
#define IN_IGNORED 0x00008000 /* File was ignored */
|
||||
|
||||
/* helper events */
|
||||
#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* close */
|
||||
#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* moves */
|
||||
|
||||
/* special flags */
|
||||
#define IN_ISDIR 0x40000000 /* event occurred against dir */
|
||||
#define IN_ONESHOT 0x80000000 /* only send event once */
|
||||
|
||||
/*
|
||||
* All of the events - we build the list by hand so that we can add flags in
|
||||
* the future and not break backward compatibility. Apps will get only the
|
||||
* events that they originally wanted. Be sure to add new events here!
|
||||
*/
|
||||
#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | \
|
||||
IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | \
|
||||
IN_MOVED_TO | IN_DELETE | IN_CREATE | IN_DELETE_SELF)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/dcache.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/config.h>
|
||||
|
||||
#ifdef CONFIG_INOTIFY
|
||||
|
||||
extern void inotify_inode_queue_event(struct inode *, __u32, __u32,
|
||||
const char *);
|
||||
extern void inotify_dentry_parent_queue_event(struct dentry *, __u32, __u32,
|
||||
const char *);
|
||||
extern void inotify_unmount_inodes(struct list_head *);
|
||||
extern void inotify_inode_is_dead(struct inode *);
|
||||
extern u32 inotify_get_cookie(void);
|
||||
|
||||
#else
|
||||
|
||||
static inline void inotify_inode_queue_event(struct inode *inode,
|
||||
__u32 mask, __u32 cookie,
|
||||
const char *filename)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void inotify_dentry_parent_queue_event(struct dentry *dentry,
|
||||
__u32 mask, __u32 cookie,
|
||||
const char *filename)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void inotify_unmount_inodes(struct list_head *list)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void inotify_inode_is_dead(struct inode *inode)
|
||||
{
|
||||
}
|
||||
|
||||
static inline u32 inotify_get_cookie(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_INOTIFY */
|
||||
|
||||
#endif /* __KERNEL __ */
|
||||
|
||||
#endif /* _LINUX_INOTIFY_H */
|
@@ -34,9 +34,6 @@ enum {
|
||||
*/
|
||||
#define IOPRIO_BE_NR (8)
|
||||
|
||||
asmlinkage int sys_ioprio_set(int, int, int);
|
||||
asmlinkage int sys_ioprio_get(int, int);
|
||||
|
||||
enum {
|
||||
IOPRIO_WHO_PROCESS = 1,
|
||||
IOPRIO_WHO_PGRP,
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: jffs2_fs_sb.h,v 1.48 2004/11/20 10:41:12 dwmw2 Exp $ */
|
||||
/* $Id: jffs2_fs_sb.h,v 1.52 2005/05/19 16:12:17 gleixner Exp $ */
|
||||
|
||||
#ifndef _JFFS2_FS_SB
|
||||
#define _JFFS2_FS_SB
|
||||
@@ -14,7 +14,8 @@
|
||||
#include <linux/rwsem.h>
|
||||
|
||||
#define JFFS2_SB_FLAG_RO 1
|
||||
#define JFFS2_SB_FLAG_MOUNTING 2
|
||||
#define JFFS2_SB_FLAG_SCANNING 2 /* Flash scanning is in progress */
|
||||
#define JFFS2_SB_FLAG_BUILDING 4 /* File system building is in progress */
|
||||
|
||||
struct jffs2_inodirty;
|
||||
|
||||
@@ -31,7 +32,7 @@ struct jffs2_sb_info {
|
||||
unsigned int flags;
|
||||
|
||||
struct task_struct *gc_task; /* GC task struct */
|
||||
struct semaphore gc_thread_start; /* GC thread start mutex */
|
||||
struct completion gc_thread_start; /* GC thread start completion */
|
||||
struct completion gc_thread_exit; /* GC thread exit completion port */
|
||||
|
||||
struct semaphore alloc_sem; /* Used to protect all the following
|
||||
@@ -94,7 +95,7 @@ struct jffs2_sb_info {
|
||||
to an obsoleted node. I don't like this. Alternatives welcomed. */
|
||||
struct semaphore erase_free_sem;
|
||||
|
||||
#if defined CONFIG_JFFS2_FS_NAND || defined CONFIG_JFFS2_FS_NOR_ECC
|
||||
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
|
||||
/* Write-behind buffer for NAND flash */
|
||||
unsigned char *wbuf;
|
||||
uint32_t wbuf_ofs;
|
||||
|
@@ -155,7 +155,7 @@ extern void arch_copy_kprobe(struct kprobe *p);
|
||||
extern void arch_arm_kprobe(struct kprobe *p);
|
||||
extern void arch_disarm_kprobe(struct kprobe *p);
|
||||
extern void arch_remove_kprobe(struct kprobe *p);
|
||||
extern int arch_init(void);
|
||||
extern int arch_init_kprobes(void);
|
||||
extern void show_registers(struct pt_regs *regs);
|
||||
extern kprobe_opcode_t *get_insn_slot(void);
|
||||
extern void free_insn_slot(kprobe_opcode_t *slot);
|
||||
|
@@ -174,6 +174,17 @@ struct serio_device_id {
|
||||
__u8 proto;
|
||||
};
|
||||
|
||||
/*
|
||||
* Struct used for matching a device
|
||||
*/
|
||||
struct of_device_id
|
||||
{
|
||||
char name[32];
|
||||
char type[32];
|
||||
char compatible[128];
|
||||
void *data;
|
||||
};
|
||||
|
||||
|
||||
/* PCMCIA */
|
||||
|
||||
|
@@ -12,6 +12,7 @@
|
||||
#define _LINUX_MOUNT_H
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <asm/atomic.h>
|
||||
@@ -34,7 +35,7 @@ struct vfsmount
|
||||
int mnt_expiry_mark; /* true if marked for expiry */
|
||||
char *mnt_devname; /* Name of device e.g. /dev/dsk/hda1 */
|
||||
struct list_head mnt_list;
|
||||
struct list_head mnt_fslink; /* link in fs-specific expiry list */
|
||||
struct list_head mnt_expire; /* link in fs-specific expiry list */
|
||||
struct namespace *mnt_namespace; /* containing namespace */
|
||||
};
|
||||
|
||||
@@ -47,7 +48,7 @@ static inline struct vfsmount *mntget(struct vfsmount *mnt)
|
||||
|
||||
extern void __mntput(struct vfsmount *mnt);
|
||||
|
||||
static inline void _mntput(struct vfsmount *mnt)
|
||||
static inline void mntput_no_expire(struct vfsmount *mnt)
|
||||
{
|
||||
if (mnt) {
|
||||
if (atomic_dec_and_test(&mnt->mnt_count))
|
||||
@@ -59,7 +60,7 @@ static inline void mntput(struct vfsmount *mnt)
|
||||
{
|
||||
if (mnt) {
|
||||
mnt->mnt_expiry_mark = 0;
|
||||
_mntput(mnt);
|
||||
mntput_no_expire(mnt);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,6 +77,7 @@ extern int do_add_mount(struct vfsmount *newmnt, struct nameidata *nd,
|
||||
extern void mark_mounts_for_expiry(struct list_head *mounts);
|
||||
|
||||
extern spinlock_t vfsmount_lock;
|
||||
extern dev_t name_to_dev_t(char *name);
|
||||
|
||||
#endif
|
||||
#endif /* _LINUX_MOUNT_H */
|
||||
|
@@ -1,7 +1,7 @@
|
||||
|
||||
/* Common Flash Interface structures
|
||||
* See http://support.intel.com/design/flash/technote/index.htm
|
||||
* $Id: cfi.h,v 1.50 2004/11/20 12:46:51 dwmw2 Exp $
|
||||
* $Id: cfi.h,v 1.54 2005/06/06 23:04:36 tpoynor Exp $
|
||||
*/
|
||||
|
||||
#ifndef __MTD_CFI_H__
|
||||
@@ -148,6 +148,14 @@ struct cfi_pri_intelext {
|
||||
uint8_t extra[0];
|
||||
} __attribute__((packed));
|
||||
|
||||
struct cfi_intelext_otpinfo {
|
||||
uint32_t ProtRegAddr;
|
||||
uint16_t FactGroups;
|
||||
uint8_t FactProtRegSize;
|
||||
uint16_t UserGroups;
|
||||
uint8_t UserProtRegSize;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct cfi_intelext_blockinfo {
|
||||
uint16_t NumIdentBlocks;
|
||||
uint16_t BlockSize;
|
||||
@@ -244,7 +252,7 @@ static inline uint32_t cfi_build_cmd_addr(uint32_t cmd_ofs, int interleave, int
|
||||
* It looks too long to be inline, but in the common case it should almost all
|
||||
* get optimised away.
|
||||
*/
|
||||
static inline map_word cfi_build_cmd(u_char cmd, struct map_info *map, struct cfi_private *cfi)
|
||||
static inline map_word cfi_build_cmd(u_long cmd, struct map_info *map, struct cfi_private *cfi)
|
||||
{
|
||||
map_word val = { {0} };
|
||||
int wordwidth, words_per_bus, chip_mode, chips_per_word;
|
||||
@@ -307,6 +315,69 @@ static inline map_word cfi_build_cmd(u_char cmd, struct map_info *map, struct cf
|
||||
}
|
||||
#define CMD(x) cfi_build_cmd((x), map, cfi)
|
||||
|
||||
|
||||
static inline unsigned char cfi_merge_status(map_word val, struct map_info *map,
|
||||
struct cfi_private *cfi)
|
||||
{
|
||||
int wordwidth, words_per_bus, chip_mode, chips_per_word;
|
||||
unsigned long onestat, res = 0;
|
||||
int i;
|
||||
|
||||
/* We do it this way to give the compiler a fighting chance
|
||||
of optimising away all the crap for 'bankwidth' larger than
|
||||
an unsigned long, in the common case where that support is
|
||||
disabled */
|
||||
if (map_bankwidth_is_large(map)) {
|
||||
wordwidth = sizeof(unsigned long);
|
||||
words_per_bus = (map_bankwidth(map)) / wordwidth; // i.e. normally 1
|
||||
} else {
|
||||
wordwidth = map_bankwidth(map);
|
||||
words_per_bus = 1;
|
||||
}
|
||||
|
||||
chip_mode = map_bankwidth(map) / cfi_interleave(cfi);
|
||||
chips_per_word = wordwidth * cfi_interleave(cfi) / map_bankwidth(map);
|
||||
|
||||
onestat = val.x[0];
|
||||
/* Or all status words together */
|
||||
for (i=1; i < words_per_bus; i++) {
|
||||
onestat |= val.x[i];
|
||||
}
|
||||
|
||||
res = onestat;
|
||||
switch(chips_per_word) {
|
||||
default: BUG();
|
||||
#if BITS_PER_LONG >= 64
|
||||
case 8:
|
||||
res |= (onestat >> (chip_mode * 32));
|
||||
#endif
|
||||
case 4:
|
||||
res |= (onestat >> (chip_mode * 16));
|
||||
case 2:
|
||||
res |= (onestat >> (chip_mode * 8));
|
||||
case 1:
|
||||
;
|
||||
}
|
||||
|
||||
/* Last, determine what the bit-pattern should be for a single
|
||||
device, according to chip mode and endianness... */
|
||||
switch (chip_mode) {
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
res = cfi16_to_cpu(res);
|
||||
break;
|
||||
case 4:
|
||||
res = cfi32_to_cpu(res);
|
||||
break;
|
||||
default: BUG();
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
#define MERGESTATUS(x) cfi_merge_status((x), map, cfi)
|
||||
|
||||
|
||||
/*
|
||||
* Sends a CFI command to a bank of flash for the given geometry.
|
||||
*
|
||||
@@ -357,16 +428,6 @@ static inline void cfi_udelay(int us)
|
||||
}
|
||||
}
|
||||
|
||||
static inline void cfi_spin_lock(spinlock_t *mutex)
|
||||
{
|
||||
spin_lock_bh(mutex);
|
||||
}
|
||||
|
||||
static inline void cfi_spin_unlock(spinlock_t *mutex)
|
||||
{
|
||||
spin_unlock_bh(mutex);
|
||||
}
|
||||
|
||||
struct cfi_extquery *cfi_read_pri(struct map_info *map, uint16_t adr, uint16_t size,
|
||||
const char* name);
|
||||
struct cfi_fixup {
|
||||
|
@@ -6,7 +6,7 @@
|
||||
*
|
||||
* (C) 2000 Red Hat. GPLd.
|
||||
*
|
||||
* $Id: flashchip.h,v 1.15 2004/11/05 22:41:06 nico Exp $
|
||||
* $Id: flashchip.h,v 1.17 2005/03/14 18:27:15 bjd Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -29,6 +29,7 @@ typedef enum {
|
||||
FL_ERASE_SUSPENDED,
|
||||
FL_WRITING,
|
||||
FL_WRITING_TO_BUFFER,
|
||||
FL_OTP_WRITE,
|
||||
FL_WRITE_SUSPENDING,
|
||||
FL_WRITE_SUSPENDED,
|
||||
FL_PM_SUSPENDED,
|
||||
@@ -62,8 +63,8 @@ struct flchip {
|
||||
flstate_t state;
|
||||
flstate_t oldstate;
|
||||
|
||||
int write_suspended:1;
|
||||
int erase_suspended:1;
|
||||
unsigned int write_suspended:1;
|
||||
unsigned int erase_suspended:1;
|
||||
unsigned long in_progress_block_addr;
|
||||
|
||||
spinlock_t *mutex;
|
||||
|
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* (C) Copyright 2002, Greg Ungerer (gerg@snapgear.com)
|
||||
*
|
||||
* $Id: inftl.h,v 1.6 2004/06/30 14:49:00 dbrown Exp $
|
||||
* $Id: inftl.h,v 1.7 2005/06/13 13:08:45 sean Exp $
|
||||
*/
|
||||
|
||||
#ifndef __MTD_INFTL_H__
|
||||
@@ -20,7 +20,7 @@
|
||||
#include <mtd/inftl-user.h>
|
||||
|
||||
#ifndef INFTL_MAJOR
|
||||
#define INFTL_MAJOR 94
|
||||
#define INFTL_MAJOR 96
|
||||
#endif
|
||||
#define INFTL_PARTN_BITS 4
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
|
||||
/* Overhauled routines for dealing with different mmap regions of flash */
|
||||
/* $Id: map.h,v 1.46 2005/01/05 17:09:44 dwmw2 Exp $ */
|
||||
/* $Id: map.h,v 1.52 2005/05/25 10:29:41 gleixner Exp $ */
|
||||
|
||||
#ifndef __LINUX_MTD_MAP_H__
|
||||
#define __LINUX_MTD_MAP_H__
|
||||
@@ -263,6 +263,17 @@ static inline map_word map_word_and(struct map_info *map, map_word val1, map_wor
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline map_word map_word_clr(struct map_info *map, map_word val1, map_word val2)
|
||||
{
|
||||
map_word r;
|
||||
int i;
|
||||
|
||||
for (i=0; i<map_words(map); i++) {
|
||||
r.x[i] = val1.x[i] & ~val2.x[i];
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline map_word map_word_or(struct map_info *map, map_word val1, map_word val2)
|
||||
{
|
||||
map_word r;
|
||||
@@ -273,6 +284,7 @@ static inline map_word map_word_or(struct map_info *map, map_word val1, map_word
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
#define map_word_andequal(m, a, b, z) map_word_equal(m, z, map_word_and(m, a, b))
|
||||
|
||||
static inline int map_word_bitsset(struct map_info *map, map_word val1, map_word val2)
|
||||
@@ -328,16 +340,27 @@ static inline map_word map_word_load_partial(struct map_info *map, map_word orig
|
||||
return orig;
|
||||
}
|
||||
|
||||
#if BITS_PER_LONG < 64
|
||||
#define MAP_FF_LIMIT 4
|
||||
#else
|
||||
#define MAP_FF_LIMIT 8
|
||||
#endif
|
||||
|
||||
static inline map_word map_word_ff(struct map_info *map)
|
||||
{
|
||||
map_word r;
|
||||
int i;
|
||||
|
||||
for (i=0; i<map_words(map); i++) {
|
||||
r.x[i] = ~0UL;
|
||||
|
||||
if (map_bankwidth(map) < MAP_FF_LIMIT) {
|
||||
int bw = 8 * map_bankwidth(map);
|
||||
r.x[0] = (1 << bw) - 1;
|
||||
} else {
|
||||
for (i=0; i<map_words(map); i++)
|
||||
r.x[i] = ~0UL;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline map_word inline_map_read(struct map_info *map, unsigned long ofs)
|
||||
{
|
||||
map_word r;
|
||||
@@ -405,7 +428,7 @@ extern void simple_map_init(struct map_info *);
|
||||
|
||||
|
||||
#define simple_map_init(map) BUG_ON(!map_bankwidth_supported((map)->bankwidth))
|
||||
#define map_is_linear(map) (1)
|
||||
#define map_is_linear(map) ({ (void)(map); 1; })
|
||||
|
||||
#endif /* !CONFIG_MTD_COMPLEX_MAPPINGS */
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: mtd.h,v 1.56 2004/08/09 18:46:04 dmarlin Exp $
|
||||
* $Id: mtd.h,v 1.59 2005/04/11 10:19:02 gleixner Exp $
|
||||
*
|
||||
* Copyright (C) 1999-2003 David Woodhouse <dwmw2@infradead.org> et al.
|
||||
*
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/uio.h>
|
||||
#include <linux/notifier.h>
|
||||
|
||||
#include <linux/mtd/compatmac.h>
|
||||
#include <mtd/mtd-abi.h>
|
||||
@@ -69,7 +70,6 @@ struct mtd_info {
|
||||
|
||||
u_int32_t oobblock; // Size of OOB blocks (e.g. 512)
|
||||
u_int32_t oobsize; // Amount of OOB data per block (e.g. 16)
|
||||
u_int32_t oobavail; // Number of bytes in OOB area available for fs
|
||||
u_int32_t ecctype;
|
||||
u_int32_t eccsize;
|
||||
|
||||
@@ -80,6 +80,7 @@ struct mtd_info {
|
||||
|
||||
// oobinfo is a nand_oobinfo structure, which can be set by iotcl (MEMSETOOBINFO)
|
||||
struct nand_oobinfo oobinfo;
|
||||
u_int32_t oobavail; // Number of bytes in OOB area available for fs
|
||||
|
||||
/* Data for variable erase regions. If numeraseregions is zero,
|
||||
* it means that the whole device has erasesize as given above.
|
||||
@@ -113,12 +114,12 @@ struct mtd_info {
|
||||
* flash devices. The user data is one time programmable but the
|
||||
* factory data is read only.
|
||||
*/
|
||||
int (*read_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
|
||||
|
||||
int (*get_fact_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len);
|
||||
int (*read_fact_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
|
||||
|
||||
/* This function is not yet implemented */
|
||||
int (*get_user_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len);
|
||||
int (*read_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
|
||||
int (*write_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
|
||||
int (*lock_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len);
|
||||
|
||||
/* kvec-based read/write methods. We need these especially for NAND flash,
|
||||
with its limited number of write cycles per erase.
|
||||
@@ -147,6 +148,8 @@ struct mtd_info {
|
||||
int (*block_isbad) (struct mtd_info *mtd, loff_t ofs);
|
||||
int (*block_markbad) (struct mtd_info *mtd, loff_t ofs);
|
||||
|
||||
struct notifier_block reboot_notifier; /* default mode before reboot */
|
||||
|
||||
void *priv;
|
||||
|
||||
struct module *owner;
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* Steven J. Hill <sjhill@realitydiluted.com>
|
||||
* Thomas Gleixner <tglx@linutronix.de>
|
||||
*
|
||||
* $Id: nand.h,v 1.68 2004/11/12 10:40:37 gleixner Exp $
|
||||
* $Id: nand.h,v 1.73 2005/05/31 19:39:17 gleixner Exp $
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
@@ -48,6 +48,10 @@
|
||||
* 02-08-2004 tglx added option field to nand structure for chip anomalities
|
||||
* 05-25-2004 tglx added bad block table support, ST-MICRO manufacturer id
|
||||
* update of nand_chip structure description
|
||||
* 01-17-2005 dmarlin added extended commands for AG-AND device and added option
|
||||
* for BBT_AUTO_REFRESH.
|
||||
* 01-20-2005 dmarlin added optional pointer to hardware specific callback for
|
||||
* extra error status checks.
|
||||
*/
|
||||
#ifndef __LINUX_MTD_NAND_H
|
||||
#define __LINUX_MTD_NAND_H
|
||||
@@ -115,6 +119,25 @@ extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_
|
||||
#define NAND_CMD_READSTART 0x30
|
||||
#define NAND_CMD_CACHEDPROG 0x15
|
||||
|
||||
/* Extended commands for AG-AND device */
|
||||
/*
|
||||
* Note: the command for NAND_CMD_DEPLETE1 is really 0x00 but
|
||||
* there is no way to distinguish that from NAND_CMD_READ0
|
||||
* until the remaining sequence of commands has been completed
|
||||
* so add a high order bit and mask it off in the command.
|
||||
*/
|
||||
#define NAND_CMD_DEPLETE1 0x100
|
||||
#define NAND_CMD_DEPLETE2 0x38
|
||||
#define NAND_CMD_STATUS_MULTI 0x71
|
||||
#define NAND_CMD_STATUS_ERROR 0x72
|
||||
/* multi-bank error status (banks 0-3) */
|
||||
#define NAND_CMD_STATUS_ERROR0 0x73
|
||||
#define NAND_CMD_STATUS_ERROR1 0x74
|
||||
#define NAND_CMD_STATUS_ERROR2 0x75
|
||||
#define NAND_CMD_STATUS_ERROR3 0x76
|
||||
#define NAND_CMD_STATUS_RESET 0x7f
|
||||
#define NAND_CMD_STATUS_CLEAR 0xff
|
||||
|
||||
/* Status bits */
|
||||
#define NAND_STATUS_FAIL 0x01
|
||||
#define NAND_STATUS_FAIL_N1 0x02
|
||||
@@ -143,7 +166,7 @@ extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_
|
||||
|
||||
/*
|
||||
* Constants for Hardware ECC
|
||||
*/
|
||||
*/
|
||||
/* Reset Hardware ECC for read */
|
||||
#define NAND_ECC_READ 0
|
||||
/* Reset Hardware ECC for write */
|
||||
@@ -151,6 +174,10 @@ extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_
|
||||
/* Enable Hardware ECC before syndrom is read back from flash */
|
||||
#define NAND_ECC_READSYN 2
|
||||
|
||||
/* Bit mask for flags passed to do_nand_read_ecc */
|
||||
#define NAND_GET_DEVICE 0x80
|
||||
|
||||
|
||||
/* Option constants for bizarre disfunctionality and real
|
||||
* features
|
||||
*/
|
||||
@@ -170,6 +197,10 @@ extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_
|
||||
/* Chip has a array of 4 pages which can be read without
|
||||
* additional ready /busy waits */
|
||||
#define NAND_4PAGE_ARRAY 0x00000040
|
||||
/* Chip requires that BBT is periodically rewritten to prevent
|
||||
* bits from adjacent blocks from 'leaking' in altering data.
|
||||
* This happens with the Renesas AG-AND chips, possibly others. */
|
||||
#define BBT_AUTO_REFRESH 0x00000080
|
||||
|
||||
/* Options valid for Samsung large page devices */
|
||||
#define NAND_SAMSUNG_LP_OPTIONS \
|
||||
@@ -192,7 +223,8 @@ extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_
|
||||
* This can only work if we have the ecc bytes directly behind the
|
||||
* data bytes. Applies for DOC and AG-AND Renesas HW Reed Solomon generators */
|
||||
#define NAND_HWECC_SYNDROME 0x00020000
|
||||
|
||||
/* This option skips the bbt scan during initialization. */
|
||||
#define NAND_SKIP_BBTSCAN 0x00040000
|
||||
|
||||
/* Options set by nand scan */
|
||||
/* Nand scan has allocated oob_buf */
|
||||
@@ -221,10 +253,13 @@ struct nand_chip;
|
||||
* struct nand_hw_control - Control structure for hardware controller (e.g ECC generator) shared among independend devices
|
||||
* @lock: protection lock
|
||||
* @active: the mtd device which holds the controller currently
|
||||
* @wq: wait queue to sleep on if a NAND operation is in progress
|
||||
* used instead of the per chip wait queue when a hw controller is available
|
||||
*/
|
||||
struct nand_hw_control {
|
||||
spinlock_t lock;
|
||||
struct nand_chip *active;
|
||||
wait_queue_head_t wq;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -283,6 +318,8 @@ struct nand_hw_control {
|
||||
* @badblock_pattern: [REPLACEABLE] bad block scan pattern used for initial bad block scan
|
||||
* @controller: [OPTIONAL] a pointer to a hardware controller structure which is shared among multiple independend devices
|
||||
* @priv: [OPTIONAL] pointer to private chip date
|
||||
* @errstat: [OPTIONAL] hardware specific function to perform additional error status checks
|
||||
* (determine if errors are correctable)
|
||||
*/
|
||||
|
||||
struct nand_chip {
|
||||
@@ -338,6 +375,7 @@ struct nand_chip {
|
||||
struct nand_bbt_descr *badblock_pattern;
|
||||
struct nand_hw_control *controller;
|
||||
void *priv;
|
||||
int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state, int status, int page);
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -349,6 +387,7 @@ struct nand_chip {
|
||||
#define NAND_MFR_NATIONAL 0x8f
|
||||
#define NAND_MFR_RENESAS 0x07
|
||||
#define NAND_MFR_STMICRO 0x20
|
||||
#define NAND_MFR_HYNIX 0xad
|
||||
|
||||
/**
|
||||
* struct nand_flash_dev - NAND Flash Device ID Structure
|
||||
@@ -459,6 +498,9 @@ extern int nand_update_bbt (struct mtd_info *mtd, loff_t offs);
|
||||
extern int nand_default_bbt (struct mtd_info *mtd);
|
||||
extern int nand_isbad_bbt (struct mtd_info *mtd, loff_t offs, int allowbbt);
|
||||
extern int nand_erase_nand (struct mtd_info *mtd, struct erase_info *instr, int allowbbt);
|
||||
extern int nand_do_read_ecc (struct mtd_info *mtd, loff_t from, size_t len,
|
||||
size_t * retlen, u_char * buf, u_char * oob_buf,
|
||||
struct nand_oobinfo *oobsel, int flags);
|
||||
|
||||
/*
|
||||
* Constants for oob configuration
|
||||
|
35
include/linux/mtd/plat-ram.h
Normal file
35
include/linux/mtd/plat-ram.h
Normal file
@@ -0,0 +1,35 @@
|
||||
/* linux/include/mtd/plat-ram.h
|
||||
*
|
||||
* (c) 2004 Simtec Electronics
|
||||
* http://www.simtec.co.uk/products/SWLINUX/
|
||||
* Ben Dooks <ben@simtec.co.uk>
|
||||
*
|
||||
* Generic platform device based RAM map
|
||||
*
|
||||
* $Id: plat-ram.h,v 1.2 2005/01/24 00:37:40 bjd Exp $
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MTD_PLATRAM_H
|
||||
#define __LINUX_MTD_PLATRAM_H __FILE__
|
||||
|
||||
#define PLATRAM_RO (0)
|
||||
#define PLATRAM_RW (1)
|
||||
|
||||
struct platdata_mtd_ram {
|
||||
char *mapname;
|
||||
char **probes;
|
||||
struct mtd_partition *partitions;
|
||||
int nr_partitions;
|
||||
int bankwidth;
|
||||
|
||||
/* control callbacks */
|
||||
|
||||
void (*set_rw)(struct device *dev, int to);
|
||||
};
|
||||
|
||||
#endif /* __LINUX_MTD_PLATRAM_H */
|
@@ -58,22 +58,16 @@
|
||||
* returned value is <= the real elapsed time.
|
||||
* note 2: this should be able to cope with a few seconds without
|
||||
* overflowing.
|
||||
*
|
||||
* xip_iprefetch()
|
||||
*
|
||||
* Macro to fill instruction prefetch
|
||||
* e.g. a series of nops: asm volatile (".rep 8; nop; .endr");
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_ARCH_SA1100) || defined(CONFIG_ARCH_PXA)
|
||||
#include <asm/mtd-xip.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#ifdef CONFIG_ARCH_PXA
|
||||
#include <asm/arch/pxa-regs.h>
|
||||
#endif
|
||||
|
||||
#define xip_irqpending() (ICIP & ICMR)
|
||||
|
||||
/* we sample OSCR and convert desired delta to usec (1/4 ~= 1000000/3686400) */
|
||||
#define xip_currtime() (OSCR)
|
||||
#define xip_elapsed_since(x) (signed)((OSCR - (x)) / 4)
|
||||
|
||||
#else
|
||||
#ifndef xip_irqpending
|
||||
|
||||
#warning "missing IRQ and timer primitives for XIP MTD support"
|
||||
#warning "some of the XIP MTD support code will be disabled"
|
||||
@@ -85,16 +79,17 @@
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef xip_iprefetch
|
||||
#define xip_iprefetch() do { } while (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* xip_cpu_idle() is used when waiting for a delay equal or larger than
|
||||
* the system timer tick period. This should put the CPU into idle mode
|
||||
* to save power and to be woken up only when some interrupts are pending.
|
||||
* As above, this should not rely upon standard kernel code.
|
||||
* This should not rely upon standard kernel code.
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_CPU_XSCALE)
|
||||
#define xip_cpu_idle() asm volatile ("mcr p14, 0, %0, c7, c0, 0" :: "r" (1))
|
||||
#else
|
||||
#ifndef xip_cpu_idle
|
||||
#define xip_cpu_idle() do { } while (0)
|
||||
#endif
|
||||
|
||||
|
@@ -17,7 +17,8 @@ extern void __put_namespace(struct namespace *namespace);
|
||||
|
||||
static inline void put_namespace(struct namespace *namespace)
|
||||
{
|
||||
if (atomic_dec_and_test(&namespace->count))
|
||||
if (atomic_dec_and_lock(&namespace->count, &vfsmount_lock))
|
||||
/* releases vfsmount_lock */
|
||||
__put_namespace(namespace);
|
||||
}
|
||||
|
||||
|
@@ -16,6 +16,7 @@
|
||||
#define NETLINK_AUDIT 9 /* auditing */
|
||||
#define NETLINK_FIB_LOOKUP 10
|
||||
#define NETLINK_ROUTE6 11 /* af_inet6 route comm channel */
|
||||
#define NETLINK_NETFILTER 12 /* netfilter subsystem */
|
||||
#define NETLINK_IP6_FW 13
|
||||
#define NETLINK_DNRTMSG 14 /* DECnet routing messages */
|
||||
#define NETLINK_KOBJECT_UEVENT 15 /* Kernel messages to userspace */
|
||||
|
@@ -124,6 +124,7 @@ int nfsd_statfs(struct svc_rqst *, struct svc_fh *,
|
||||
|
||||
int nfsd_notify_change(struct inode *, struct iattr *);
|
||||
int nfsd_permission(struct svc_export *, struct dentry *, int);
|
||||
void nfsd_sync_dir(struct dentry *dp);
|
||||
|
||||
#if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
|
||||
#ifdef CONFIG_NFSD_V2_ACL
|
||||
@@ -230,6 +231,7 @@ void nfsd_lockd_shutdown(void);
|
||||
#define nfserr_reclaim_bad __constant_htonl(NFSERR_RECLAIM_BAD)
|
||||
#define nfserr_badname __constant_htonl(NFSERR_BADNAME)
|
||||
#define nfserr_cb_path_down __constant_htonl(NFSERR_CB_PATH_DOWN)
|
||||
#define nfserr_locked __constant_htonl(NFSERR_LOCKED)
|
||||
|
||||
/* error codes for internal use */
|
||||
/* if a request fails due to kmalloc failure, it gets dropped.
|
||||
|
@@ -203,7 +203,9 @@ struct nfs4_stateowner {
|
||||
int so_is_open_owner; /* 1=openowner,0=lockowner */
|
||||
u32 so_id;
|
||||
struct nfs4_client * so_client;
|
||||
u32 so_seqid;
|
||||
/* after increment in ENCODE_SEQID_OP_TAIL, represents the next
|
||||
* sequence id expected from the client: */
|
||||
u32 so_seqid;
|
||||
struct xdr_netobj so_owner; /* open owner name */
|
||||
int so_confirmed; /* successful OPEN_CONFIRM? */
|
||||
struct nfs4_replay so_replay;
|
||||
@@ -235,6 +237,10 @@ struct nfs4_file {
|
||||
* st_perlockowner: (open stateid) list of lock nfs4_stateowners
|
||||
* st_access_bmap: used only for open stateid
|
||||
* st_deny_bmap: used only for open stateid
|
||||
* st_openstp: open stateid lock stateid was derived from
|
||||
*
|
||||
* XXX: open stateids and lock stateids have diverged sufficiently that
|
||||
* we should consider defining separate structs for the two cases.
|
||||
*/
|
||||
|
||||
struct nfs4_stateid {
|
||||
@@ -248,6 +254,7 @@ struct nfs4_stateid {
|
||||
struct file * st_vfs_file;
|
||||
unsigned long st_access_bmap;
|
||||
unsigned long st_deny_bmap;
|
||||
struct nfs4_stateid * st_openstp;
|
||||
};
|
||||
|
||||
/* flags for preprocess_seqid_op() */
|
||||
|
@@ -1,18 +0,0 @@
|
||||
/*
|
||||
* PCI defines and function prototypes
|
||||
* Copyright 2003 Dell Inc.
|
||||
* by Matt Domsch <Matt_Domsch@dell.com>
|
||||
*/
|
||||
|
||||
#ifndef LINUX_PCI_DYNIDS_H
|
||||
#define LINUX_PCI_DYNIDS_H
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
|
||||
struct dynid {
|
||||
struct list_head node;
|
||||
struct pci_device_id id;
|
||||
};
|
||||
|
||||
#endif
|
@@ -586,7 +586,7 @@ struct pci_dev {
|
||||
#define PCI_NUM_RESOURCES 11
|
||||
|
||||
#ifndef PCI_BUS_NUM_RESOURCES
|
||||
#define PCI_BUS_NUM_RESOURCES 4
|
||||
#define PCI_BUS_NUM_RESOURCES 8
|
||||
#endif
|
||||
|
||||
#define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */
|
||||
@@ -860,7 +860,8 @@ int pci_register_driver(struct pci_driver *);
|
||||
void pci_unregister_driver(struct pci_driver *);
|
||||
void pci_remove_behind_bridge(struct pci_dev *);
|
||||
struct pci_driver *pci_dev_driver(const struct pci_dev *);
|
||||
const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev);
|
||||
const struct pci_device_id *pci_match_device(struct pci_driver *drv, struct pci_dev *dev);
|
||||
const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, struct pci_dev *dev);
|
||||
int pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass);
|
||||
|
||||
/* kmem_cache style wrapper around pci_alloc_consistent() */
|
||||
|
@@ -1238,6 +1238,7 @@
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE 0x0265
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA 0x0266
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2 0x0267
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE 0x036E
|
||||
#define PCI_DEVICE_ID_NVIDIA_NVENET_12 0x0268
|
||||
#define PCI_DEVICE_ID_NVIDIA_NVENET_13 0x0269
|
||||
#define PCI_DEVICE_ID_NVIDIA_MCP51_AUDIO 0x026B
|
||||
|
@@ -176,7 +176,7 @@ struct pm_ops {
|
||||
};
|
||||
|
||||
extern void pm_set_ops(struct pm_ops *);
|
||||
|
||||
extern struct pm_ops *pm_ops;
|
||||
extern int pm_suspend(suspend_state_t state);
|
||||
|
||||
|
||||
|
@@ -4,29 +4,29 @@
|
||||
#define REISERFS_ACL_VERSION 0x0001
|
||||
|
||||
typedef struct {
|
||||
__le16 e_tag;
|
||||
__le16 e_perm;
|
||||
__le32 e_id;
|
||||
__le16 e_tag;
|
||||
__le16 e_perm;
|
||||
__le32 e_id;
|
||||
} reiserfs_acl_entry;
|
||||
|
||||
typedef struct {
|
||||
__le16 e_tag;
|
||||
__le16 e_perm;
|
||||
__le16 e_tag;
|
||||
__le16 e_perm;
|
||||
} reiserfs_acl_entry_short;
|
||||
|
||||
typedef struct {
|
||||
__le32 a_version;
|
||||
__le32 a_version;
|
||||
} reiserfs_acl_header;
|
||||
|
||||
static inline size_t reiserfs_acl_size(int count)
|
||||
{
|
||||
if (count <= 4) {
|
||||
return sizeof(reiserfs_acl_header) +
|
||||
count * sizeof(reiserfs_acl_entry_short);
|
||||
count * sizeof(reiserfs_acl_entry_short);
|
||||
} else {
|
||||
return sizeof(reiserfs_acl_header) +
|
||||
4 * sizeof(reiserfs_acl_entry_short) +
|
||||
(count - 4) * sizeof(reiserfs_acl_entry);
|
||||
4 * sizeof(reiserfs_acl_entry_short) +
|
||||
(count - 4) * sizeof(reiserfs_acl_entry);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,14 +46,14 @@ static inline int reiserfs_acl_count(size_t size)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_REISERFS_FS_POSIX_ACL
|
||||
struct posix_acl * reiserfs_get_acl(struct inode *inode, int type);
|
||||
int reiserfs_acl_chmod (struct inode *inode);
|
||||
int reiserfs_inherit_default_acl (struct inode *dir, struct dentry *dentry, struct inode *inode);
|
||||
int reiserfs_cache_default_acl (struct inode *dir);
|
||||
extern int reiserfs_xattr_posix_acl_init (void) __init;
|
||||
extern int reiserfs_xattr_posix_acl_exit (void);
|
||||
struct posix_acl *reiserfs_get_acl(struct inode *inode, int type);
|
||||
int reiserfs_acl_chmod(struct inode *inode);
|
||||
int reiserfs_inherit_default_acl(struct inode *dir, struct dentry *dentry,
|
||||
struct inode *inode);
|
||||
int reiserfs_cache_default_acl(struct inode *dir);
|
||||
extern int reiserfs_xattr_posix_acl_init(void) __init;
|
||||
extern int reiserfs_xattr_posix_acl_exit(void);
|
||||
extern struct reiserfs_xattr_handler posix_acl_default_handler;
|
||||
extern struct reiserfs_xattr_handler posix_acl_access_handler;
|
||||
#else
|
||||
@@ -61,28 +61,26 @@ extern struct reiserfs_xattr_handler posix_acl_access_handler;
|
||||
#define reiserfs_get_acl NULL
|
||||
#define reiserfs_cache_default_acl(inode) 0
|
||||
|
||||
static inline int
|
||||
reiserfs_xattr_posix_acl_init (void)
|
||||
static inline int reiserfs_xattr_posix_acl_init(void)
|
||||
{
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int reiserfs_xattr_posix_acl_exit(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int reiserfs_acl_chmod(struct inode *inode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
reiserfs_xattr_posix_acl_exit (void)
|
||||
reiserfs_inherit_default_acl(const struct inode *dir, struct dentry *dentry,
|
||||
struct inode *inode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
reiserfs_acl_chmod (struct inode *inode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
reiserfs_inherit_default_acl (const struct inode *dir, struct dentry *dentry, struct inode *inode)
|
||||
{
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -10,54 +10,53 @@ typedef enum {
|
||||
/** this says what format of key do all items (but stat data) of
|
||||
an object have. If this is set, that format is 3.6 otherwise
|
||||
- 3.5 */
|
||||
i_item_key_version_mask = 0x0001,
|
||||
i_item_key_version_mask = 0x0001,
|
||||
/** If this is unset, object has 3.5 stat data, otherwise, it has
|
||||
3.6 stat data with 64bit size, 32bit nlink etc. */
|
||||
i_stat_data_version_mask = 0x0002,
|
||||
i_stat_data_version_mask = 0x0002,
|
||||
/** file might need tail packing on close */
|
||||
i_pack_on_close_mask = 0x0004,
|
||||
i_pack_on_close_mask = 0x0004,
|
||||
/** don't pack tail of file */
|
||||
i_nopack_mask = 0x0008,
|
||||
i_nopack_mask = 0x0008,
|
||||
/** If those is set, "safe link" was created for this file during
|
||||
truncate or unlink. Safe link is used to avoid leakage of disk
|
||||
space on crash with some files open, but unlinked. */
|
||||
i_link_saved_unlink_mask = 0x0010,
|
||||
i_link_saved_truncate_mask = 0x0020,
|
||||
i_has_xattr_dir = 0x0040,
|
||||
i_data_log = 0x0080,
|
||||
i_link_saved_unlink_mask = 0x0010,
|
||||
i_link_saved_truncate_mask = 0x0020,
|
||||
i_has_xattr_dir = 0x0040,
|
||||
i_data_log = 0x0080,
|
||||
} reiserfs_inode_flags;
|
||||
|
||||
|
||||
struct reiserfs_inode_info {
|
||||
__u32 i_key [4];/* key is still 4 32 bit integers */
|
||||
__u32 i_key[4]; /* key is still 4 32 bit integers */
|
||||
/** transient inode flags that are never stored on disk. Bitmasks
|
||||
for this field are defined above. */
|
||||
__u32 i_flags;
|
||||
__u32 i_flags;
|
||||
|
||||
__u32 i_first_direct_byte; // offset of first byte stored in direct item.
|
||||
__u32 i_first_direct_byte; // offset of first byte stored in direct item.
|
||||
|
||||
/* copy of persistent inode flags read from sd_attrs. */
|
||||
__u32 i_attrs;
|
||||
/* copy of persistent inode flags read from sd_attrs. */
|
||||
__u32 i_attrs;
|
||||
|
||||
int i_prealloc_block; /* first unused block of a sequence of unused blocks */
|
||||
int i_prealloc_count; /* length of that sequence */
|
||||
struct list_head i_prealloc_list; /* per-transaction list of inodes which
|
||||
* have preallocated blocks */
|
||||
int i_prealloc_block; /* first unused block of a sequence of unused blocks */
|
||||
int i_prealloc_count; /* length of that sequence */
|
||||
struct list_head i_prealloc_list; /* per-transaction list of inodes which
|
||||
* have preallocated blocks */
|
||||
|
||||
unsigned new_packing_locality:1; /* new_packig_locality is created; new blocks
|
||||
* for the contents of this directory should be
|
||||
* displaced */
|
||||
unsigned new_packing_locality:1; /* new_packig_locality is created; new blocks
|
||||
* for the contents of this directory should be
|
||||
* displaced */
|
||||
|
||||
/* we use these for fsync or O_SYNC to decide which transaction
|
||||
** needs to be committed in order for this inode to be properly
|
||||
** flushed */
|
||||
unsigned long i_trans_id ;
|
||||
struct reiserfs_journal_list *i_jl;
|
||||
/* we use these for fsync or O_SYNC to decide which transaction
|
||||
** needs to be committed in order for this inode to be properly
|
||||
** flushed */
|
||||
unsigned long i_trans_id;
|
||||
struct reiserfs_journal_list *i_jl;
|
||||
|
||||
struct posix_acl *i_acl_access;
|
||||
struct posix_acl *i_acl_default;
|
||||
struct rw_semaphore xattr_sem;
|
||||
struct inode vfs_inode;
|
||||
struct posix_acl *i_acl_access;
|
||||
struct posix_acl *i_acl_default;
|
||||
struct rw_semaphore xattr_sem;
|
||||
struct inode vfs_inode;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -10,7 +10,7 @@
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
reiserfs_attrs_cleared = 0x00000001,
|
||||
reiserfs_attrs_cleared = 0x00000001,
|
||||
} reiserfs_super_block_flags;
|
||||
|
||||
/* struct reiserfs_super_block accessors/mutators
|
||||
@@ -61,7 +61,7 @@ typedef enum {
|
||||
#define sb_umount_state(sbp) (le16_to_cpu((sbp)->s_v1.s_umount_state))
|
||||
#define set_sb_umount_state(sbp,v) ((sbp)->s_v1.s_umount_state = cpu_to_le16(v))
|
||||
#define sb_fs_state(sbp) (le16_to_cpu((sbp)->s_v1.s_fs_state))
|
||||
#define set_sb_fs_state(sbp,v) ((sbp)->s_v1.s_fs_state = cpu_to_le16(v))
|
||||
#define set_sb_fs_state(sbp,v) ((sbp)->s_v1.s_fs_state = cpu_to_le16(v))
|
||||
#define sb_hash_function_code(sbp) \
|
||||
(le32_to_cpu((sbp)->s_v1.s_hash_function_code))
|
||||
#define set_sb_hash_function_code(sbp,v) \
|
||||
@@ -103,10 +103,10 @@ typedef enum {
|
||||
|
||||
/* don't mess with these for a while */
|
||||
/* we have a node size define somewhere in reiserfs_fs.h. -Hans */
|
||||
#define JOURNAL_BLOCK_SIZE 4096 /* BUG gotta get rid of this */
|
||||
#define JOURNAL_MAX_CNODE 1500 /* max cnodes to allocate. */
|
||||
#define JOURNAL_HASH_SIZE 8192
|
||||
#define JOURNAL_NUM_BITMAPS 5 /* number of copies of the bitmaps to have floating. Must be >= 2 */
|
||||
#define JOURNAL_BLOCK_SIZE 4096 /* BUG gotta get rid of this */
|
||||
#define JOURNAL_MAX_CNODE 1500 /* max cnodes to allocate. */
|
||||
#define JOURNAL_HASH_SIZE 8192
|
||||
#define JOURNAL_NUM_BITMAPS 5 /* number of copies of the bitmaps to have floating. Must be >= 2 */
|
||||
|
||||
/* One of these for every block in every transaction
|
||||
** Each one is in two hash tables. First, a hash of the current transaction, and after journal_end, a
|
||||
@@ -117,27 +117,27 @@ typedef enum {
|
||||
** to a given transaction.
|
||||
*/
|
||||
struct reiserfs_journal_cnode {
|
||||
struct buffer_head *bh ; /* real buffer head */
|
||||
struct super_block *sb ; /* dev of real buffer head */
|
||||
__u32 blocknr ; /* block number of real buffer head, == 0 when buffer on disk */
|
||||
long state ;
|
||||
struct reiserfs_journal_list *jlist ; /* journal list this cnode lives in */
|
||||
struct reiserfs_journal_cnode *next ; /* next in transaction list */
|
||||
struct reiserfs_journal_cnode *prev ; /* prev in transaction list */
|
||||
struct reiserfs_journal_cnode *hprev ; /* prev in hash list */
|
||||
struct reiserfs_journal_cnode *hnext ; /* next in hash list */
|
||||
struct buffer_head *bh; /* real buffer head */
|
||||
struct super_block *sb; /* dev of real buffer head */
|
||||
__u32 blocknr; /* block number of real buffer head, == 0 when buffer on disk */
|
||||
long state;
|
||||
struct reiserfs_journal_list *jlist; /* journal list this cnode lives in */
|
||||
struct reiserfs_journal_cnode *next; /* next in transaction list */
|
||||
struct reiserfs_journal_cnode *prev; /* prev in transaction list */
|
||||
struct reiserfs_journal_cnode *hprev; /* prev in hash list */
|
||||
struct reiserfs_journal_cnode *hnext; /* next in hash list */
|
||||
};
|
||||
|
||||
struct reiserfs_bitmap_node {
|
||||
int id ;
|
||||
char *data ;
|
||||
struct list_head list ;
|
||||
} ;
|
||||
int id;
|
||||
char *data;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
struct reiserfs_list_bitmap {
|
||||
struct reiserfs_journal_list *journal_list ;
|
||||
struct reiserfs_bitmap_node **bitmaps ;
|
||||
} ;
|
||||
struct reiserfs_journal_list *journal_list;
|
||||
struct reiserfs_bitmap_node **bitmaps;
|
||||
};
|
||||
|
||||
/*
|
||||
** one of these for each transaction. The most important part here is the j_realblock.
|
||||
@@ -146,273 +146,269 @@ struct reiserfs_list_bitmap {
|
||||
** and to make sure every real block in a transaction is on disk before allowing the log area
|
||||
** to be overwritten */
|
||||
struct reiserfs_journal_list {
|
||||
unsigned long j_start ;
|
||||
unsigned long j_state;
|
||||
unsigned long j_len ;
|
||||
atomic_t j_nonzerolen ;
|
||||
atomic_t j_commit_left ;
|
||||
atomic_t j_older_commits_done ; /* all commits older than this on disk*/
|
||||
struct semaphore j_commit_lock;
|
||||
unsigned long j_trans_id ;
|
||||
time_t j_timestamp ;
|
||||
struct reiserfs_list_bitmap *j_list_bitmap ;
|
||||
struct buffer_head *j_commit_bh ; /* commit buffer head */
|
||||
struct reiserfs_journal_cnode *j_realblock ;
|
||||
struct reiserfs_journal_cnode *j_freedlist ; /* list of buffers that were freed during this trans. free each of these on flush */
|
||||
/* time ordered list of all active transactions */
|
||||
struct list_head j_list;
|
||||
unsigned long j_start;
|
||||
unsigned long j_state;
|
||||
unsigned long j_len;
|
||||
atomic_t j_nonzerolen;
|
||||
atomic_t j_commit_left;
|
||||
atomic_t j_older_commits_done; /* all commits older than this on disk */
|
||||
struct semaphore j_commit_lock;
|
||||
unsigned long j_trans_id;
|
||||
time_t j_timestamp;
|
||||
struct reiserfs_list_bitmap *j_list_bitmap;
|
||||
struct buffer_head *j_commit_bh; /* commit buffer head */
|
||||
struct reiserfs_journal_cnode *j_realblock;
|
||||
struct reiserfs_journal_cnode *j_freedlist; /* list of buffers that were freed during this trans. free each of these on flush */
|
||||
/* time ordered list of all active transactions */
|
||||
struct list_head j_list;
|
||||
|
||||
/* time ordered list of all transactions we haven't tried to flush yet */
|
||||
struct list_head j_working_list;
|
||||
/* time ordered list of all transactions we haven't tried to flush yet */
|
||||
struct list_head j_working_list;
|
||||
|
||||
/* list of tail conversion targets in need of flush before commit */
|
||||
struct list_head j_tail_bh_list;
|
||||
/* list of data=ordered buffers in need of flush before commit */
|
||||
struct list_head j_bh_list;
|
||||
int j_refcount;
|
||||
} ;
|
||||
/* list of tail conversion targets in need of flush before commit */
|
||||
struct list_head j_tail_bh_list;
|
||||
/* list of data=ordered buffers in need of flush before commit */
|
||||
struct list_head j_bh_list;
|
||||
int j_refcount;
|
||||
};
|
||||
|
||||
struct reiserfs_journal {
|
||||
struct buffer_head ** j_ap_blocks ; /* journal blocks on disk */
|
||||
struct reiserfs_journal_cnode *j_last ; /* newest journal block */
|
||||
struct reiserfs_journal_cnode *j_first ; /* oldest journal block. start here for traverse */
|
||||
struct buffer_head **j_ap_blocks; /* journal blocks on disk */
|
||||
struct reiserfs_journal_cnode *j_last; /* newest journal block */
|
||||
struct reiserfs_journal_cnode *j_first; /* oldest journal block. start here for traverse */
|
||||
|
||||
struct file *j_dev_file;
|
||||
struct block_device *j_dev_bd;
|
||||
int j_1st_reserved_block; /* first block on s_dev of reserved area journal */
|
||||
|
||||
long j_state ;
|
||||
unsigned long j_trans_id ;
|
||||
unsigned long j_mount_id ;
|
||||
unsigned long j_start ; /* start of current waiting commit (index into j_ap_blocks) */
|
||||
unsigned long j_len ; /* lenght of current waiting commit */
|
||||
unsigned long j_len_alloc ; /* number of buffers requested by journal_begin() */
|
||||
atomic_t j_wcount ; /* count of writers for current commit */
|
||||
unsigned long j_bcount ; /* batch count. allows turning X transactions into 1 */
|
||||
unsigned long j_first_unflushed_offset ; /* first unflushed transactions offset */
|
||||
unsigned long j_last_flush_trans_id ; /* last fully flushed journal timestamp */
|
||||
struct buffer_head *j_header_bh ;
|
||||
struct file *j_dev_file;
|
||||
struct block_device *j_dev_bd;
|
||||
int j_1st_reserved_block; /* first block on s_dev of reserved area journal */
|
||||
|
||||
time_t j_trans_start_time ; /* time this transaction started */
|
||||
struct semaphore j_lock;
|
||||
struct semaphore j_flush_sem;
|
||||
wait_queue_head_t j_join_wait ; /* wait for current transaction to finish before starting new one */
|
||||
atomic_t j_jlock ; /* lock for j_join_wait */
|
||||
int j_list_bitmap_index ; /* number of next list bitmap to use */
|
||||
int j_must_wait ; /* no more journal begins allowed. MUST sleep on j_join_wait */
|
||||
int j_next_full_flush ; /* next journal_end will flush all journal list */
|
||||
int j_next_async_flush ; /* next journal_end will flush all async commits */
|
||||
long j_state;
|
||||
unsigned long j_trans_id;
|
||||
unsigned long j_mount_id;
|
||||
unsigned long j_start; /* start of current waiting commit (index into j_ap_blocks) */
|
||||
unsigned long j_len; /* lenght of current waiting commit */
|
||||
unsigned long j_len_alloc; /* number of buffers requested by journal_begin() */
|
||||
atomic_t j_wcount; /* count of writers for current commit */
|
||||
unsigned long j_bcount; /* batch count. allows turning X transactions into 1 */
|
||||
unsigned long j_first_unflushed_offset; /* first unflushed transactions offset */
|
||||
unsigned long j_last_flush_trans_id; /* last fully flushed journal timestamp */
|
||||
struct buffer_head *j_header_bh;
|
||||
|
||||
int j_cnode_used ; /* number of cnodes on the used list */
|
||||
int j_cnode_free ; /* number of cnodes on the free list */
|
||||
time_t j_trans_start_time; /* time this transaction started */
|
||||
struct semaphore j_lock;
|
||||
struct semaphore j_flush_sem;
|
||||
wait_queue_head_t j_join_wait; /* wait for current transaction to finish before starting new one */
|
||||
atomic_t j_jlock; /* lock for j_join_wait */
|
||||
int j_list_bitmap_index; /* number of next list bitmap to use */
|
||||
int j_must_wait; /* no more journal begins allowed. MUST sleep on j_join_wait */
|
||||
int j_next_full_flush; /* next journal_end will flush all journal list */
|
||||
int j_next_async_flush; /* next journal_end will flush all async commits */
|
||||
|
||||
unsigned int j_trans_max ; /* max number of blocks in a transaction. */
|
||||
unsigned int j_max_batch ; /* max number of blocks to batch into a trans */
|
||||
unsigned int j_max_commit_age ; /* in seconds, how old can an async commit be */
|
||||
unsigned int j_max_trans_age ; /* in seconds, how old can a transaction be */
|
||||
unsigned int j_default_max_commit_age ; /* the default for the max commit age */
|
||||
int j_cnode_used; /* number of cnodes on the used list */
|
||||
int j_cnode_free; /* number of cnodes on the free list */
|
||||
|
||||
struct reiserfs_journal_cnode *j_cnode_free_list ;
|
||||
struct reiserfs_journal_cnode *j_cnode_free_orig ; /* orig pointer returned from vmalloc */
|
||||
unsigned int j_trans_max; /* max number of blocks in a transaction. */
|
||||
unsigned int j_max_batch; /* max number of blocks to batch into a trans */
|
||||
unsigned int j_max_commit_age; /* in seconds, how old can an async commit be */
|
||||
unsigned int j_max_trans_age; /* in seconds, how old can a transaction be */
|
||||
unsigned int j_default_max_commit_age; /* the default for the max commit age */
|
||||
|
||||
struct reiserfs_journal_list *j_current_jl;
|
||||
int j_free_bitmap_nodes ;
|
||||
int j_used_bitmap_nodes ;
|
||||
struct reiserfs_journal_cnode *j_cnode_free_list;
|
||||
struct reiserfs_journal_cnode *j_cnode_free_orig; /* orig pointer returned from vmalloc */
|
||||
|
||||
int j_num_lists; /* total number of active transactions */
|
||||
int j_num_work_lists; /* number that need attention from kreiserfsd */
|
||||
struct reiserfs_journal_list *j_current_jl;
|
||||
int j_free_bitmap_nodes;
|
||||
int j_used_bitmap_nodes;
|
||||
|
||||
/* debugging to make sure things are flushed in order */
|
||||
int j_last_flush_id;
|
||||
int j_num_lists; /* total number of active transactions */
|
||||
int j_num_work_lists; /* number that need attention from kreiserfsd */
|
||||
|
||||
/* debugging to make sure things are committed in order */
|
||||
int j_last_commit_id;
|
||||
/* debugging to make sure things are flushed in order */
|
||||
int j_last_flush_id;
|
||||
|
||||
struct list_head j_bitmap_nodes ;
|
||||
struct list_head j_dirty_buffers ;
|
||||
spinlock_t j_dirty_buffers_lock ; /* protects j_dirty_buffers */
|
||||
/* debugging to make sure things are committed in order */
|
||||
int j_last_commit_id;
|
||||
|
||||
/* list of all active transactions */
|
||||
struct list_head j_journal_list;
|
||||
/* lists that haven't been touched by writeback attempts */
|
||||
struct list_head j_working_list;
|
||||
struct list_head j_bitmap_nodes;
|
||||
struct list_head j_dirty_buffers;
|
||||
spinlock_t j_dirty_buffers_lock; /* protects j_dirty_buffers */
|
||||
|
||||
struct reiserfs_list_bitmap j_list_bitmap[JOURNAL_NUM_BITMAPS] ; /* array of bitmaps to record the deleted blocks */
|
||||
struct reiserfs_journal_cnode *j_hash_table[JOURNAL_HASH_SIZE] ; /* hash table for real buffer heads in current trans */
|
||||
struct reiserfs_journal_cnode *j_list_hash_table[JOURNAL_HASH_SIZE] ; /* hash table for all the real buffer heads in all
|
||||
the transactions */
|
||||
struct list_head j_prealloc_list; /* list of inodes which have preallocated blocks */
|
||||
int j_persistent_trans;
|
||||
unsigned long j_max_trans_size ;
|
||||
unsigned long j_max_batch_size ;
|
||||
/* list of all active transactions */
|
||||
struct list_head j_journal_list;
|
||||
/* lists that haven't been touched by writeback attempts */
|
||||
struct list_head j_working_list;
|
||||
|
||||
int j_errno;
|
||||
struct reiserfs_list_bitmap j_list_bitmap[JOURNAL_NUM_BITMAPS]; /* array of bitmaps to record the deleted blocks */
|
||||
struct reiserfs_journal_cnode *j_hash_table[JOURNAL_HASH_SIZE]; /* hash table for real buffer heads in current trans */
|
||||
struct reiserfs_journal_cnode *j_list_hash_table[JOURNAL_HASH_SIZE]; /* hash table for all the real buffer heads in all
|
||||
the transactions */
|
||||
struct list_head j_prealloc_list; /* list of inodes which have preallocated blocks */
|
||||
int j_persistent_trans;
|
||||
unsigned long j_max_trans_size;
|
||||
unsigned long j_max_batch_size;
|
||||
|
||||
/* when flushing ordered buffers, throttle new ordered writers */
|
||||
struct work_struct j_work;
|
||||
atomic_t j_async_throttle;
|
||||
int j_errno;
|
||||
|
||||
/* when flushing ordered buffers, throttle new ordered writers */
|
||||
struct work_struct j_work;
|
||||
atomic_t j_async_throttle;
|
||||
};
|
||||
|
||||
enum journal_state_bits {
|
||||
J_WRITERS_BLOCKED = 1, /* set when new writers not allowed */
|
||||
J_WRITERS_QUEUED, /* set when log is full due to too many writers */
|
||||
J_ABORTED, /* set when log is aborted */
|
||||
J_WRITERS_BLOCKED = 1, /* set when new writers not allowed */
|
||||
J_WRITERS_QUEUED, /* set when log is full due to too many writers */
|
||||
J_ABORTED, /* set when log is aborted */
|
||||
};
|
||||
|
||||
#define JOURNAL_DESC_MAGIC "ReIsErLB" /* ick. magic string to find desc blocks in the journal */
|
||||
|
||||
#define JOURNAL_DESC_MAGIC "ReIsErLB" /* ick. magic string to find desc blocks in the journal */
|
||||
typedef __u32(*hashf_t) (const signed char *, int);
|
||||
|
||||
typedef __u32 (*hashf_t) (const signed char *, int);
|
||||
|
||||
struct reiserfs_bitmap_info
|
||||
{
|
||||
// FIXME: Won't work with block sizes > 8K
|
||||
__u16 first_zero_hint;
|
||||
__u16 free_count;
|
||||
struct buffer_head *bh; /* the actual bitmap */
|
||||
struct reiserfs_bitmap_info {
|
||||
// FIXME: Won't work with block sizes > 8K
|
||||
__u16 first_zero_hint;
|
||||
__u16 free_count;
|
||||
struct buffer_head *bh; /* the actual bitmap */
|
||||
};
|
||||
|
||||
struct proc_dir_entry;
|
||||
|
||||
#if defined( CONFIG_PROC_FS ) && defined( CONFIG_REISERFS_PROC_INFO )
|
||||
typedef unsigned long int stat_cnt_t;
|
||||
typedef struct reiserfs_proc_info_data
|
||||
{
|
||||
spinlock_t lock;
|
||||
int exiting;
|
||||
int max_hash_collisions;
|
||||
typedef struct reiserfs_proc_info_data {
|
||||
spinlock_t lock;
|
||||
int exiting;
|
||||
int max_hash_collisions;
|
||||
|
||||
stat_cnt_t breads;
|
||||
stat_cnt_t bread_miss;
|
||||
stat_cnt_t search_by_key;
|
||||
stat_cnt_t search_by_key_fs_changed;
|
||||
stat_cnt_t search_by_key_restarted;
|
||||
stat_cnt_t breads;
|
||||
stat_cnt_t bread_miss;
|
||||
stat_cnt_t search_by_key;
|
||||
stat_cnt_t search_by_key_fs_changed;
|
||||
stat_cnt_t search_by_key_restarted;
|
||||
|
||||
stat_cnt_t insert_item_restarted;
|
||||
stat_cnt_t paste_into_item_restarted;
|
||||
stat_cnt_t cut_from_item_restarted;
|
||||
stat_cnt_t delete_solid_item_restarted;
|
||||
stat_cnt_t delete_item_restarted;
|
||||
stat_cnt_t insert_item_restarted;
|
||||
stat_cnt_t paste_into_item_restarted;
|
||||
stat_cnt_t cut_from_item_restarted;
|
||||
stat_cnt_t delete_solid_item_restarted;
|
||||
stat_cnt_t delete_item_restarted;
|
||||
|
||||
stat_cnt_t leaked_oid;
|
||||
stat_cnt_t leaves_removable;
|
||||
stat_cnt_t leaked_oid;
|
||||
stat_cnt_t leaves_removable;
|
||||
|
||||
/* balances per level. Use explicit 5 as MAX_HEIGHT is not visible yet. */
|
||||
stat_cnt_t balance_at[ 5 ]; /* XXX */
|
||||
/* sbk == search_by_key */
|
||||
stat_cnt_t sbk_read_at[ 5 ]; /* XXX */
|
||||
stat_cnt_t sbk_fs_changed[ 5 ];
|
||||
stat_cnt_t sbk_restarted[ 5 ];
|
||||
stat_cnt_t items_at[ 5 ]; /* XXX */
|
||||
stat_cnt_t free_at[ 5 ]; /* XXX */
|
||||
stat_cnt_t can_node_be_removed[ 5 ]; /* XXX */
|
||||
long int lnum[ 5 ]; /* XXX */
|
||||
long int rnum[ 5 ]; /* XXX */
|
||||
long int lbytes[ 5 ]; /* XXX */
|
||||
long int rbytes[ 5 ]; /* XXX */
|
||||
stat_cnt_t get_neighbors[ 5 ];
|
||||
stat_cnt_t get_neighbors_restart[ 5 ];
|
||||
stat_cnt_t need_l_neighbor[ 5 ];
|
||||
stat_cnt_t need_r_neighbor[ 5 ];
|
||||
/* balances per level. Use explicit 5 as MAX_HEIGHT is not visible yet. */
|
||||
stat_cnt_t balance_at[5]; /* XXX */
|
||||
/* sbk == search_by_key */
|
||||
stat_cnt_t sbk_read_at[5]; /* XXX */
|
||||
stat_cnt_t sbk_fs_changed[5];
|
||||
stat_cnt_t sbk_restarted[5];
|
||||
stat_cnt_t items_at[5]; /* XXX */
|
||||
stat_cnt_t free_at[5]; /* XXX */
|
||||
stat_cnt_t can_node_be_removed[5]; /* XXX */
|
||||
long int lnum[5]; /* XXX */
|
||||
long int rnum[5]; /* XXX */
|
||||
long int lbytes[5]; /* XXX */
|
||||
long int rbytes[5]; /* XXX */
|
||||
stat_cnt_t get_neighbors[5];
|
||||
stat_cnt_t get_neighbors_restart[5];
|
||||
stat_cnt_t need_l_neighbor[5];
|
||||
stat_cnt_t need_r_neighbor[5];
|
||||
|
||||
stat_cnt_t free_block;
|
||||
struct __scan_bitmap_stats {
|
||||
stat_cnt_t call;
|
||||
stat_cnt_t wait;
|
||||
stat_cnt_t bmap;
|
||||
stat_cnt_t retry;
|
||||
stat_cnt_t in_journal_hint;
|
||||
stat_cnt_t in_journal_nohint;
|
||||
stat_cnt_t stolen;
|
||||
} scan_bitmap;
|
||||
struct __journal_stats {
|
||||
stat_cnt_t in_journal;
|
||||
stat_cnt_t in_journal_bitmap;
|
||||
stat_cnt_t in_journal_reusable;
|
||||
stat_cnt_t lock_journal;
|
||||
stat_cnt_t lock_journal_wait;
|
||||
stat_cnt_t journal_being;
|
||||
stat_cnt_t journal_relock_writers;
|
||||
stat_cnt_t journal_relock_wcount;
|
||||
stat_cnt_t mark_dirty;
|
||||
stat_cnt_t mark_dirty_already;
|
||||
stat_cnt_t mark_dirty_notjournal;
|
||||
stat_cnt_t restore_prepared;
|
||||
stat_cnt_t prepare;
|
||||
stat_cnt_t prepare_retry;
|
||||
} journal;
|
||||
stat_cnt_t free_block;
|
||||
struct __scan_bitmap_stats {
|
||||
stat_cnt_t call;
|
||||
stat_cnt_t wait;
|
||||
stat_cnt_t bmap;
|
||||
stat_cnt_t retry;
|
||||
stat_cnt_t in_journal_hint;
|
||||
stat_cnt_t in_journal_nohint;
|
||||
stat_cnt_t stolen;
|
||||
} scan_bitmap;
|
||||
struct __journal_stats {
|
||||
stat_cnt_t in_journal;
|
||||
stat_cnt_t in_journal_bitmap;
|
||||
stat_cnt_t in_journal_reusable;
|
||||
stat_cnt_t lock_journal;
|
||||
stat_cnt_t lock_journal_wait;
|
||||
stat_cnt_t journal_being;
|
||||
stat_cnt_t journal_relock_writers;
|
||||
stat_cnt_t journal_relock_wcount;
|
||||
stat_cnt_t mark_dirty;
|
||||
stat_cnt_t mark_dirty_already;
|
||||
stat_cnt_t mark_dirty_notjournal;
|
||||
stat_cnt_t restore_prepared;
|
||||
stat_cnt_t prepare;
|
||||
stat_cnt_t prepare_retry;
|
||||
} journal;
|
||||
} reiserfs_proc_info_data_t;
|
||||
#else
|
||||
typedef struct reiserfs_proc_info_data
|
||||
{} reiserfs_proc_info_data_t;
|
||||
typedef struct reiserfs_proc_info_data {
|
||||
} reiserfs_proc_info_data_t;
|
||||
#endif
|
||||
|
||||
/* reiserfs union of in-core super block data */
|
||||
struct reiserfs_sb_info
|
||||
{
|
||||
struct buffer_head * s_sbh; /* Buffer containing the super block */
|
||||
/* both the comment and the choice of
|
||||
name are unclear for s_rs -Hans */
|
||||
struct reiserfs_super_block * s_rs; /* Pointer to the super block in the buffer */
|
||||
struct reiserfs_bitmap_info * s_ap_bitmap;
|
||||
struct reiserfs_journal *s_journal ; /* pointer to journal information */
|
||||
unsigned short s_mount_state; /* reiserfs state (valid, invalid) */
|
||||
|
||||
/* Comment? -Hans */
|
||||
void (*end_io_handler)(struct buffer_head *, int);
|
||||
hashf_t s_hash_function; /* pointer to function which is used
|
||||
to sort names in directory. Set on
|
||||
mount */
|
||||
unsigned long s_mount_opt; /* reiserfs's mount options are set
|
||||
here (currently - NOTAIL, NOLOG,
|
||||
REPLAYONLY) */
|
||||
struct reiserfs_sb_info {
|
||||
struct buffer_head *s_sbh; /* Buffer containing the super block */
|
||||
/* both the comment and the choice of
|
||||
name are unclear for s_rs -Hans */
|
||||
struct reiserfs_super_block *s_rs; /* Pointer to the super block in the buffer */
|
||||
struct reiserfs_bitmap_info *s_ap_bitmap;
|
||||
struct reiserfs_journal *s_journal; /* pointer to journal information */
|
||||
unsigned short s_mount_state; /* reiserfs state (valid, invalid) */
|
||||
|
||||
struct { /* This is a structure that describes block allocator options */
|
||||
unsigned long bits; /* Bitfield for enable/disable kind of options */
|
||||
unsigned long large_file_size; /* size started from which we consider file to be a large one(in blocks) */
|
||||
int border; /* percentage of disk, border takes */
|
||||
int preallocmin; /* Minimal file size (in blocks) starting from which we do preallocations */
|
||||
int preallocsize; /* Number of blocks we try to prealloc when file
|
||||
reaches preallocmin size (in blocks) or
|
||||
prealloc_list is empty. */
|
||||
} s_alloc_options;
|
||||
/* Comment? -Hans */
|
||||
void (*end_io_handler) (struct buffer_head *, int);
|
||||
hashf_t s_hash_function; /* pointer to function which is used
|
||||
to sort names in directory. Set on
|
||||
mount */
|
||||
unsigned long s_mount_opt; /* reiserfs's mount options are set
|
||||
here (currently - NOTAIL, NOLOG,
|
||||
REPLAYONLY) */
|
||||
|
||||
/* Comment? -Hans */
|
||||
wait_queue_head_t s_wait;
|
||||
/* To be obsoleted soon by per buffer seals.. -Hans */
|
||||
atomic_t s_generation_counter; // increased by one every time the
|
||||
// tree gets re-balanced
|
||||
unsigned long s_properties; /* File system properties. Currently holds
|
||||
on-disk FS format */
|
||||
|
||||
/* session statistics */
|
||||
int s_kmallocs;
|
||||
int s_disk_reads;
|
||||
int s_disk_writes;
|
||||
int s_fix_nodes;
|
||||
int s_do_balance;
|
||||
int s_unneeded_left_neighbor;
|
||||
int s_good_search_by_key_reada;
|
||||
int s_bmaps;
|
||||
int s_bmaps_without_search;
|
||||
int s_direct2indirect;
|
||||
int s_indirect2direct;
|
||||
struct { /* This is a structure that describes block allocator options */
|
||||
unsigned long bits; /* Bitfield for enable/disable kind of options */
|
||||
unsigned long large_file_size; /* size started from which we consider file to be a large one(in blocks) */
|
||||
int border; /* percentage of disk, border takes */
|
||||
int preallocmin; /* Minimal file size (in blocks) starting from which we do preallocations */
|
||||
int preallocsize; /* Number of blocks we try to prealloc when file
|
||||
reaches preallocmin size (in blocks) or
|
||||
prealloc_list is empty. */
|
||||
} s_alloc_options;
|
||||
|
||||
/* Comment? -Hans */
|
||||
wait_queue_head_t s_wait;
|
||||
/* To be obsoleted soon by per buffer seals.. -Hans */
|
||||
atomic_t s_generation_counter; // increased by one every time the
|
||||
// tree gets re-balanced
|
||||
unsigned long s_properties; /* File system properties. Currently holds
|
||||
on-disk FS format */
|
||||
|
||||
/* session statistics */
|
||||
int s_kmallocs;
|
||||
int s_disk_reads;
|
||||
int s_disk_writes;
|
||||
int s_fix_nodes;
|
||||
int s_do_balance;
|
||||
int s_unneeded_left_neighbor;
|
||||
int s_good_search_by_key_reada;
|
||||
int s_bmaps;
|
||||
int s_bmaps_without_search;
|
||||
int s_direct2indirect;
|
||||
int s_indirect2direct;
|
||||
/* set up when it's ok for reiserfs_read_inode2() to read from
|
||||
disk inode with nlink==0. Currently this is only used during
|
||||
finish_unfinished() processing at mount time */
|
||||
int s_is_unlinked_ok;
|
||||
reiserfs_proc_info_data_t s_proc_info_data;
|
||||
struct proc_dir_entry *procdir;
|
||||
int reserved_blocks; /* amount of blocks reserved for further allocations */
|
||||
spinlock_t bitmap_lock; /* this lock on now only used to protect reserved_blocks variable */
|
||||
struct dentry *priv_root; /* root of /.reiserfs_priv */
|
||||
struct dentry *xattr_root; /* root of /.reiserfs_priv/.xa */
|
||||
struct rw_semaphore xattr_dir_sem;
|
||||
int s_is_unlinked_ok;
|
||||
reiserfs_proc_info_data_t s_proc_info_data;
|
||||
struct proc_dir_entry *procdir;
|
||||
int reserved_blocks; /* amount of blocks reserved for further allocations */
|
||||
spinlock_t bitmap_lock; /* this lock on now only used to protect reserved_blocks variable */
|
||||
struct dentry *priv_root; /* root of /.reiserfs_priv */
|
||||
struct dentry *xattr_root; /* root of /.reiserfs_priv/.xa */
|
||||
struct rw_semaphore xattr_dir_sem;
|
||||
|
||||
int j_errno;
|
||||
int j_errno;
|
||||
#ifdef CONFIG_QUOTA
|
||||
char *s_qf_names[MAXQUOTAS];
|
||||
int s_jquota_fmt;
|
||||
char *s_qf_names[MAXQUOTAS];
|
||||
int s_jquota_fmt;
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -422,14 +418,14 @@ struct reiserfs_sb_info
|
||||
|
||||
enum reiserfs_mount_options {
|
||||
/* Mount options */
|
||||
REISERFS_LARGETAIL, /* large tails will be created in a session */
|
||||
REISERFS_SMALLTAIL, /* small (for files less than block size) tails will be created in a session */
|
||||
REPLAYONLY, /* replay journal and return 0. Use by fsck */
|
||||
REISERFS_CONVERT, /* -o conv: causes conversion of old
|
||||
format super block to the new
|
||||
format. If not specified - old
|
||||
partition will be dealt with in a
|
||||
manner of 3.5.x */
|
||||
REISERFS_LARGETAIL, /* large tails will be created in a session */
|
||||
REISERFS_SMALLTAIL, /* small (for files less than block size) tails will be created in a session */
|
||||
REPLAYONLY, /* replay journal and return 0. Use by fsck */
|
||||
REISERFS_CONVERT, /* -o conv: causes conversion of old
|
||||
format super block to the new
|
||||
format. If not specified - old
|
||||
partition will be dealt with in a
|
||||
manner of 3.5.x */
|
||||
|
||||
/* -o hash={tea, rupasov, r5, detect} is meant for properly mounting
|
||||
** reiserfs disks from 3.5.19 or earlier. 99% of the time, this option
|
||||
@@ -439,41 +435,41 @@ enum reiserfs_mount_options {
|
||||
** the existing hash on the FS, so if you have a tea hash disk, and mount
|
||||
** with -o hash=rupasov, the mount will fail.
|
||||
*/
|
||||
FORCE_TEA_HASH, /* try to force tea hash on mount */
|
||||
FORCE_RUPASOV_HASH, /* try to force rupasov hash on mount */
|
||||
FORCE_R5_HASH, /* try to force rupasov hash on mount */
|
||||
FORCE_HASH_DETECT, /* try to detect hash function on mount */
|
||||
FORCE_TEA_HASH, /* try to force tea hash on mount */
|
||||
FORCE_RUPASOV_HASH, /* try to force rupasov hash on mount */
|
||||
FORCE_R5_HASH, /* try to force rupasov hash on mount */
|
||||
FORCE_HASH_DETECT, /* try to detect hash function on mount */
|
||||
|
||||
REISERFS_DATA_LOG,
|
||||
REISERFS_DATA_ORDERED,
|
||||
REISERFS_DATA_WRITEBACK,
|
||||
REISERFS_DATA_LOG,
|
||||
REISERFS_DATA_ORDERED,
|
||||
REISERFS_DATA_WRITEBACK,
|
||||
|
||||
/* used for testing experimental features, makes benchmarking new
|
||||
features with and without more convenient, should never be used by
|
||||
users in any code shipped to users (ideally) */
|
||||
|
||||
REISERFS_NO_BORDER,
|
||||
REISERFS_NO_UNHASHED_RELOCATION,
|
||||
REISERFS_HASHED_RELOCATION,
|
||||
REISERFS_ATTRS,
|
||||
REISERFS_XATTRS,
|
||||
REISERFS_XATTRS_USER,
|
||||
REISERFS_POSIXACL,
|
||||
REISERFS_BARRIER_NONE,
|
||||
REISERFS_BARRIER_FLUSH,
|
||||
REISERFS_NO_BORDER,
|
||||
REISERFS_NO_UNHASHED_RELOCATION,
|
||||
REISERFS_HASHED_RELOCATION,
|
||||
REISERFS_ATTRS,
|
||||
REISERFS_XATTRS,
|
||||
REISERFS_XATTRS_USER,
|
||||
REISERFS_POSIXACL,
|
||||
REISERFS_BARRIER_NONE,
|
||||
REISERFS_BARRIER_FLUSH,
|
||||
|
||||
/* Actions on error */
|
||||
REISERFS_ERROR_PANIC,
|
||||
REISERFS_ERROR_RO,
|
||||
REISERFS_ERROR_CONTINUE,
|
||||
/* Actions on error */
|
||||
REISERFS_ERROR_PANIC,
|
||||
REISERFS_ERROR_RO,
|
||||
REISERFS_ERROR_CONTINUE,
|
||||
|
||||
REISERFS_QUOTA, /* Some quota option specified */
|
||||
REISERFS_QUOTA, /* Some quota option specified */
|
||||
|
||||
REISERFS_TEST1,
|
||||
REISERFS_TEST2,
|
||||
REISERFS_TEST3,
|
||||
REISERFS_TEST4,
|
||||
REISERFS_UNSUPPORTED_OPT,
|
||||
REISERFS_TEST1,
|
||||
REISERFS_TEST2,
|
||||
REISERFS_TEST3,
|
||||
REISERFS_TEST4,
|
||||
REISERFS_UNSUPPORTED_OPT,
|
||||
};
|
||||
|
||||
#define reiserfs_r5_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_R5_HASH))
|
||||
@@ -504,18 +500,17 @@ enum reiserfs_mount_options {
|
||||
#define reiserfs_error_panic(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_ERROR_PANIC))
|
||||
#define reiserfs_error_ro(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_ERROR_RO))
|
||||
|
||||
void reiserfs_file_buffer (struct buffer_head * bh, int list);
|
||||
void reiserfs_file_buffer(struct buffer_head *bh, int list);
|
||||
extern struct file_system_type reiserfs_fs_type;
|
||||
int reiserfs_resize(struct super_block *, unsigned long) ;
|
||||
int reiserfs_resize(struct super_block *, unsigned long);
|
||||
|
||||
#define CARRY_ON 0
|
||||
#define SCHEDULE_OCCURRED 1
|
||||
|
||||
|
||||
#define SB_BUFFER_WITH_SB(s) (REISERFS_SB(s)->s_sbh)
|
||||
#define SB_JOURNAL(s) (REISERFS_SB(s)->s_journal)
|
||||
#define SB_JOURNAL_1st_RESERVED_BLOCK(s) (SB_JOURNAL(s)->j_1st_reserved_block)
|
||||
#define SB_JOURNAL_LEN_FREE(s) (SB_JOURNAL(s)->j_journal_len_free)
|
||||
#define SB_JOURNAL_LEN_FREE(s) (SB_JOURNAL(s)->j_journal_len_free)
|
||||
#define SB_AP_BITMAP(s) (REISERFS_SB(s)->s_ap_bitmap)
|
||||
|
||||
#define SB_DISK_JOURNAL_HEAD(s) (SB_JOURNAL(s)->j_header_bh->)
|
||||
@@ -525,13 +520,14 @@ int reiserfs_resize(struct super_block *, unsigned long) ;
|
||||
*/
|
||||
static inline char *reiserfs_bdevname(struct super_block *s)
|
||||
{
|
||||
return (s == NULL) ? "Null superblock" : s -> s_id;
|
||||
return (s == NULL) ? "Null superblock" : s->s_id;
|
||||
}
|
||||
|
||||
#define reiserfs_is_journal_aborted(journal) (unlikely (__reiserfs_is_journal_aborted (journal)))
|
||||
static inline int __reiserfs_is_journal_aborted (struct reiserfs_journal *journal)
|
||||
static inline int __reiserfs_is_journal_aborted(struct reiserfs_journal
|
||||
*journal)
|
||||
{
|
||||
return test_bit (J_ABORTED, &journal->j_state);
|
||||
return test_bit(J_ABORTED, &journal->j_state);
|
||||
}
|
||||
|
||||
#endif /* _LINUX_REISER_FS_SB */
|
||||
#endif /* _LINUX_REISER_FS_SB */
|
||||
|
@@ -7,48 +7,48 @@
|
||||
#include <linux/xattr.h>
|
||||
|
||||
/* Magic value in header */
|
||||
#define REISERFS_XATTR_MAGIC 0x52465841 /* "RFXA" */
|
||||
#define REISERFS_XATTR_MAGIC 0x52465841 /* "RFXA" */
|
||||
|
||||
struct reiserfs_xattr_header {
|
||||
__le32 h_magic; /* magic number for identification */
|
||||
__le32 h_hash; /* hash of the value */
|
||||
__le32 h_magic; /* magic number for identification */
|
||||
__le32 h_hash; /* hash of the value */
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct reiserfs_xattr_handler {
|
||||
char *prefix;
|
||||
int (*init)(void);
|
||||
void (*exit)(void);
|
||||
int (*get)(struct inode *inode, const char *name, void *buffer,
|
||||
size_t size);
|
||||
int (*set)(struct inode *inode, const char *name, const void *buffer,
|
||||
size_t size, int flags);
|
||||
int (*del)(struct inode *inode, const char *name);
|
||||
int (*list)(struct inode *inode, const char *name, int namelen, char *out);
|
||||
struct list_head handlers;
|
||||
int (*init) (void);
|
||||
void (*exit) (void);
|
||||
int (*get) (struct inode * inode, const char *name, void *buffer,
|
||||
size_t size);
|
||||
int (*set) (struct inode * inode, const char *name, const void *buffer,
|
||||
size_t size, int flags);
|
||||
int (*del) (struct inode * inode, const char *name);
|
||||
int (*list) (struct inode * inode, const char *name, int namelen,
|
||||
char *out);
|
||||
struct list_head handlers;
|
||||
};
|
||||
|
||||
|
||||
#ifdef CONFIG_REISERFS_FS_XATTR
|
||||
#define is_reiserfs_priv_object(inode) IS_PRIVATE(inode)
|
||||
#define has_xattr_dir(inode) (REISERFS_I(inode)->i_flags & i_has_xattr_dir)
|
||||
ssize_t reiserfs_getxattr (struct dentry *dentry, const char *name,
|
||||
void *buffer, size_t size);
|
||||
int reiserfs_setxattr (struct dentry *dentry, const char *name,
|
||||
const void *value, size_t size, int flags);
|
||||
ssize_t reiserfs_listxattr (struct dentry *dentry, char *buffer, size_t size);
|
||||
int reiserfs_removexattr (struct dentry *dentry, const char *name);
|
||||
int reiserfs_delete_xattrs (struct inode *inode);
|
||||
int reiserfs_chown_xattrs (struct inode *inode, struct iattr *attrs);
|
||||
int reiserfs_xattr_init (struct super_block *sb, int mount_flags);
|
||||
int reiserfs_permission (struct inode *inode, int mask, struct nameidata *nd);
|
||||
int reiserfs_permission_locked (struct inode *inode, int mask, struct nameidata *nd);
|
||||
ssize_t reiserfs_getxattr(struct dentry *dentry, const char *name,
|
||||
void *buffer, size_t size);
|
||||
int reiserfs_setxattr(struct dentry *dentry, const char *name,
|
||||
const void *value, size_t size, int flags);
|
||||
ssize_t reiserfs_listxattr(struct dentry *dentry, char *buffer, size_t size);
|
||||
int reiserfs_removexattr(struct dentry *dentry, const char *name);
|
||||
int reiserfs_delete_xattrs(struct inode *inode);
|
||||
int reiserfs_chown_xattrs(struct inode *inode, struct iattr *attrs);
|
||||
int reiserfs_xattr_init(struct super_block *sb, int mount_flags);
|
||||
int reiserfs_permission(struct inode *inode, int mask, struct nameidata *nd);
|
||||
int reiserfs_permission_locked(struct inode *inode, int mask,
|
||||
struct nameidata *nd);
|
||||
|
||||
int reiserfs_xattr_del (struct inode *, const char *);
|
||||
int reiserfs_xattr_get (const struct inode *, const char *, void *, size_t);
|
||||
int reiserfs_xattr_set (struct inode *, const char *, const void *,
|
||||
size_t, int);
|
||||
int reiserfs_xattr_del(struct inode *, const char *);
|
||||
int reiserfs_xattr_get(const struct inode *, const char *, void *, size_t);
|
||||
int reiserfs_xattr_set(struct inode *, const char *, const void *, size_t, int);
|
||||
|
||||
extern struct reiserfs_xattr_handler user_handler;
|
||||
extern struct reiserfs_xattr_handler trusted_handler;
|
||||
@@ -56,57 +56,48 @@ extern struct reiserfs_xattr_handler trusted_handler;
|
||||
extern struct reiserfs_xattr_handler security_handler;
|
||||
#endif
|
||||
|
||||
int reiserfs_xattr_register_handlers (void) __init;
|
||||
void reiserfs_xattr_unregister_handlers (void);
|
||||
int reiserfs_xattr_register_handlers(void) __init;
|
||||
void reiserfs_xattr_unregister_handlers(void);
|
||||
|
||||
static inline void
|
||||
reiserfs_write_lock_xattrs(struct super_block *sb)
|
||||
static inline void reiserfs_write_lock_xattrs(struct super_block *sb)
|
||||
{
|
||||
down_write (&REISERFS_XATTR_DIR_SEM(sb));
|
||||
down_write(&REISERFS_XATTR_DIR_SEM(sb));
|
||||
}
|
||||
static inline void
|
||||
reiserfs_write_unlock_xattrs(struct super_block *sb)
|
||||
static inline void reiserfs_write_unlock_xattrs(struct super_block *sb)
|
||||
{
|
||||
up_write (&REISERFS_XATTR_DIR_SEM(sb));
|
||||
up_write(&REISERFS_XATTR_DIR_SEM(sb));
|
||||
}
|
||||
static inline void
|
||||
reiserfs_read_lock_xattrs(struct super_block *sb)
|
||||
static inline void reiserfs_read_lock_xattrs(struct super_block *sb)
|
||||
{
|
||||
down_read (&REISERFS_XATTR_DIR_SEM(sb));
|
||||
down_read(&REISERFS_XATTR_DIR_SEM(sb));
|
||||
}
|
||||
|
||||
static inline void
|
||||
reiserfs_read_unlock_xattrs(struct super_block *sb)
|
||||
static inline void reiserfs_read_unlock_xattrs(struct super_block *sb)
|
||||
{
|
||||
up_read (&REISERFS_XATTR_DIR_SEM(sb));
|
||||
up_read(&REISERFS_XATTR_DIR_SEM(sb));
|
||||
}
|
||||
|
||||
static inline void
|
||||
reiserfs_write_lock_xattr_i(struct inode *inode)
|
||||
static inline void reiserfs_write_lock_xattr_i(struct inode *inode)
|
||||
{
|
||||
down_write (&REISERFS_I(inode)->xattr_sem);
|
||||
down_write(&REISERFS_I(inode)->xattr_sem);
|
||||
}
|
||||
static inline void
|
||||
reiserfs_write_unlock_xattr_i(struct inode *inode)
|
||||
static inline void reiserfs_write_unlock_xattr_i(struct inode *inode)
|
||||
{
|
||||
up_write (&REISERFS_I(inode)->xattr_sem);
|
||||
up_write(&REISERFS_I(inode)->xattr_sem);
|
||||
}
|
||||
static inline void
|
||||
reiserfs_read_lock_xattr_i(struct inode *inode)
|
||||
static inline void reiserfs_read_lock_xattr_i(struct inode *inode)
|
||||
{
|
||||
down_read (&REISERFS_I(inode)->xattr_sem);
|
||||
down_read(&REISERFS_I(inode)->xattr_sem);
|
||||
}
|
||||
|
||||
static inline void
|
||||
reiserfs_read_unlock_xattr_i(struct inode *inode)
|
||||
static inline void reiserfs_read_unlock_xattr_i(struct inode *inode)
|
||||
{
|
||||
up_read (&REISERFS_I(inode)->xattr_sem);
|
||||
up_read(&REISERFS_I(inode)->xattr_sem);
|
||||
}
|
||||
|
||||
static inline void
|
||||
reiserfs_mark_inode_private(struct inode *inode)
|
||||
static inline void reiserfs_mark_inode_private(struct inode *inode)
|
||||
{
|
||||
inode->i_flags |= S_PRIVATE;
|
||||
inode->i_flags |= S_PRIVATE;
|
||||
}
|
||||
|
||||
#else
|
||||
@@ -127,13 +118,20 @@ reiserfs_mark_inode_private(struct inode *inode)
|
||||
#define reiserfs_xattr_register_handlers() 0
|
||||
#define reiserfs_xattr_unregister_handlers()
|
||||
|
||||
static inline int reiserfs_delete_xattrs (struct inode *inode) { return 0; };
|
||||
static inline int reiserfs_chown_xattrs (struct inode *inode, struct iattr *attrs) { return 0; };
|
||||
static inline int reiserfs_xattr_init (struct super_block *sb, int mount_flags)
|
||||
static inline int reiserfs_delete_xattrs(struct inode *inode)
|
||||
{
|
||||
sb->s_flags = (sb->s_flags & ~MS_POSIXACL); /* to be sure */
|
||||
return 0;
|
||||
return 0;
|
||||
};
|
||||
static inline int reiserfs_chown_xattrs(struct inode *inode,
|
||||
struct iattr *attrs)
|
||||
{
|
||||
return 0;
|
||||
};
|
||||
static inline int reiserfs_xattr_init(struct super_block *sb, int mount_flags)
|
||||
{
|
||||
sb->s_flags = (sb->s_flags & ~MS_POSIXACL); /* to be sure */
|
||||
return 0;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* __KERNEL__ */
|
||||
|
@@ -410,6 +410,10 @@ struct user_struct {
|
||||
atomic_t processes; /* How many processes does this user have? */
|
||||
atomic_t files; /* How many open files does this user have? */
|
||||
atomic_t sigpending; /* How many pending signals does this user have? */
|
||||
#ifdef CONFIG_INOTIFY
|
||||
atomic_t inotify_watches; /* How many inotify watches does this user have? */
|
||||
atomic_t inotify_devs; /* How many inotify devs does this user have opened? */
|
||||
#endif
|
||||
/* protected by mq_lock */
|
||||
unsigned long mq_bytes; /* How many bytes can be allocated to mqueue? */
|
||||
unsigned long locked_shm; /* How many pages of mlocked shm ? */
|
||||
|
@@ -183,7 +183,6 @@ struct skb_shared_info {
|
||||
* @priority: Packet queueing priority
|
||||
* @users: User count - see {datagram,tcp}.c
|
||||
* @protocol: Packet protocol from driver
|
||||
* @security: Security level of packet
|
||||
* @truesize: Buffer size
|
||||
* @head: Head of buffer
|
||||
* @data: Data head pointer
|
||||
@@ -249,18 +248,18 @@ struct sk_buff {
|
||||
data_len,
|
||||
mac_len,
|
||||
csum;
|
||||
unsigned char local_df,
|
||||
cloned:1,
|
||||
nohdr:1,
|
||||
pkt_type,
|
||||
ip_summed;
|
||||
__u32 priority;
|
||||
unsigned short protocol,
|
||||
security;
|
||||
__u8 local_df:1,
|
||||
cloned:1,
|
||||
ip_summed:2,
|
||||
nohdr:1;
|
||||
/* 3 bits spare */
|
||||
__u8 pkt_type;
|
||||
__u16 protocol;
|
||||
|
||||
void (*destructor)(struct sk_buff *skb);
|
||||
#ifdef CONFIG_NETFILTER
|
||||
unsigned long nfmark;
|
||||
unsigned long nfmark;
|
||||
__u32 nfcache;
|
||||
__u32 nfctinfo;
|
||||
struct nf_conntrack *nfct;
|
||||
@@ -301,20 +300,26 @@ struct sk_buff {
|
||||
#include <asm/system.h>
|
||||
|
||||
extern void __kfree_skb(struct sk_buff *skb);
|
||||
extern struct sk_buff *alloc_skb(unsigned int size, int priority);
|
||||
extern struct sk_buff *alloc_skb(unsigned int size,
|
||||
unsigned int __nocast priority);
|
||||
extern struct sk_buff *alloc_skb_from_cache(kmem_cache_t *cp,
|
||||
unsigned int size, int priority);
|
||||
unsigned int size,
|
||||
unsigned int __nocast priority);
|
||||
extern void kfree_skbmem(struct sk_buff *skb);
|
||||
extern struct sk_buff *skb_clone(struct sk_buff *skb, int priority);
|
||||
extern struct sk_buff *skb_copy(const struct sk_buff *skb, int priority);
|
||||
extern struct sk_buff *pskb_copy(struct sk_buff *skb, int gfp_mask);
|
||||
extern struct sk_buff *skb_clone(struct sk_buff *skb,
|
||||
unsigned int __nocast priority);
|
||||
extern struct sk_buff *skb_copy(const struct sk_buff *skb,
|
||||
unsigned int __nocast priority);
|
||||
extern struct sk_buff *pskb_copy(struct sk_buff *skb,
|
||||
unsigned int __nocast gfp_mask);
|
||||
extern int pskb_expand_head(struct sk_buff *skb,
|
||||
int nhead, int ntail, int gfp_mask);
|
||||
int nhead, int ntail,
|
||||
unsigned int __nocast gfp_mask);
|
||||
extern struct sk_buff *skb_realloc_headroom(struct sk_buff *skb,
|
||||
unsigned int headroom);
|
||||
extern struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
|
||||
int newheadroom, int newtailroom,
|
||||
int priority);
|
||||
unsigned int __nocast priority);
|
||||
extern struct sk_buff * skb_pad(struct sk_buff *skb, int pad);
|
||||
#define dev_kfree_skb(a) kfree_skb(a)
|
||||
extern void skb_over_panic(struct sk_buff *skb, int len,
|
||||
@@ -465,7 +470,8 @@ static inline int skb_shared(const struct sk_buff *skb)
|
||||
*
|
||||
* NULL is returned on a memory allocation failure.
|
||||
*/
|
||||
static inline struct sk_buff *skb_share_check(struct sk_buff *skb, int pri)
|
||||
static inline struct sk_buff *skb_share_check(struct sk_buff *skb,
|
||||
unsigned int __nocast pri)
|
||||
{
|
||||
might_sleep_if(pri & __GFP_WAIT);
|
||||
if (skb_shared(skb)) {
|
||||
@@ -1002,7 +1008,7 @@ static inline void __skb_queue_purge(struct sk_buff_head *list)
|
||||
* %NULL is returned in there is no free memory.
|
||||
*/
|
||||
static inline struct sk_buff *__dev_alloc_skb(unsigned int length,
|
||||
int gfp_mask)
|
||||
unsigned int __nocast gfp_mask)
|
||||
{
|
||||
struct sk_buff *skb = alloc_skb(length + 16, gfp_mask);
|
||||
if (likely(skb))
|
||||
@@ -1115,8 +1121,8 @@ static inline int skb_can_coalesce(struct sk_buff *skb, int i,
|
||||
* If there is no free memory -ENOMEM is returned, otherwise zero
|
||||
* is returned and the old skb data released.
|
||||
*/
|
||||
extern int __skb_linearize(struct sk_buff *skb, int gfp);
|
||||
static inline int skb_linearize(struct sk_buff *skb, int gfp)
|
||||
extern int __skb_linearize(struct sk_buff *skb, unsigned int __nocast gfp);
|
||||
static inline int skb_linearize(struct sk_buff *skb, unsigned int __nocast gfp)
|
||||
{
|
||||
return __skb_linearize(skb, gfp);
|
||||
}
|
||||
@@ -1211,7 +1217,7 @@ static inline void *skb_header_pointer(const struct sk_buff *skb, int offset,
|
||||
{
|
||||
int hlen = skb_headlen(skb);
|
||||
|
||||
if (offset + len <= hlen)
|
||||
if (hlen - offset >= len)
|
||||
return skb->data + offset;
|
||||
|
||||
if (skb_copy_bits(skb, offset, buffer, len) < 0)
|
||||
|
@@ -65,7 +65,7 @@ extern void *kmem_cache_alloc(kmem_cache_t *, unsigned int __nocast);
|
||||
extern void kmem_cache_free(kmem_cache_t *, void *);
|
||||
extern unsigned int kmem_cache_size(kmem_cache_t *);
|
||||
extern const char *kmem_cache_name(kmem_cache_t *);
|
||||
extern kmem_cache_t *kmem_find_general_cachep(size_t size, int gfpflags);
|
||||
extern kmem_cache_t *kmem_find_general_cachep(size_t size, unsigned int __nocast gfpflags);
|
||||
|
||||
/* Size description struct for general caches. */
|
||||
struct cache_sizes {
|
||||
@@ -105,7 +105,7 @@ extern unsigned int ksize(const void *);
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
extern void *kmem_cache_alloc_node(kmem_cache_t *, int flags, int node);
|
||||
extern void *kmalloc_node(size_t size, int flags, int node);
|
||||
extern void *kmalloc_node(size_t size, unsigned int __nocast flags, int node);
|
||||
#else
|
||||
static inline void *kmem_cache_alloc_node(kmem_cache_t *cachep, int flags, int node)
|
||||
{
|
||||
|
@@ -88,7 +88,7 @@ extern int memcmp(const void *,const void *,__kernel_size_t);
|
||||
extern void * memchr(const void *,int,__kernel_size_t);
|
||||
#endif
|
||||
|
||||
extern char *kstrdup(const char *s, int gfp);
|
||||
extern char *kstrdup(const char *s, unsigned int __nocast gfp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@@ -7,6 +7,8 @@
|
||||
#include <linux/mmzone.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/pagemap.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
@@ -148,7 +150,7 @@ struct swap_list_t {
|
||||
#define vm_swap_full() (nr_swap_pages*2 < total_swap_pages)
|
||||
|
||||
/* linux/mm/oom_kill.c */
|
||||
extern void out_of_memory(unsigned int __nocast gfp_mask);
|
||||
extern void out_of_memory(unsigned int __nocast gfp_mask, int order);
|
||||
|
||||
/* linux/mm/memory.c */
|
||||
extern void swapin_readahead(swp_entry_t, unsigned long, struct vm_area_struct *);
|
||||
|
@@ -506,4 +506,7 @@ asmlinkage long sys_request_key(const char __user *_type,
|
||||
asmlinkage long sys_keyctl(int cmd, unsigned long arg2, unsigned long arg3,
|
||||
unsigned long arg4, unsigned long arg5);
|
||||
|
||||
asmlinkage long sys_ioprio_set(int which, int who, int ioprio);
|
||||
asmlinkage long sys_ioprio_get(int which, int who);
|
||||
|
||||
#endif
|
||||
|
@@ -61,7 +61,8 @@ enum
|
||||
CTL_DEV=7, /* Devices */
|
||||
CTL_BUS=8, /* Busses */
|
||||
CTL_ABI=9, /* Binary emulation */
|
||||
CTL_CPU=10 /* CPU stuff (speed scaling, etc) */
|
||||
CTL_CPU=10, /* CPU stuff (speed scaling, etc) */
|
||||
CTL_INOTIFY=11 /* Inotify */
|
||||
};
|
||||
|
||||
/* CTL_BUS names: */
|
||||
@@ -70,6 +71,14 @@ enum
|
||||
CTL_BUS_ISA=1 /* ISA */
|
||||
};
|
||||
|
||||
/* CTL_INOTIFY names: */
|
||||
enum
|
||||
{
|
||||
INOTIFY_MAX_USER_DEVICES=1, /* max number of inotify device instances per user */
|
||||
INOTIFY_MAX_USER_WATCHES=2, /* max number of inotify watches per user */
|
||||
INOTIFY_MAX_QUEUED_EVENTS=3 /* Max number of queued events per inotify device instance */
|
||||
};
|
||||
|
||||
/* CTL_KERN names: */
|
||||
enum
|
||||
{
|
||||
|
@@ -45,7 +45,7 @@ enum
|
||||
TCF_META_ID_REALDEV,
|
||||
TCF_META_ID_PRIORITY,
|
||||
TCF_META_ID_PROTOCOL,
|
||||
TCF_META_ID_SECURITY,
|
||||
TCF_META_ID_SECURITY, /* obsolete */
|
||||
TCF_META_ID_PKTTYPE,
|
||||
TCF_META_ID_PKTLEN,
|
||||
TCF_META_ID_DATALEN,
|
||||
|
@@ -286,7 +286,7 @@ struct tcp_sock {
|
||||
__u32 max_window; /* Maximal window ever seen from peer */
|
||||
__u32 pmtu_cookie; /* Last pmtu seen by socket */
|
||||
__u32 mss_cache; /* Cached effective mss, not including SACKS */
|
||||
__u16 mss_cache_std; /* Like mss_cache, but without TSO */
|
||||
__u16 xmit_size_goal; /* Goal for segmenting output packets */
|
||||
__u16 ext_header_len; /* Network protocol overhead (IP/IPv6 options) */
|
||||
__u8 ca_state; /* State of fast-retransmit machine */
|
||||
__u8 retransmits; /* Number of unrecovered RTO timeouts. */
|
||||
|
@@ -938,17 +938,17 @@ static inline void usb_fill_int_urb (struct urb *urb,
|
||||
}
|
||||
|
||||
extern void usb_init_urb(struct urb *urb);
|
||||
extern struct urb *usb_alloc_urb(int iso_packets, int mem_flags);
|
||||
extern struct urb *usb_alloc_urb(int iso_packets, unsigned mem_flags);
|
||||
extern void usb_free_urb(struct urb *urb);
|
||||
#define usb_put_urb usb_free_urb
|
||||
extern struct urb *usb_get_urb(struct urb *urb);
|
||||
extern int usb_submit_urb(struct urb *urb, int mem_flags);
|
||||
extern int usb_submit_urb(struct urb *urb, unsigned mem_flags);
|
||||
extern int usb_unlink_urb(struct urb *urb);
|
||||
extern void usb_kill_urb(struct urb *urb);
|
||||
|
||||
#define HAVE_USB_BUFFERS
|
||||
void *usb_buffer_alloc (struct usb_device *dev, size_t size,
|
||||
int mem_flags, dma_addr_t *dma);
|
||||
unsigned mem_flags, dma_addr_t *dma);
|
||||
void usb_buffer_free (struct usb_device *dev, size_t size,
|
||||
void *addr, dma_addr_t dma);
|
||||
|
||||
@@ -1055,7 +1055,7 @@ int usb_sg_init (
|
||||
struct scatterlist *sg,
|
||||
int nents,
|
||||
size_t length,
|
||||
int mem_flags
|
||||
unsigned mem_flags
|
||||
);
|
||||
void usb_sg_cancel (struct usb_sg_request *io);
|
||||
void usb_sg_wait (struct usb_sg_request *io);
|
||||
|
@@ -34,6 +34,7 @@
|
||||
#define USB_CDC_ACM_TYPE 0x02 /* acm_descriptor */
|
||||
#define USB_CDC_UNION_TYPE 0x06 /* union_desc */
|
||||
#define USB_CDC_COUNTRY_TYPE 0x07
|
||||
#define USB_CDC_NETWORK_TERMINAL_TYPE 0x0a /* network_terminal_desc */
|
||||
#define USB_CDC_ETHERNET_TYPE 0x0f /* ether_desc */
|
||||
#define USB_CDC_WHCM_TYPE 0x11
|
||||
#define USB_CDC_MDLM_TYPE 0x12 /* mdlm_desc */
|
||||
@@ -83,6 +84,18 @@ struct usb_cdc_union_desc {
|
||||
/* ... and there could be other slave interfaces */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* "Network Channel Terminal Functional Descriptor" from CDC spec 5.2.3.11 */
|
||||
struct usb_cdc_network_terminal_desc {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
__u8 bDescriptorSubType;
|
||||
|
||||
__u8 bEntityId;
|
||||
__u8 iName;
|
||||
__u8 bChannelIndex;
|
||||
__u8 bPhysicalInterface;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* "Ethernet Networking Functional Descriptor" from CDC spec 5.2.3.16 */
|
||||
struct usb_cdc_ether_desc {
|
||||
__u8 bLength;
|
||||
|
@@ -107,18 +107,18 @@ struct usb_ep_ops {
|
||||
int (*disable) (struct usb_ep *ep);
|
||||
|
||||
struct usb_request *(*alloc_request) (struct usb_ep *ep,
|
||||
int gfp_flags);
|
||||
unsigned gfp_flags);
|
||||
void (*free_request) (struct usb_ep *ep, struct usb_request *req);
|
||||
|
||||
void *(*alloc_buffer) (struct usb_ep *ep, unsigned bytes,
|
||||
dma_addr_t *dma, int gfp_flags);
|
||||
dma_addr_t *dma, unsigned gfp_flags);
|
||||
void (*free_buffer) (struct usb_ep *ep, void *buf, dma_addr_t dma,
|
||||
unsigned bytes);
|
||||
// NOTE: on 2.6, drivers may also use dma_map() and
|
||||
// dma_sync_single_*() to directly manage dma overhead.
|
||||
|
||||
int (*queue) (struct usb_ep *ep, struct usb_request *req,
|
||||
int gfp_flags);
|
||||
unsigned gfp_flags);
|
||||
int (*dequeue) (struct usb_ep *ep, struct usb_request *req);
|
||||
|
||||
int (*set_halt) (struct usb_ep *ep, int value);
|
||||
@@ -214,7 +214,7 @@ usb_ep_disable (struct usb_ep *ep)
|
||||
* Returns the request, or null if one could not be allocated.
|
||||
*/
|
||||
static inline struct usb_request *
|
||||
usb_ep_alloc_request (struct usb_ep *ep, int gfp_flags)
|
||||
usb_ep_alloc_request (struct usb_ep *ep, unsigned gfp_flags)
|
||||
{
|
||||
return ep->ops->alloc_request (ep, gfp_flags);
|
||||
}
|
||||
@@ -254,7 +254,7 @@ usb_ep_free_request (struct usb_ep *ep, struct usb_request *req)
|
||||
*/
|
||||
static inline void *
|
||||
usb_ep_alloc_buffer (struct usb_ep *ep, unsigned len, dma_addr_t *dma,
|
||||
int gfp_flags)
|
||||
unsigned gfp_flags)
|
||||
{
|
||||
return ep->ops->alloc_buffer (ep, len, dma, gfp_flags);
|
||||
}
|
||||
@@ -330,7 +330,7 @@ usb_ep_free_buffer (struct usb_ep *ep, void *buf, dma_addr_t dma, unsigned len)
|
||||
* reported when the usb peripheral is disconnected.
|
||||
*/
|
||||
static inline int
|
||||
usb_ep_queue (struct usb_ep *ep, struct usb_request *req, int gfp_flags)
|
||||
usb_ep_queue (struct usb_ep *ep, struct usb_request *req, unsigned gfp_flags)
|
||||
{
|
||||
return ep->ops->queue (ep, req, gfp_flags);
|
||||
}
|
||||
|
@@ -516,8 +516,7 @@ struct wan_device {
|
||||
/* Public functions available for device drivers */
|
||||
extern int register_wan_device(struct wan_device *wandev);
|
||||
extern int unregister_wan_device(char *name);
|
||||
unsigned short wanrouter_type_trans(struct sk_buff *skb,
|
||||
struct net_device *dev);
|
||||
__be16 wanrouter_type_trans(struct sk_buff *skb, struct net_device *dev);
|
||||
int wanrouter_encapsulate(struct sk_buff *skb, struct net_device *dev,
|
||||
unsigned short type);
|
||||
|
||||
|
Reference in New Issue
Block a user