Merge branch 'linus' into percpu-cpumask-x86-for-linus-2
Conflicts: arch/sparc/kernel/time_64.c drivers/gpu/drm/drm_proc.c Manual merge to resolve build warning due to phys_addr_t type change on x86: drivers/gpu/drm/drm_info.c Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@@ -165,15 +165,8 @@ int sync_mapping_buffers(struct address_space *mapping);
|
||||
void unmap_underlying_metadata(struct block_device *bdev, sector_t block);
|
||||
|
||||
void mark_buffer_async_write(struct buffer_head *bh);
|
||||
void invalidate_bdev(struct block_device *);
|
||||
int sync_blockdev(struct block_device *bdev);
|
||||
void __wait_on_buffer(struct buffer_head *);
|
||||
wait_queue_head_t *bh_waitq_head(struct buffer_head *bh);
|
||||
int fsync_bdev(struct block_device *);
|
||||
struct super_block *freeze_bdev(struct block_device *);
|
||||
int thaw_bdev(struct block_device *, struct super_block *);
|
||||
int fsync_super(struct super_block *);
|
||||
int fsync_no_super(struct block_device *);
|
||||
struct buffer_head *__find_get_block(struct block_device *bdev, sector_t block,
|
||||
unsigned size);
|
||||
struct buffer_head *__getblk(struct block_device *bdev, sector_t block,
|
||||
|
@@ -125,6 +125,13 @@ struct compat_dirent {
|
||||
char d_name[256];
|
||||
};
|
||||
|
||||
struct compat_ustat {
|
||||
compat_daddr_t f_tfree;
|
||||
compat_ino_t f_tinode;
|
||||
char f_fname[6];
|
||||
char f_fpack[6];
|
||||
};
|
||||
|
||||
typedef union compat_sigval {
|
||||
compat_int_t sival_int;
|
||||
compat_uptr_t sival_ptr;
|
||||
@@ -178,6 +185,7 @@ long compat_sys_semtimedop(int semid, struct sembuf __user *tsems,
|
||||
unsigned nsems, const struct compat_timespec __user *timeout);
|
||||
asmlinkage long compat_sys_keyctl(u32 option,
|
||||
u32 arg2, u32 arg3, u32 arg4, u32 arg5);
|
||||
asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *u32);
|
||||
|
||||
asmlinkage ssize_t compat_sys_readv(unsigned long fd,
|
||||
const struct compat_iovec __user *vec, unsigned long vlen);
|
||||
|
@@ -112,7 +112,7 @@ struct dentry {
|
||||
struct list_head d_subdirs; /* our children */
|
||||
struct list_head d_alias; /* inode alias list */
|
||||
unsigned long d_time; /* used by d_revalidate */
|
||||
struct dentry_operations *d_op;
|
||||
const struct dentry_operations *d_op;
|
||||
struct super_block *d_sb; /* The root of the dentry tree */
|
||||
void *d_fsdata; /* fs-specific data */
|
||||
|
||||
|
@@ -25,10 +25,12 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/firewire-constants.h>
|
||||
|
||||
#define FW_CDEV_EVENT_BUS_RESET 0x00
|
||||
#define FW_CDEV_EVENT_RESPONSE 0x01
|
||||
#define FW_CDEV_EVENT_REQUEST 0x02
|
||||
#define FW_CDEV_EVENT_ISO_INTERRUPT 0x03
|
||||
#define FW_CDEV_EVENT_BUS_RESET 0x00
|
||||
#define FW_CDEV_EVENT_RESPONSE 0x01
|
||||
#define FW_CDEV_EVENT_REQUEST 0x02
|
||||
#define FW_CDEV_EVENT_ISO_INTERRUPT 0x03
|
||||
#define FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED 0x04
|
||||
#define FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED 0x05
|
||||
|
||||
/**
|
||||
* struct fw_cdev_event_common - Common part of all fw_cdev_event_ types
|
||||
@@ -136,7 +138,24 @@ struct fw_cdev_event_request {
|
||||
* This event is sent when the controller has completed an &fw_cdev_iso_packet
|
||||
* with the %FW_CDEV_ISO_INTERRUPT bit set. In the receive case, the headers
|
||||
* stripped of all packets up until and including the interrupt packet are
|
||||
* returned in the @header field.
|
||||
* returned in the @header field. The amount of header data per packet is as
|
||||
* specified at iso context creation by &fw_cdev_create_iso_context.header_size.
|
||||
*
|
||||
* In version 1 of this ABI, header data consisted of the 1394 isochronous
|
||||
* packet header, followed by quadlets from the packet payload if
|
||||
* &fw_cdev_create_iso_context.header_size > 4.
|
||||
*
|
||||
* In version 2 of this ABI, header data consist of the 1394 isochronous
|
||||
* packet header, followed by a timestamp quadlet if
|
||||
* &fw_cdev_create_iso_context.header_size > 4, followed by quadlets from the
|
||||
* packet payload if &fw_cdev_create_iso_context.header_size > 8.
|
||||
*
|
||||
* Behaviour of ver. 1 of this ABI is no longer available since ABI ver. 2.
|
||||
*
|
||||
* Format of 1394 iso packet header: 16 bits len, 2 bits tag, 6 bits channel,
|
||||
* 4 bits tcode, 4 bits sy, in big endian byte order. Format of timestamp:
|
||||
* 16 bits invalid, 3 bits cycleSeconds, 13 bits cycleCount, in big endian byte
|
||||
* order.
|
||||
*/
|
||||
struct fw_cdev_event_iso_interrupt {
|
||||
__u64 closure;
|
||||
@@ -146,6 +165,35 @@ struct fw_cdev_event_iso_interrupt {
|
||||
__u32 header[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct fw_cdev_event_iso_resource - Iso resources were allocated or freed
|
||||
* @closure: See &fw_cdev_event_common;
|
||||
* set by %FW_CDEV_IOC_(DE)ALLOCATE_ISO_RESOURCE(_ONCE) ioctl
|
||||
* @type: %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or
|
||||
* %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED
|
||||
* @handle: Reference by which an allocated resource can be deallocated
|
||||
* @channel: Isochronous channel which was (de)allocated, if any
|
||||
* @bandwidth: Bandwidth allocation units which were (de)allocated, if any
|
||||
*
|
||||
* An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED event is sent after an isochronous
|
||||
* resource was allocated at the IRM. The client has to check @channel and
|
||||
* @bandwidth for whether the allocation actually succeeded.
|
||||
*
|
||||
* An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event is sent after an isochronous
|
||||
* resource was deallocated at the IRM. It is also sent when automatic
|
||||
* reallocation after a bus reset failed.
|
||||
*
|
||||
* @channel is <0 if no channel was (de)allocated or if reallocation failed.
|
||||
* @bandwidth is 0 if no bandwidth was (de)allocated or if reallocation failed.
|
||||
*/
|
||||
struct fw_cdev_event_iso_resource {
|
||||
__u64 closure;
|
||||
__u32 type;
|
||||
__u32 handle;
|
||||
__s32 channel;
|
||||
__s32 bandwidth;
|
||||
};
|
||||
|
||||
/**
|
||||
* union fw_cdev_event - Convenience union of fw_cdev_event_ types
|
||||
* @common: Valid for all types
|
||||
@@ -153,6 +201,9 @@ struct fw_cdev_event_iso_interrupt {
|
||||
* @response: Valid if @common.type == %FW_CDEV_EVENT_RESPONSE
|
||||
* @request: Valid if @common.type == %FW_CDEV_EVENT_REQUEST
|
||||
* @iso_interrupt: Valid if @common.type == %FW_CDEV_EVENT_ISO_INTERRUPT
|
||||
* @iso_resource: Valid if @common.type ==
|
||||
* %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or
|
||||
* %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED
|
||||
*
|
||||
* Convenience union for userspace use. Events could be read(2) into an
|
||||
* appropriately aligned char buffer and then cast to this union for further
|
||||
@@ -163,33 +214,47 @@ struct fw_cdev_event_iso_interrupt {
|
||||
* not fit will be discarded so that the next read(2) will return a new event.
|
||||
*/
|
||||
union fw_cdev_event {
|
||||
struct fw_cdev_event_common common;
|
||||
struct fw_cdev_event_bus_reset bus_reset;
|
||||
struct fw_cdev_event_response response;
|
||||
struct fw_cdev_event_request request;
|
||||
struct fw_cdev_event_iso_interrupt iso_interrupt;
|
||||
struct fw_cdev_event_common common;
|
||||
struct fw_cdev_event_bus_reset bus_reset;
|
||||
struct fw_cdev_event_response response;
|
||||
struct fw_cdev_event_request request;
|
||||
struct fw_cdev_event_iso_interrupt iso_interrupt;
|
||||
struct fw_cdev_event_iso_resource iso_resource;
|
||||
};
|
||||
|
||||
#define FW_CDEV_IOC_GET_INFO _IOWR('#', 0x00, struct fw_cdev_get_info)
|
||||
#define FW_CDEV_IOC_SEND_REQUEST _IOW('#', 0x01, struct fw_cdev_send_request)
|
||||
#define FW_CDEV_IOC_ALLOCATE _IOWR('#', 0x02, struct fw_cdev_allocate)
|
||||
#define FW_CDEV_IOC_DEALLOCATE _IOW('#', 0x03, struct fw_cdev_deallocate)
|
||||
#define FW_CDEV_IOC_SEND_RESPONSE _IOW('#', 0x04, struct fw_cdev_send_response)
|
||||
#define FW_CDEV_IOC_INITIATE_BUS_RESET _IOW('#', 0x05, struct fw_cdev_initiate_bus_reset)
|
||||
#define FW_CDEV_IOC_ADD_DESCRIPTOR _IOWR('#', 0x06, struct fw_cdev_add_descriptor)
|
||||
#define FW_CDEV_IOC_REMOVE_DESCRIPTOR _IOW('#', 0x07, struct fw_cdev_remove_descriptor)
|
||||
/* available since kernel version 2.6.22 */
|
||||
#define FW_CDEV_IOC_GET_INFO _IOWR('#', 0x00, struct fw_cdev_get_info)
|
||||
#define FW_CDEV_IOC_SEND_REQUEST _IOW('#', 0x01, struct fw_cdev_send_request)
|
||||
#define FW_CDEV_IOC_ALLOCATE _IOWR('#', 0x02, struct fw_cdev_allocate)
|
||||
#define FW_CDEV_IOC_DEALLOCATE _IOW('#', 0x03, struct fw_cdev_deallocate)
|
||||
#define FW_CDEV_IOC_SEND_RESPONSE _IOW('#', 0x04, struct fw_cdev_send_response)
|
||||
#define FW_CDEV_IOC_INITIATE_BUS_RESET _IOW('#', 0x05, struct fw_cdev_initiate_bus_reset)
|
||||
#define FW_CDEV_IOC_ADD_DESCRIPTOR _IOWR('#', 0x06, struct fw_cdev_add_descriptor)
|
||||
#define FW_CDEV_IOC_REMOVE_DESCRIPTOR _IOW('#', 0x07, struct fw_cdev_remove_descriptor)
|
||||
#define FW_CDEV_IOC_CREATE_ISO_CONTEXT _IOWR('#', 0x08, struct fw_cdev_create_iso_context)
|
||||
#define FW_CDEV_IOC_QUEUE_ISO _IOWR('#', 0x09, struct fw_cdev_queue_iso)
|
||||
#define FW_CDEV_IOC_START_ISO _IOW('#', 0x0a, struct fw_cdev_start_iso)
|
||||
#define FW_CDEV_IOC_STOP_ISO _IOW('#', 0x0b, struct fw_cdev_stop_iso)
|
||||
|
||||
#define FW_CDEV_IOC_CREATE_ISO_CONTEXT _IOWR('#', 0x08, struct fw_cdev_create_iso_context)
|
||||
#define FW_CDEV_IOC_QUEUE_ISO _IOWR('#', 0x09, struct fw_cdev_queue_iso)
|
||||
#define FW_CDEV_IOC_START_ISO _IOW('#', 0x0a, struct fw_cdev_start_iso)
|
||||
#define FW_CDEV_IOC_STOP_ISO _IOW('#', 0x0b, struct fw_cdev_stop_iso)
|
||||
#define FW_CDEV_IOC_GET_CYCLE_TIMER _IOR('#', 0x0c, struct fw_cdev_get_cycle_timer)
|
||||
/* available since kernel version 2.6.24 */
|
||||
#define FW_CDEV_IOC_GET_CYCLE_TIMER _IOR('#', 0x0c, struct fw_cdev_get_cycle_timer)
|
||||
|
||||
/* FW_CDEV_VERSION History
|
||||
*
|
||||
* 1 Feb 18, 2007: Initial version.
|
||||
/* available since kernel version 2.6.30 */
|
||||
#define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE _IOWR('#', 0x0d, struct fw_cdev_allocate_iso_resource)
|
||||
#define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE _IOW('#', 0x0e, struct fw_cdev_deallocate)
|
||||
#define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE _IOW('#', 0x0f, struct fw_cdev_allocate_iso_resource)
|
||||
#define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE _IOW('#', 0x10, struct fw_cdev_allocate_iso_resource)
|
||||
#define FW_CDEV_IOC_GET_SPEED _IO('#', 0x11) /* returns speed code */
|
||||
#define FW_CDEV_IOC_SEND_BROADCAST_REQUEST _IOW('#', 0x12, struct fw_cdev_send_request)
|
||||
#define FW_CDEV_IOC_SEND_STREAM_PACKET _IOW('#', 0x13, struct fw_cdev_send_stream_packet)
|
||||
|
||||
/*
|
||||
* FW_CDEV_VERSION History
|
||||
* 1 (2.6.22) - initial version
|
||||
* 2 (2.6.30) - changed &fw_cdev_event_iso_interrupt.header if
|
||||
* &fw_cdev_create_iso_context.header_size is 8 or more
|
||||
*/
|
||||
#define FW_CDEV_VERSION 1
|
||||
#define FW_CDEV_VERSION 2
|
||||
|
||||
/**
|
||||
* struct fw_cdev_get_info - General purpose information ioctl
|
||||
@@ -201,7 +266,7 @@ union fw_cdev_event {
|
||||
* case, @rom_length is updated with the actual length of the
|
||||
* configuration ROM.
|
||||
* @rom: If non-zero, address of a buffer to be filled by a copy of the
|
||||
* local node's configuration ROM
|
||||
* device's configuration ROM
|
||||
* @bus_reset: If non-zero, address of a buffer to be filled by a
|
||||
* &struct fw_cdev_event_bus_reset with the current state
|
||||
* of the bus. This does not cause a bus reset to happen.
|
||||
@@ -229,7 +294,7 @@ struct fw_cdev_get_info {
|
||||
* Send a request to the device. This ioctl implements all outgoing requests.
|
||||
* Both quadlet and block request specify the payload as a pointer to the data
|
||||
* in the @data field. Once the transaction completes, the kernel writes an
|
||||
* &fw_cdev_event_request event back. The @closure field is passed back to
|
||||
* &fw_cdev_event_response event back. The @closure field is passed back to
|
||||
* user space in the response event.
|
||||
*/
|
||||
struct fw_cdev_send_request {
|
||||
@@ -284,9 +349,9 @@ struct fw_cdev_allocate {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct fw_cdev_deallocate - Free an address range allocation
|
||||
* @handle: Handle to the address range, as returned by the kernel when the
|
||||
* range was allocated
|
||||
* struct fw_cdev_deallocate - Free a CSR address range or isochronous resource
|
||||
* @handle: Handle to the address range or iso resource, as returned by the
|
||||
* kernel when the range or resource was allocated
|
||||
*/
|
||||
struct fw_cdev_deallocate {
|
||||
__u32 handle;
|
||||
@@ -329,6 +394,9 @@ struct fw_cdev_initiate_bus_reset {
|
||||
* If successful, the kernel adds the descriptor and writes back a handle to the
|
||||
* kernel-side object to be used for later removal of the descriptor block and
|
||||
* immediate key.
|
||||
*
|
||||
* This ioctl affects the configuration ROMs of all local nodes.
|
||||
* The ioctl only succeeds on device files which represent a local node.
|
||||
*/
|
||||
struct fw_cdev_add_descriptor {
|
||||
__u32 immediate;
|
||||
@@ -344,7 +412,7 @@ struct fw_cdev_add_descriptor {
|
||||
* descriptor was added
|
||||
*
|
||||
* Remove a descriptor block and accompanying immediate key from the local
|
||||
* node's configuration ROM.
|
||||
* nodes' configuration ROMs.
|
||||
*/
|
||||
struct fw_cdev_remove_descriptor {
|
||||
__u32 handle;
|
||||
@@ -370,6 +438,9 @@ struct fw_cdev_remove_descriptor {
|
||||
*
|
||||
* If a context was successfully created, the kernel writes back a handle to the
|
||||
* context, which must be passed in for subsequent operations on that context.
|
||||
*
|
||||
* Note that the effect of a @header_size > 4 depends on
|
||||
* &fw_cdev_get_info.version, as documented at &fw_cdev_event_iso_interrupt.
|
||||
*/
|
||||
struct fw_cdev_create_iso_context {
|
||||
__u32 type;
|
||||
@@ -473,10 +544,91 @@ struct fw_cdev_stop_iso {
|
||||
* The %FW_CDEV_IOC_GET_CYCLE_TIMER ioctl reads the isochronous cycle timer
|
||||
* and also the system clock. This allows to express the receive time of an
|
||||
* isochronous packet as a system time with microsecond accuracy.
|
||||
*
|
||||
* @cycle_timer consists of 7 bits cycleSeconds, 13 bits cycleCount, and
|
||||
* 12 bits cycleOffset, in host byte order.
|
||||
*/
|
||||
struct fw_cdev_get_cycle_timer {
|
||||
__u64 local_time;
|
||||
__u32 cycle_timer;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct fw_cdev_allocate_iso_resource - (De)allocate a channel or bandwidth
|
||||
* @closure: Passed back to userspace in correponding iso resource events
|
||||
* @channels: Isochronous channels of which one is to be (de)allocated
|
||||
* @bandwidth: Isochronous bandwidth units to be (de)allocated
|
||||
* @handle: Handle to the allocation, written by the kernel (only valid in
|
||||
* case of %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctls)
|
||||
*
|
||||
* The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctl initiates allocation of an
|
||||
* isochronous channel and/or of isochronous bandwidth at the isochronous
|
||||
* resource manager (IRM). Only one of the channels specified in @channels is
|
||||
* allocated. An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED is sent after
|
||||
* communication with the IRM, indicating success or failure in the event data.
|
||||
* The kernel will automatically reallocate the resources after bus resets.
|
||||
* Should a reallocation fail, an %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event
|
||||
* will be sent. The kernel will also automatically deallocate the resources
|
||||
* when the file descriptor is closed.
|
||||
*
|
||||
* The %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE ioctl can be used to initiate
|
||||
* deallocation of resources which were allocated as described above.
|
||||
* An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation.
|
||||
*
|
||||
* The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE ioctl is a variant of allocation
|
||||
* without automatic re- or deallocation.
|
||||
* An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED event concludes this operation,
|
||||
* indicating success or failure in its data.
|
||||
*
|
||||
* The %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE ioctl works like
|
||||
* %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE except that resources are freed
|
||||
* instead of allocated.
|
||||
* An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation.
|
||||
*
|
||||
* To summarize, %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE allocates iso resources
|
||||
* for the lifetime of the fd or handle.
|
||||
* In contrast, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE allocates iso resources
|
||||
* for the duration of a bus generation.
|
||||
*
|
||||
* @channels is a host-endian bitfield with the least significant bit
|
||||
* representing channel 0 and the most significant bit representing channel 63:
|
||||
* 1ULL << c for each channel c that is a candidate for (de)allocation.
|
||||
*
|
||||
* @bandwidth is expressed in bandwidth allocation units, i.e. the time to send
|
||||
* one quadlet of data (payload or header data) at speed S1600.
|
||||
*/
|
||||
struct fw_cdev_allocate_iso_resource {
|
||||
__u64 closure;
|
||||
__u64 channels;
|
||||
__u32 bandwidth;
|
||||
__u32 handle;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct fw_cdev_send_stream_packet - send an asynchronous stream packet
|
||||
* @length: Length of outgoing payload, in bytes
|
||||
* @tag: Data format tag
|
||||
* @channel: Isochronous channel to transmit to
|
||||
* @sy: Synchronization code
|
||||
* @closure: Passed back to userspace in the response event
|
||||
* @data: Userspace pointer to payload
|
||||
* @generation: The bus generation where packet is valid
|
||||
* @speed: Speed to transmit at
|
||||
*
|
||||
* The %FW_CDEV_IOC_SEND_STREAM_PACKET ioctl sends an asynchronous stream packet
|
||||
* to every device which is listening to the specified channel. The kernel
|
||||
* writes an &fw_cdev_event_response event which indicates success or failure of
|
||||
* the transmission.
|
||||
*/
|
||||
struct fw_cdev_send_stream_packet {
|
||||
__u32 length;
|
||||
__u32 tag;
|
||||
__u32 channel;
|
||||
__u32 sy;
|
||||
__u64 closure;
|
||||
__u64 data;
|
||||
__u32 generation;
|
||||
__u32 speed;
|
||||
};
|
||||
|
||||
#endif /* _LINUX_FIREWIRE_CDEV_H */
|
||||
|
@@ -1064,34 +1064,147 @@ extern int lease_modify(struct file_lock **, int);
|
||||
extern int lock_may_read(struct inode *, loff_t start, unsigned long count);
|
||||
extern int lock_may_write(struct inode *, loff_t start, unsigned long count);
|
||||
#else /* !CONFIG_FILE_LOCKING */
|
||||
#define fcntl_getlk(a, b) ({ -EINVAL; })
|
||||
#define fcntl_setlk(a, b, c, d) ({ -EACCES; })
|
||||
static inline int fcntl_getlk(struct file *file, struct flock __user *user)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int fcntl_setlk(unsigned int fd, struct file *file,
|
||||
unsigned int cmd, struct flock __user *user)
|
||||
{
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
#if BITS_PER_LONG == 32
|
||||
#define fcntl_getlk64(a, b) ({ -EINVAL; })
|
||||
#define fcntl_setlk64(a, b, c, d) ({ -EACCES; })
|
||||
static inline int fcntl_getlk64(struct file *file, struct flock64 __user *user)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int fcntl_setlk64(unsigned int fd, struct file *file,
|
||||
unsigned int cmd, struct flock64 __user *user)
|
||||
{
|
||||
return -EACCES;
|
||||
}
|
||||
#endif
|
||||
#define fcntl_setlease(a, b, c) ({ 0; })
|
||||
#define fcntl_getlease(a) ({ 0; })
|
||||
#define locks_init_lock(a) ({ })
|
||||
#define __locks_copy_lock(a, b) ({ })
|
||||
#define locks_copy_lock(a, b) ({ })
|
||||
#define locks_remove_posix(a, b) ({ })
|
||||
#define locks_remove_flock(a) ({ })
|
||||
#define posix_test_lock(a, b) ({ 0; })
|
||||
#define posix_lock_file(a, b, c) ({ -ENOLCK; })
|
||||
#define posix_lock_file_wait(a, b) ({ -ENOLCK; })
|
||||
#define posix_unblock_lock(a, b) (-ENOENT)
|
||||
#define vfs_test_lock(a, b) ({ 0; })
|
||||
#define vfs_lock_file(a, b, c, d) (-ENOLCK)
|
||||
#define vfs_cancel_lock(a, b) ({ 0; })
|
||||
#define flock_lock_file_wait(a, b) ({ -ENOLCK; })
|
||||
#define __break_lease(a, b) ({ 0; })
|
||||
#define lease_get_mtime(a, b) ({ })
|
||||
#define generic_setlease(a, b, c) ({ -EINVAL; })
|
||||
#define vfs_setlease(a, b, c) ({ -EINVAL; })
|
||||
#define lease_modify(a, b) ({ -EINVAL; })
|
||||
#define lock_may_read(a, b, c) ({ 1; })
|
||||
#define lock_may_write(a, b, c) ({ 1; })
|
||||
static inline int fcntl_setlease(unsigned int fd, struct file *filp, long arg)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int fcntl_getlease(struct file *filp)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void locks_init_lock(struct file_lock *fl)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static inline void __locks_copy_lock(struct file_lock *new, struct file_lock *fl)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static inline void locks_copy_lock(struct file_lock *new, struct file_lock *fl)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static inline void locks_remove_posix(struct file *filp, fl_owner_t owner)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static inline void locks_remove_flock(struct file *filp)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static inline void posix_test_lock(struct file *filp, struct file_lock *fl)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static inline int posix_lock_file(struct file *filp, struct file_lock *fl,
|
||||
struct file_lock *conflock)
|
||||
{
|
||||
return -ENOLCK;
|
||||
}
|
||||
|
||||
static inline int posix_lock_file_wait(struct file *filp, struct file_lock *fl)
|
||||
{
|
||||
return -ENOLCK;
|
||||
}
|
||||
|
||||
static inline int posix_unblock_lock(struct file *filp,
|
||||
struct file_lock *waiter)
|
||||
{
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
static inline int vfs_test_lock(struct file *filp, struct file_lock *fl)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int vfs_lock_file(struct file *filp, unsigned int cmd,
|
||||
struct file_lock *fl, struct file_lock *conf)
|
||||
{
|
||||
return -ENOLCK;
|
||||
}
|
||||
|
||||
static inline int vfs_cancel_lock(struct file *filp, struct file_lock *fl)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int flock_lock_file_wait(struct file *filp,
|
||||
struct file_lock *request)
|
||||
{
|
||||
return -ENOLCK;
|
||||
}
|
||||
|
||||
static inline int __break_lease(struct inode *inode, unsigned int mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void lease_get_mtime(struct inode *inode, struct timespec *time)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static inline int generic_setlease(struct file *filp, long arg,
|
||||
struct file_lock **flp)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int vfs_setlease(struct file *filp, long arg,
|
||||
struct file_lock **lease)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int lease_modify(struct file_lock **before, int arg)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int lock_may_read(struct inode *inode, loff_t start,
|
||||
unsigned long len)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int lock_may_write(struct inode *inode, loff_t start,
|
||||
unsigned long len)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_FILE_LOCKING */
|
||||
|
||||
|
||||
@@ -1607,7 +1720,7 @@ struct super_block *sget(struct file_system_type *type,
|
||||
extern int get_sb_pseudo(struct file_system_type *, char *,
|
||||
const struct super_operations *ops, unsigned long,
|
||||
struct vfsmount *mnt);
|
||||
extern int simple_set_mnt(struct vfsmount *mnt, struct super_block *sb);
|
||||
extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb);
|
||||
int __put_super_and_need_restart(struct super_block *sb);
|
||||
|
||||
/* Alas, no aliases. Too much hassle with bringing module.h everywhere */
|
||||
@@ -1688,13 +1801,44 @@ static inline int break_lease(struct inode *inode, unsigned int mode)
|
||||
return 0;
|
||||
}
|
||||
#else /* !CONFIG_FILE_LOCKING */
|
||||
#define locks_mandatory_locked(a) ({ 0; })
|
||||
#define locks_mandatory_area(a, b, c, d, e) ({ 0; })
|
||||
#define __mandatory_lock(a) ({ 0; })
|
||||
#define mandatory_lock(a) ({ 0; })
|
||||
#define locks_verify_locked(a) ({ 0; })
|
||||
#define locks_verify_truncate(a, b, c) ({ 0; })
|
||||
#define break_lease(a, b) ({ 0; })
|
||||
static inline int locks_mandatory_locked(struct inode *inode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int locks_mandatory_area(int rw, struct inode *inode,
|
||||
struct file *filp, loff_t offset,
|
||||
size_t count)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int __mandatory_lock(struct inode *inode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int mandatory_lock(struct inode *inode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int locks_verify_locked(struct inode *inode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int locks_verify_truncate(struct inode *inode, struct file *filp,
|
||||
size_t size)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int break_lease(struct inode *inode, unsigned int mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_FILE_LOCKING */
|
||||
|
||||
/* fs/open.c */
|
||||
@@ -1731,6 +1875,13 @@ extern void bd_set_size(struct block_device *, loff_t size);
|
||||
extern void bd_forget(struct inode *inode);
|
||||
extern void bdput(struct block_device *);
|
||||
extern struct block_device *open_by_devnum(dev_t, fmode_t);
|
||||
extern void invalidate_bdev(struct block_device *);
|
||||
extern int sync_blockdev(struct block_device *bdev);
|
||||
extern struct super_block *freeze_bdev(struct block_device *);
|
||||
extern int thaw_bdev(struct block_device *bdev, struct super_block *sb);
|
||||
extern int fsync_bdev(struct block_device *);
|
||||
extern int fsync_super(struct super_block *);
|
||||
extern int fsync_no_super(struct block_device *);
|
||||
#else
|
||||
static inline void bd_forget(struct inode *inode) {}
|
||||
#endif
|
||||
@@ -1882,7 +2033,6 @@ static inline void allow_write_access(struct file *file)
|
||||
if (file)
|
||||
atomic_inc(&file->f_path.dentry->d_inode->i_writecount);
|
||||
}
|
||||
extern int do_pipe(int *);
|
||||
extern int do_pipe_flags(int *, int);
|
||||
extern struct file *create_read_pipe(struct file *f, int flags);
|
||||
extern struct file *create_write_pipe(int flags);
|
||||
|
@@ -18,6 +18,22 @@
|
||||
#include <linux/types.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
/*
|
||||
* DS bit usage
|
||||
*
|
||||
* TA = transmitter address
|
||||
* RA = receiver address
|
||||
* DA = destination address
|
||||
* SA = source address
|
||||
*
|
||||
* ToDS FromDS A1(RA) A2(TA) A3 A4 Use
|
||||
* -----------------------------------------------------------------
|
||||
* 0 0 DA SA BSSID - IBSS/DLS
|
||||
* 0 1 DA BSSID SA - AP -> STA
|
||||
* 1 0 BSSID SA DA - AP <- STA
|
||||
* 1 1 RA TA DA SA unspecified (WDS)
|
||||
*/
|
||||
|
||||
#define FCS_LEN 4
|
||||
|
||||
#define IEEE80211_FCTL_VERS 0x0003
|
||||
@@ -851,6 +867,7 @@ struct ieee80211_ht_info {
|
||||
/* Authentication algorithms */
|
||||
#define WLAN_AUTH_OPEN 0
|
||||
#define WLAN_AUTH_SHARED_KEY 1
|
||||
#define WLAN_AUTH_FT 2
|
||||
#define WLAN_AUTH_LEAP 128
|
||||
|
||||
#define WLAN_AUTH_CHALLENGE_LEN 128
|
||||
|
@@ -153,7 +153,6 @@ struct frhdr
|
||||
|
||||
struct dlci_local
|
||||
{
|
||||
struct net_device_stats stats;
|
||||
struct net_device *master;
|
||||
struct net_device *slave;
|
||||
struct dlci_conf config;
|
||||
|
@@ -204,7 +204,7 @@ void ncp_update_inode2(struct inode *, struct ncp_entry_info *);
|
||||
/* linux/fs/ncpfs/dir.c */
|
||||
extern const struct inode_operations ncp_dir_inode_operations;
|
||||
extern const struct file_operations ncp_dir_operations;
|
||||
extern struct dentry_operations ncp_root_dentry_operations;
|
||||
extern const struct dentry_operations ncp_root_dentry_operations;
|
||||
int ncp_conn_logged_in(struct super_block *);
|
||||
int ncp_date_dos2unix(__le16 time, __le16 date);
|
||||
void ncp_date_unix2dos(int unix_date, __le16 * time, __le16 * date);
|
||||
|
@@ -32,6 +32,7 @@
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/timer.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/mm.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/cache.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
@@ -437,6 +437,29 @@ extern void xt_free_table_info(struct xt_table_info *info);
|
||||
extern void xt_table_entry_swap_rcu(struct xt_table_info *old,
|
||||
struct xt_table_info *new);
|
||||
|
||||
/*
|
||||
* This helper is performance critical and must be inlined
|
||||
*/
|
||||
static inline unsigned long ifname_compare_aligned(const char *_a,
|
||||
const char *_b,
|
||||
const char *_mask)
|
||||
{
|
||||
const unsigned long *a = (const unsigned long *)_a;
|
||||
const unsigned long *b = (const unsigned long *)_b;
|
||||
const unsigned long *mask = (const unsigned long *)_mask;
|
||||
unsigned long ret;
|
||||
|
||||
ret = (a[0] ^ b[0]) & mask[0];
|
||||
if (IFNAMSIZ > sizeof(unsigned long))
|
||||
ret |= (a[1] ^ b[1]) & mask[1];
|
||||
if (IFNAMSIZ > 2 * sizeof(unsigned long))
|
||||
ret |= (a[2] ^ b[2]) & mask[2];
|
||||
if (IFNAMSIZ > 3 * sizeof(unsigned long))
|
||||
ret |= (a[3] ^ b[3]) & mask[3];
|
||||
BUILD_BUG_ON(IFNAMSIZ > 4 * sizeof(unsigned long));
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
#include <net/compat.h>
|
||||
|
||||
|
@@ -415,7 +415,7 @@ extern const struct inode_operations nfs_dir_inode_operations;
|
||||
extern const struct inode_operations nfs3_dir_inode_operations;
|
||||
#endif /* CONFIG_NFS_V3 */
|
||||
extern const struct file_operations nfs_dir_operations;
|
||||
extern struct dentry_operations nfs_dentry_operations;
|
||||
extern const struct dentry_operations nfs_dentry_operations;
|
||||
|
||||
extern void nfs_force_lookup_revalidate(struct inode *dir);
|
||||
extern int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fh, struct nfs_fattr *fattr);
|
||||
|
@@ -785,7 +785,7 @@ struct nfs_access_entry;
|
||||
*/
|
||||
struct nfs_rpc_ops {
|
||||
u32 version; /* Protocol version */
|
||||
struct dentry_operations *dentry_ops;
|
||||
const struct dentry_operations *dentry_ops;
|
||||
const struct inode_operations *dir_inode_ops;
|
||||
const struct inode_operations *file_inode_ops;
|
||||
|
||||
|
@@ -142,6 +142,12 @@
|
||||
* %NL80211_ATTR_IE. If the command succeeds, the requested data will be
|
||||
* added to all specified management frames generated by
|
||||
* kernel/firmware/driver.
|
||||
* Note: This command has been removed and it is only reserved at this
|
||||
* point to avoid re-using existing command number. The functionality this
|
||||
* command was planned for has been provided with cleaner design with the
|
||||
* option to specify additional IEs in NL80211_CMD_TRIGGER_SCAN,
|
||||
* NL80211_CMD_AUTHENTICATE, NL80211_CMD_ASSOCIATE,
|
||||
* NL80211_CMD_DEAUTHENTICATE, and NL80211_CMD_DISASSOCIATE.
|
||||
*
|
||||
* @NL80211_CMD_GET_SCAN: get scan results
|
||||
* @NL80211_CMD_TRIGGER_SCAN: trigger a new scan with the given parameters
|
||||
@@ -161,6 +167,38 @@
|
||||
* %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on
|
||||
* to (%NL80211_ATTR_REG_ALPHA2).
|
||||
*
|
||||
* @NL80211_CMD_AUTHENTICATE: authentication request and notification.
|
||||
* This command is used both as a command (request to authenticate) and
|
||||
* as an event on the "mlme" multicast group indicating completion of the
|
||||
* authentication process.
|
||||
* When used as a command, %NL80211_ATTR_IFINDEX is used to identify the
|
||||
* interface. %NL80211_ATTR_MAC is used to specify PeerSTAAddress (and
|
||||
* BSSID in case of station mode). %NL80211_ATTR_SSID is used to specify
|
||||
* the SSID (mainly for association, but is included in authentication
|
||||
* request, too, to help BSS selection. %NL80211_ATTR_WIPHY_FREQ is used
|
||||
* to specify the frequence of the channel in MHz. %NL80211_ATTR_AUTH_TYPE
|
||||
* is used to specify the authentication type. %NL80211_ATTR_IE is used to
|
||||
* define IEs (VendorSpecificInfo, but also including RSN IE and FT IEs)
|
||||
* to be added to the frame.
|
||||
* When used as an event, this reports reception of an Authentication
|
||||
* frame in station and IBSS modes when the local MLME processed the
|
||||
* frame, i.e., it was for the local STA and was received in correct
|
||||
* state. This is similar to MLME-AUTHENTICATE.confirm primitive in the
|
||||
* MLME SAP interface (kernel providing MLME, userspace SME). The
|
||||
* included NL80211_ATTR_FRAME attribute contains the management frame
|
||||
* (including both the header and frame body, but not FCS).
|
||||
* @NL80211_CMD_ASSOCIATE: association request and notification; like
|
||||
* NL80211_CMD_AUTHENTICATE but for Association and Reassociation
|
||||
* (similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request,
|
||||
* MLME-ASSOCIATE.confirm or MLME-REASSOCIATE.confirm primitives).
|
||||
* @NL80211_CMD_DEAUTHENTICATE: deauthentication request and notification; like
|
||||
* NL80211_CMD_AUTHENTICATE but for Deauthentication frames (similar to
|
||||
* MLME-DEAUTHENTICATION.request and MLME-DEAUTHENTICATE.indication
|
||||
* primitives).
|
||||
* @NL80211_CMD_DISASSOCIATE: disassociation request and notification; like
|
||||
* NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to
|
||||
* MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives).
|
||||
*
|
||||
* @NL80211_CMD_MAX: highest used command number
|
||||
* @__NL80211_CMD_AFTER_LAST: internal use
|
||||
*/
|
||||
@@ -206,7 +244,7 @@ enum nl80211_commands {
|
||||
NL80211_CMD_GET_MESH_PARAMS,
|
||||
NL80211_CMD_SET_MESH_PARAMS,
|
||||
|
||||
NL80211_CMD_SET_MGMT_EXTRA_IE,
|
||||
NL80211_CMD_SET_MGMT_EXTRA_IE /* reserved; not used */,
|
||||
|
||||
NL80211_CMD_GET_REG,
|
||||
|
||||
@@ -217,6 +255,11 @@ enum nl80211_commands {
|
||||
|
||||
NL80211_CMD_REG_CHANGE,
|
||||
|
||||
NL80211_CMD_AUTHENTICATE,
|
||||
NL80211_CMD_ASSOCIATE,
|
||||
NL80211_CMD_DEAUTHENTICATE,
|
||||
NL80211_CMD_DISASSOCIATE,
|
||||
|
||||
/* add new commands above here */
|
||||
|
||||
/* used to define NL80211_CMD_MAX below */
|
||||
@@ -230,8 +273,11 @@ enum nl80211_commands {
|
||||
*/
|
||||
#define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS
|
||||
#define NL80211_CMD_SET_MGMT_EXTRA_IE NL80211_CMD_SET_MGMT_EXTRA_IE
|
||||
|
||||
#define NL80211_CMD_REG_CHANGE NL80211_CMD_REG_CHANGE
|
||||
#define NL80211_CMD_AUTHENTICATE NL80211_CMD_AUTHENTICATE
|
||||
#define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE
|
||||
#define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE
|
||||
#define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE
|
||||
|
||||
/**
|
||||
* enum nl80211_attrs - nl80211 netlink attributes
|
||||
@@ -349,6 +395,19 @@ enum nl80211_commands {
|
||||
* @NL80211_ATTR_REG_TYPE: indicates the type of the regulatory domain currently
|
||||
* set. This can be one of the nl80211_reg_type (%NL80211_REGDOM_TYPE_*)
|
||||
*
|
||||
* @NL80211_ATTR_SUPPORTED_COMMANDS: wiphy attribute that specifies
|
||||
* an array of command numbers (i.e. a mapping index to command number)
|
||||
* that the driver for the given wiphy supports.
|
||||
*
|
||||
* @NL80211_ATTR_FRAME: frame data (binary attribute), including frame header
|
||||
* and body, but not FCS; used, e.g., with NL80211_CMD_AUTHENTICATE and
|
||||
* NL80211_CMD_ASSOCIATE events
|
||||
* @NL80211_ATTR_SSID: SSID (binary attribute, 0..32 octets)
|
||||
* @NL80211_ATTR_AUTH_TYPE: AuthenticationType, see &enum nl80211_auth_type,
|
||||
* represented as a u32
|
||||
* @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and
|
||||
* %NL80211_CMD_DISASSOCIATE, u16
|
||||
*
|
||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||
*/
|
||||
@@ -426,6 +485,13 @@ enum nl80211_attrs {
|
||||
NL80211_ATTR_REG_INITIATOR,
|
||||
NL80211_ATTR_REG_TYPE,
|
||||
|
||||
NL80211_ATTR_SUPPORTED_COMMANDS,
|
||||
|
||||
NL80211_ATTR_FRAME,
|
||||
NL80211_ATTR_SSID,
|
||||
NL80211_ATTR_AUTH_TYPE,
|
||||
NL80211_ATTR_REASON_CODE,
|
||||
|
||||
/* add attributes here, update the policy in nl80211.c */
|
||||
|
||||
__NL80211_ATTR_AFTER_LAST,
|
||||
@@ -445,6 +511,10 @@ enum nl80211_attrs {
|
||||
#define NL80211_ATTR_IE NL80211_ATTR_IE
|
||||
#define NL80211_ATTR_REG_INITIATOR NL80211_ATTR_REG_INITIATOR
|
||||
#define NL80211_ATTR_REG_TYPE NL80211_ATTR_REG_TYPE
|
||||
#define NL80211_ATTR_FRAME NL80211_ATTR_FRAME
|
||||
#define NL80211_ATTR_SSID NL80211_ATTR_SSID
|
||||
#define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE
|
||||
#define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE
|
||||
|
||||
#define NL80211_MAX_SUPP_RATES 32
|
||||
#define NL80211_MAX_SUPP_REG_RULES 32
|
||||
@@ -978,4 +1048,18 @@ enum nl80211_bss {
|
||||
NL80211_BSS_MAX = __NL80211_BSS_AFTER_LAST - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_auth_type - AuthenticationType
|
||||
*
|
||||
* @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication
|
||||
* @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only)
|
||||
* @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r)
|
||||
* @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP)
|
||||
*/
|
||||
enum nl80211_auth_type {
|
||||
NL80211_AUTHTYPE_OPEN_SYSTEM,
|
||||
NL80211_AUTHTYPE_SHARED_KEY,
|
||||
NL80211_AUTHTYPE_FT,
|
||||
NL80211_AUTHTYPE_NETWORK_EAP,
|
||||
};
|
||||
#endif /* __LINUX_NL80211_H */
|
||||
|
@@ -2271,6 +2271,8 @@
|
||||
#define PCI_DEVICE_ID_KORENIX_JETCARDF0 0x1600
|
||||
#define PCI_DEVICE_ID_KORENIX_JETCARDF1 0x16ff
|
||||
|
||||
#define PCI_VENDOR_ID_QMI 0x1a32
|
||||
|
||||
#define PCI_VENDOR_ID_TEKRAM 0x1de1
|
||||
#define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29
|
||||
|
||||
|
@@ -198,6 +198,7 @@ struct mem_dqblk {
|
||||
qsize_t dqb_bhardlimit; /* absolute limit on disk blks alloc */
|
||||
qsize_t dqb_bsoftlimit; /* preferred limit on disk blks */
|
||||
qsize_t dqb_curspace; /* current used space */
|
||||
qsize_t dqb_rsvspace; /* current reserved space for delalloc*/
|
||||
qsize_t dqb_ihardlimit; /* absolute limit on allocated inodes */
|
||||
qsize_t dqb_isoftlimit; /* preferred inode limit */
|
||||
qsize_t dqb_curinodes; /* current # allocated inodes */
|
||||
@@ -276,8 +277,6 @@ struct dquot {
|
||||
struct mem_dqblk dq_dqb; /* Diskquota usage */
|
||||
};
|
||||
|
||||
#define NODQUOT (struct dquot *)NULL
|
||||
|
||||
#define QUOTA_OK 0
|
||||
#define NO_QUOTA 1
|
||||
|
||||
@@ -308,6 +307,14 @@ struct dquot_operations {
|
||||
int (*release_dquot) (struct dquot *); /* Quota is going to be deleted from disk */
|
||||
int (*mark_dirty) (struct dquot *); /* Dquot is marked dirty */
|
||||
int (*write_info) (struct super_block *, int); /* Write of quota "superblock" */
|
||||
/* reserve quota for delayed block allocation */
|
||||
int (*reserve_space) (struct inode *, qsize_t, int);
|
||||
/* claim reserved quota for delayed alloc */
|
||||
int (*claim_space) (struct inode *, qsize_t);
|
||||
/* release rsved quota for delayed alloc */
|
||||
void (*release_rsv) (struct inode *, qsize_t);
|
||||
/* get reserved quota for delayed alloc */
|
||||
qsize_t (*get_reserved_space) (struct inode *);
|
||||
};
|
||||
|
||||
/* Operations handling requests from userspace */
|
||||
|
@@ -35,6 +35,11 @@ void dquot_destroy(struct dquot *dquot);
|
||||
int dquot_alloc_space(struct inode *inode, qsize_t number, int prealloc);
|
||||
int dquot_alloc_inode(const struct inode *inode, qsize_t number);
|
||||
|
||||
int dquot_reserve_space(struct inode *inode, qsize_t number, int prealloc);
|
||||
int dquot_claim_space(struct inode *inode, qsize_t number);
|
||||
void dquot_release_reserved_space(struct inode *inode, qsize_t number);
|
||||
qsize_t dquot_get_reserved_space(struct inode *inode);
|
||||
|
||||
int dquot_free_space(struct inode *inode, qsize_t number);
|
||||
int dquot_free_inode(const struct inode *inode, qsize_t number);
|
||||
|
||||
@@ -183,6 +188,16 @@ static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int vfs_dq_reserve_space(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
if (sb_any_quota_active(inode->i_sb)) {
|
||||
/* Used space is updated in alloc_space() */
|
||||
if (inode->i_sb->dq_op->reserve_space(inode, nr, 0) == NO_QUOTA)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int vfs_dq_alloc_inode(struct inode *inode)
|
||||
{
|
||||
if (sb_any_quota_active(inode->i_sb)) {
|
||||
@@ -193,6 +208,31 @@ static inline int vfs_dq_alloc_inode(struct inode *inode)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert in-memory reserved quotas to real consumed quotas
|
||||
*/
|
||||
static inline int vfs_dq_claim_space(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
if (sb_any_quota_active(inode->i_sb)) {
|
||||
if (inode->i_sb->dq_op->claim_space(inode, nr) == NO_QUOTA)
|
||||
return 1;
|
||||
} else
|
||||
inode_add_bytes(inode, nr);
|
||||
|
||||
mark_inode_dirty(inode);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Release reserved (in-memory) quotas
|
||||
*/
|
||||
static inline
|
||||
void vfs_dq_release_reservation_space(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
if (sb_any_quota_active(inode->i_sb))
|
||||
inode->i_sb->dq_op->release_rsv(inode, nr);
|
||||
}
|
||||
|
||||
static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
if (sb_any_quota_active(inode->i_sb))
|
||||
@@ -339,6 +379,22 @@ static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int vfs_dq_reserve_space(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int vfs_dq_claim_space(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
return vfs_dq_alloc_space(inode, nr);
|
||||
}
|
||||
|
||||
static inline
|
||||
int vfs_dq_release_reservation_space(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
inode_sub_bytes(inode, nr);
|
||||
@@ -354,67 +410,48 @@ static inline void vfs_dq_free_space(struct inode *inode, qsize_t nr)
|
||||
|
||||
static inline int vfs_dq_prealloc_block_nodirty(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
return vfs_dq_prealloc_space_nodirty(inode,
|
||||
nr << inode->i_sb->s_blocksize_bits);
|
||||
return vfs_dq_prealloc_space_nodirty(inode, nr << inode->i_blkbits);
|
||||
}
|
||||
|
||||
static inline int vfs_dq_prealloc_block(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
return vfs_dq_prealloc_space(inode,
|
||||
nr << inode->i_sb->s_blocksize_bits);
|
||||
return vfs_dq_prealloc_space(inode, nr << inode->i_blkbits);
|
||||
}
|
||||
|
||||
static inline int vfs_dq_alloc_block_nodirty(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
return vfs_dq_alloc_space_nodirty(inode,
|
||||
nr << inode->i_sb->s_blocksize_bits);
|
||||
return vfs_dq_alloc_space_nodirty(inode, nr << inode->i_blkbits);
|
||||
}
|
||||
|
||||
static inline int vfs_dq_alloc_block(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
return vfs_dq_alloc_space(inode,
|
||||
nr << inode->i_sb->s_blocksize_bits);
|
||||
return vfs_dq_alloc_space(inode, nr << inode->i_blkbits);
|
||||
}
|
||||
|
||||
static inline int vfs_dq_reserve_block(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
return vfs_dq_reserve_space(inode, nr << inode->i_blkbits);
|
||||
}
|
||||
|
||||
static inline int vfs_dq_claim_block(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
return vfs_dq_claim_space(inode, nr << inode->i_blkbits);
|
||||
}
|
||||
|
||||
static inline
|
||||
void vfs_dq_release_reservation_block(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
vfs_dq_release_reservation_space(inode, nr << inode->i_blkbits);
|
||||
}
|
||||
|
||||
static inline void vfs_dq_free_block_nodirty(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
vfs_dq_free_space_nodirty(inode, nr << inode->i_sb->s_blocksize_bits);
|
||||
vfs_dq_free_space_nodirty(inode, nr << inode->i_blkbits);
|
||||
}
|
||||
|
||||
static inline void vfs_dq_free_block(struct inode *inode, qsize_t nr)
|
||||
{
|
||||
vfs_dq_free_space(inode, nr << inode->i_sb->s_blocksize_bits);
|
||||
vfs_dq_free_space(inode, nr << inode->i_blkbits);
|
||||
}
|
||||
|
||||
/*
|
||||
* Define uppercase equivalents for compatibility with old function names
|
||||
* Can go away when we think all users have been converted (15/04/2008)
|
||||
*/
|
||||
#define DQUOT_INIT(inode) vfs_dq_init(inode)
|
||||
#define DQUOT_DROP(inode) vfs_dq_drop(inode)
|
||||
#define DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr) \
|
||||
vfs_dq_prealloc_space_nodirty(inode, nr)
|
||||
#define DQUOT_PREALLOC_SPACE(inode, nr) vfs_dq_prealloc_space(inode, nr)
|
||||
#define DQUOT_ALLOC_SPACE_NODIRTY(inode, nr) \
|
||||
vfs_dq_alloc_space_nodirty(inode, nr)
|
||||
#define DQUOT_ALLOC_SPACE(inode, nr) vfs_dq_alloc_space(inode, nr)
|
||||
#define DQUOT_PREALLOC_BLOCK_NODIRTY(inode, nr) \
|
||||
vfs_dq_prealloc_block_nodirty(inode, nr)
|
||||
#define DQUOT_PREALLOC_BLOCK(inode, nr) vfs_dq_prealloc_block(inode, nr)
|
||||
#define DQUOT_ALLOC_BLOCK_NODIRTY(inode, nr) \
|
||||
vfs_dq_alloc_block_nodirty(inode, nr)
|
||||
#define DQUOT_ALLOC_BLOCK(inode, nr) vfs_dq_alloc_block(inode, nr)
|
||||
#define DQUOT_ALLOC_INODE(inode) vfs_dq_alloc_inode(inode)
|
||||
#define DQUOT_FREE_SPACE_NODIRTY(inode, nr) \
|
||||
vfs_dq_free_space_nodirty(inode, nr)
|
||||
#define DQUOT_FREE_SPACE(inode, nr) vfs_dq_free_space(inode, nr)
|
||||
#define DQUOT_FREE_BLOCK_NODIRTY(inode, nr) \
|
||||
vfs_dq_free_block_nodirty(inode, nr)
|
||||
#define DQUOT_FREE_BLOCK(inode, nr) vfs_dq_free_block(inode, nr)
|
||||
#define DQUOT_FREE_INODE(inode) vfs_dq_free_inode(inode)
|
||||
#define DQUOT_TRANSFER(inode, iattr) vfs_dq_transfer(inode, iattr)
|
||||
#define DQUOT_SYNC(sb) vfs_dq_sync(sb)
|
||||
#define DQUOT_OFF(sb, remount) vfs_dq_off(sb, remount)
|
||||
#define DQUOT_ON_REMOUNT(sb) vfs_dq_quota_on_remount(sb)
|
||||
|
||||
#endif /* _LINUX_QUOTAOPS_ */
|
||||
|
Reference in New Issue
Block a user