Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 38880
b: refs/heads/master
c: 128e5eb
h: refs/heads/master
v: v3
  • Loading branch information
Steven Whitehouse committed Oct 2, 2006
1 parent 8f62128 commit d86317a
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 131 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d00223f1693173c7b51f867dd52049955a92d0ed
refs/heads/master: 128e5ebaf8abbda375bba82690b09630003c9213
74 changes: 47 additions & 27 deletions trunk/fs/gfs2/ops_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
#include <linux/gfs2_ondisk.h>
#include <linux/ext2_fs.h>
#include <linux/crc32.h>
#include <linux/iflags.h>
#include <linux/lm_interface.h>
#include <asm/uaccess.h>

Expand Down Expand Up @@ -201,27 +200,48 @@ static int gfs2_readdir(struct file *file, void *dirent, filldir_t filldir)
return error;
}

/**
* fsflags_cvt
* @table: A table of 32 u32 flags
* @val: a 32 bit value to convert
*
* This function can be used to convert between fsflags values and
* GFS2's own flags values.
*
* Returns: the converted flags
*/
static u32 fsflags_cvt(const u32 *table, u32 val)
{
u32 res = 0;
while(val) {
if (val & 1)
res |= *table;
table++;
val >>= 1;
}
return res;
}

static const u32 iflags_to_gfs2[32] = {
[iflag_Sync] = GFS2_DIF_SYNC,
[iflag_Immutable] = GFS2_DIF_IMMUTABLE,
[iflag_Append] = GFS2_DIF_APPENDONLY,
[iflag_NoAtime] = GFS2_DIF_NOATIME,
[iflag_Index] = GFS2_DIF_EXHASH,
[iflag_JournalData] = GFS2_DIF_JDATA,
[iflag_DirectIO] = GFS2_DIF_DIRECTIO,
static const u32 fsflags_to_gfs2[32] = {
[3] = GFS2_DIF_SYNC,
[4] = GFS2_DIF_IMMUTABLE,
[5] = GFS2_DIF_APPENDONLY,
[7] = GFS2_DIF_NOATIME,
[12] = GFS2_DIF_EXHASH,
[14] = GFS2_DIF_JDATA,
[20] = GFS2_DIF_DIRECTIO,
};

static const u32 gfs2_to_iflags[32] = {
[gfs2fl_Sync] = IFLAG_SYNC,
[gfs2fl_Immutable] = IFLAG_IMMUTABLE,
[gfs2fl_AppendOnly] = IFLAG_APPEND,
[gfs2fl_NoAtime] = IFLAG_NOATIME,
[gfs2fl_ExHash] = IFLAG_INDEX,
[gfs2fl_Jdata] = IFLAG_JOURNAL_DATA,
[gfs2fl_Directio] = IFLAG_DIRECTIO,
[gfs2fl_InheritDirectio] = IFLAG_DIRECTIO,
[gfs2fl_InheritJdata] = IFLAG_JOURNAL_DATA,
static const u32 gfs2_to_fsflags[32] = {
[gfs2fl_Sync] = FS_SYNC_FL,
[gfs2fl_Immutable] = FS_IMMUTABLE_FL,
[gfs2fl_AppendOnly] = FS_APPEND_FL,
[gfs2fl_NoAtime] = FS_NOATIME_FL,
[gfs2fl_ExHash] = FS_INDEX_FL,
[gfs2fl_Jdata] = FS_JOURNAL_DATA_FL,
[gfs2fl_Directio] = FS_DIRECTIO_FL,
[gfs2fl_InheritDirectio] = FS_DIRECTIO_FL,
[gfs2fl_InheritJdata] = FS_JOURNAL_DATA_FL,
};

static int gfs2_get_flags(struct file *filp, u32 __user *ptr)
Expand All @@ -230,15 +250,15 @@ static int gfs2_get_flags(struct file *filp, u32 __user *ptr)
struct gfs2_inode *ip = GFS2_I(inode);
struct gfs2_holder gh;
int error;
u32 iflags;
u32 fsflags;

gfs2_holder_init(ip->i_gl, LM_ST_SHARED, GL_ATIME, &gh);
error = gfs2_glock_nq_m_atime(1, &gh);
if (error)
return error;

iflags = iflags_cvt(gfs2_to_iflags, ip->i_di.di_flags);
if (put_user(iflags, ptr))
fsflags = fsflags_cvt(gfs2_to_fsflags, ip->i_di.di_flags);
if (put_user(fsflags, ptr))
error = -EFAULT;

gfs2_glock_dq_m(1, &gh);
Expand Down Expand Up @@ -327,19 +347,19 @@ static int do_gfs2_set_flags(struct file *filp, u32 reqflags, u32 mask)

static int gfs2_set_flags(struct file *filp, u32 __user *ptr)
{
u32 iflags, gfsflags;
if (get_user(iflags, ptr))
u32 fsflags, gfsflags;
if (get_user(fsflags, ptr))
return -EFAULT;
gfsflags = iflags_cvt(iflags_to_gfs2, iflags);
gfsflags = fsflags_cvt(fsflags_to_gfs2, fsflags);
return do_gfs2_set_flags(filp, gfsflags, ~0);
}

static long gfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
switch(cmd) {
case IFLAGS_GET_IOC:
case FS_IOC_GETFLAGS:
return gfs2_get_flags(filp, (u32 __user *)arg);
case IFLAGS_SET_IOC:
case FS_IOC_SETFLAGS:
return gfs2_set_flags(filp, (u32 __user *)arg);
}
return -ENOTTY;
Expand Down
1 change: 0 additions & 1 deletion trunk/include/linux/Kbuild
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,6 @@ unifdef-y += hpet.h
unifdef-y += i2c.h
unifdef-y += i2o-dev.h
unifdef-y += icmpv6.h
unifdef-y += iflags.h
unifdef-y += if_bridge.h
unifdef-y += if_ec.h
unifdef-y += if_eql.h
Expand Down
2 changes: 2 additions & 0 deletions trunk/include/linux/fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,8 @@ extern int dir_notify_enable;
#define FS_NOTAIL_FL 0x00008000 /* file tail should not be merged */
#define FS_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */
#define FS_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
#define FS_EXTENT_FL 0x00080000 /* Extents */
#define FS_DIRECTIO_FL 0x00100000 /* Use direct i/o */
#define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */

#define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
Expand Down
102 changes: 0 additions & 102 deletions trunk/include/linux/iflags.h

This file was deleted.

0 comments on commit d86317a

Please sign in to comment.