forked from Minki/linux
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6: JFS: Fix race waking up jfsIO kernel thread JFS: use __set_current_state() Copy i_flags to jfs inode flags on write JFS: document uid, gid, and umask mount options in jfs.txt
This commit is contained in:
commit
18062a91d2
@ -29,7 +29,13 @@ errors=continue Keep going on a filesystem error.
|
||||
errors=remount-ro Default. Remount the filesystem read-only on an error.
|
||||
errors=panic Panic and halt the machine if an error occurs.
|
||||
|
||||
Please send bugs, comments, cards and letters to shaggy@austin.ibm.com.
|
||||
uid=value Override on-disk uid with specified value
|
||||
gid=value Override on-disk gid with specified value
|
||||
umask=value Override on-disk umask with specified octal value. For
|
||||
directories, the execute bit will be set if the corresponding
|
||||
read bit is set.
|
||||
|
||||
Please send bugs, comments, cards and letters to shaggy@linux.vnet.ibm.com.
|
||||
|
||||
The JFS mailing list can be subscribed to by using the link labeled
|
||||
"Mail list Subscribe" at our web page http://jfs.sourceforge.net/
|
||||
|
@ -55,7 +55,6 @@ void jfs_read_inode(struct inode *inode)
|
||||
inode->i_op = &jfs_file_inode_operations;
|
||||
init_special_inode(inode, inode->i_mode, inode->i_rdev);
|
||||
}
|
||||
jfs_set_inode_flags(inode);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -59,6 +59,7 @@ int jfs_ioctl(struct inode * inode, struct file * filp, unsigned int cmd,
|
||||
|
||||
switch (cmd) {
|
||||
case JFS_IOC_GETFLAGS:
|
||||
jfs_get_inode_flags(jfs_inode);
|
||||
flags = jfs_inode->mode2 & JFS_FL_USER_VISIBLE;
|
||||
flags = jfs_map_ext2(flags, 0);
|
||||
return put_user(flags, (int __user *) arg);
|
||||
@ -78,6 +79,7 @@ int jfs_ioctl(struct inode * inode, struct file * filp, unsigned int cmd,
|
||||
if (!S_ISDIR(inode->i_mode))
|
||||
flags &= ~JFS_DIRSYNC_FL;
|
||||
|
||||
jfs_get_inode_flags(jfs_inode);
|
||||
oldflags = jfs_inode->mode2;
|
||||
|
||||
/*
|
||||
|
@ -3078,6 +3078,7 @@ static int copy_from_dinode(struct dinode * dip, struct inode *ip)
|
||||
|
||||
jfs_ip->fileset = le32_to_cpu(dip->di_fileset);
|
||||
jfs_ip->mode2 = le32_to_cpu(dip->di_mode);
|
||||
jfs_set_inode_flags(ip);
|
||||
|
||||
ip->i_mode = le32_to_cpu(dip->di_mode) & 0xffff;
|
||||
if (sbi->umask != -1) {
|
||||
@ -3174,6 +3175,7 @@ static void copy_to_dinode(struct dinode * dip, struct inode *ip)
|
||||
dip->di_gid = cpu_to_le32(ip->i_gid);
|
||||
else
|
||||
dip->di_gid = cpu_to_le32(jfs_ip->saved_gid);
|
||||
jfs_get_inode_flags(jfs_ip);
|
||||
/*
|
||||
* mode2 is only needed for storing the higher order bits.
|
||||
* Trust i_mode for the lower order ones
|
||||
|
@ -45,6 +45,24 @@ void jfs_set_inode_flags(struct inode *inode)
|
||||
inode->i_flags |= S_SYNC;
|
||||
}
|
||||
|
||||
void jfs_get_inode_flags(struct jfs_inode_info *jfs_ip)
|
||||
{
|
||||
unsigned int flags = jfs_ip->vfs_inode.i_flags;
|
||||
|
||||
jfs_ip->mode2 &= ~(JFS_IMMUTABLE_FL | JFS_APPEND_FL | JFS_NOATIME_FL |
|
||||
JFS_DIRSYNC_FL | JFS_SYNC_FL);
|
||||
if (flags & S_IMMUTABLE)
|
||||
jfs_ip->mode2 |= JFS_IMMUTABLE_FL;
|
||||
if (flags & S_APPEND)
|
||||
jfs_ip->mode2 |= JFS_APPEND_FL;
|
||||
if (flags & S_NOATIME)
|
||||
jfs_ip->mode2 |= JFS_NOATIME_FL;
|
||||
if (flags & S_DIRSYNC)
|
||||
jfs_ip->mode2 |= JFS_DIRSYNC_FL;
|
||||
if (flags & S_SYNC)
|
||||
jfs_ip->mode2 |= JFS_SYNC_FL;
|
||||
}
|
||||
|
||||
/*
|
||||
* NAME: ialloc()
|
||||
*
|
||||
|
@ -31,6 +31,7 @@ extern void jfs_truncate(struct inode *);
|
||||
extern void jfs_truncate_nolock(struct inode *, loff_t);
|
||||
extern void jfs_free_zero_link(struct inode *);
|
||||
extern struct dentry *jfs_get_parent(struct dentry *dentry);
|
||||
extern void jfs_get_inode_flags(struct jfs_inode_info *);
|
||||
extern void jfs_set_inode_flags(struct inode *);
|
||||
extern int jfs_get_block(struct inode *, sector_t, struct buffer_head *, int);
|
||||
|
||||
|
@ -45,7 +45,7 @@ do { \
|
||||
io_schedule(); \
|
||||
lock_cmd; \
|
||||
} \
|
||||
current->state = TASK_RUNNING; \
|
||||
__set_current_state(TASK_RUNNING); \
|
||||
remove_wait_queue(&wq, &__wait); \
|
||||
} while (0)
|
||||
|
||||
|
@ -1589,7 +1589,7 @@ void jfs_flush_journal(struct jfs_log *log, int wait)
|
||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
LOGGC_UNLOCK(log);
|
||||
schedule();
|
||||
current->state = TASK_RUNNING;
|
||||
__set_current_state(TASK_RUNNING);
|
||||
LOGGC_LOCK(log);
|
||||
remove_wait_queue(&target->gcwait, &__wait);
|
||||
}
|
||||
@ -2353,14 +2353,15 @@ int jfsIOWait(void *arg)
|
||||
lbmStartIO(bp);
|
||||
spin_lock_irq(&log_redrive_lock);
|
||||
}
|
||||
spin_unlock_irq(&log_redrive_lock);
|
||||
|
||||
if (freezing(current)) {
|
||||
spin_unlock_irq(&log_redrive_lock);
|
||||
refrigerator();
|
||||
} else {
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
spin_unlock_irq(&log_redrive_lock);
|
||||
schedule();
|
||||
current->state = TASK_RUNNING;
|
||||
__set_current_state(TASK_RUNNING);
|
||||
}
|
||||
} while (!kthread_should_stop());
|
||||
|
||||
|
@ -135,7 +135,7 @@ static inline void TXN_SLEEP_DROP_LOCK(wait_queue_head_t * event)
|
||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
TXN_UNLOCK();
|
||||
io_schedule();
|
||||
current->state = TASK_RUNNING;
|
||||
__set_current_state(TASK_RUNNING);
|
||||
remove_wait_queue(event, &wait);
|
||||
}
|
||||
|
||||
@ -2797,7 +2797,7 @@ int jfs_lazycommit(void *arg)
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
LAZY_UNLOCK(flags);
|
||||
schedule();
|
||||
current->state = TASK_RUNNING;
|
||||
__set_current_state(TASK_RUNNING);
|
||||
remove_wait_queue(&jfs_commit_thread_wait, &wq);
|
||||
}
|
||||
} while (!kthread_should_stop());
|
||||
@ -2989,7 +2989,7 @@ int jfs_sync(void *arg)
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
TXN_UNLOCK();
|
||||
schedule();
|
||||
current->state = TASK_RUNNING;
|
||||
__set_current_state(TASK_RUNNING);
|
||||
}
|
||||
} while (!kthread_should_stop());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user