Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
53c7d2b7
Commit
53c7d2b7
authored
Aug 03, 2006
by
Greg Kroah-Hartman
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-linus' of
git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6
parents
efe78cda
8bcb2839
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
120 additions
and
15 deletions
+120
-15
fs/jfs/inode.c
fs/jfs/inode.c
+4
-12
fs/jfs/jfs_inode.h
fs/jfs/jfs_inode.h
+1
-0
fs/jfs/super.c
fs/jfs/super.c
+115
-3
No files found.
fs/jfs/inode.c
View file @
53c7d2b7
...
...
@@ -168,16 +168,15 @@ void jfs_dirty_inode(struct inode *inode)
set_cflag
(
COMMIT_Dirty
,
inode
);
}
static
int
jfs_get_blocks
(
struct
inode
*
ip
,
sector_t
lblock
,
unsigned
long
max_blocks
,
struct
buffer_head
*
bh_result
,
int
create
)
int
jfs_get_block
(
struct
inode
*
ip
,
sector_t
lblock
,
struct
buffer_head
*
bh_result
,
int
create
)
{
s64
lblock64
=
lblock
;
int
rc
=
0
;
xad_t
xad
;
s64
xaddr
;
int
xflag
;
s32
xlen
=
max_block
s
;
s32
xlen
=
bh_result
->
b_size
>>
ip
->
i_blkbit
s
;
/*
* Take appropriate lock on inode
...
...
@@ -188,7 +187,7 @@ jfs_get_blocks(struct inode *ip, sector_t lblock, unsigned long max_blocks,
IREAD_LOCK
(
ip
);
if
(((
lblock64
<<
ip
->
i_sb
->
s_blocksize_bits
)
<
ip
->
i_size
)
&&
(
!
xtLookup
(
ip
,
lblock64
,
max_blocks
,
&
xflag
,
&
xaddr
,
&
xlen
,
0
))
&&
(
!
xtLookup
(
ip
,
lblock64
,
xlen
,
&
xflag
,
&
xaddr
,
&
xlen
,
0
))
&&
xaddr
)
{
if
(
xflag
&
XAD_NOTRECORDED
)
{
if
(
!
create
)
...
...
@@ -255,13 +254,6 @@ jfs_get_blocks(struct inode *ip, sector_t lblock, unsigned long max_blocks,
return
rc
;
}
static
int
jfs_get_block
(
struct
inode
*
ip
,
sector_t
lblock
,
struct
buffer_head
*
bh_result
,
int
create
)
{
return
jfs_get_blocks
(
ip
,
lblock
,
bh_result
->
b_size
>>
ip
->
i_blkbits
,
bh_result
,
create
);
}
static
int
jfs_writepage
(
struct
page
*
page
,
struct
writeback_control
*
wbc
)
{
return
nobh_writepage
(
page
,
jfs_get_block
,
wbc
);
...
...
fs/jfs/jfs_inode.h
View file @
53c7d2b7
...
...
@@ -32,6 +32,7 @@ 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_set_inode_flags
(
struct
inode
*
);
extern
int
jfs_get_block
(
struct
inode
*
,
sector_t
,
struct
buffer_head
*
,
int
);
extern
const
struct
address_space_operations
jfs_aops
;
extern
struct
inode_operations
jfs_dir_inode_operations
;
...
...
fs/jfs/super.c
View file @
53c7d2b7
...
...
@@ -26,6 +26,7 @@
#include <linux/moduleparam.h>
#include <linux/kthread.h>
#include <linux/posix_acl.h>
#include <linux/buffer_head.h>
#include <asm/uaccess.h>
#include <linux/seq_file.h>
...
...
@@ -298,7 +299,7 @@ static int parse_options(char *options, struct super_block *sb, s64 *newLVSize,
break
;
}
#if
defined(CONFIG_QUOTA)
#if
def CONFIG_QUOTA
case
Opt_quota
:
case
Opt_usrquota
:
*
flag
|=
JFS_USRQUOTA
;
...
...
@@ -597,7 +598,7 @@ static int jfs_show_options(struct seq_file *seq, struct vfsmount *vfs)
if
(
sbi
->
flag
&
JFS_NOINTEGRITY
)
seq_puts
(
seq
,
",nointegrity"
);
#if
defined(CONFIG_QUOTA)
#if
def CONFIG_QUOTA
if
(
sbi
->
flag
&
JFS_USRQUOTA
)
seq_puts
(
seq
,
",usrquota"
);
...
...
@@ -608,6 +609,113 @@ static int jfs_show_options(struct seq_file *seq, struct vfsmount *vfs)
return
0
;
}
#ifdef CONFIG_QUOTA
/* Read data from quotafile - avoid pagecache and such because we cannot afford
* acquiring the locks... As quota files are never truncated and quota code
* itself serializes the operations (and noone else should touch the files)
* we don't have to be afraid of races */
static
ssize_t
jfs_quota_read
(
struct
super_block
*
sb
,
int
type
,
char
*
data
,
size_t
len
,
loff_t
off
)
{
struct
inode
*
inode
=
sb_dqopt
(
sb
)
->
files
[
type
];
sector_t
blk
=
off
>>
sb
->
s_blocksize_bits
;
int
err
=
0
;
int
offset
=
off
&
(
sb
->
s_blocksize
-
1
);
int
tocopy
;
size_t
toread
;
struct
buffer_head
tmp_bh
;
struct
buffer_head
*
bh
;
loff_t
i_size
=
i_size_read
(
inode
);
if
(
off
>
i_size
)
return
0
;
if
(
off
+
len
>
i_size
)
len
=
i_size
-
off
;
toread
=
len
;
while
(
toread
>
0
)
{
tocopy
=
sb
->
s_blocksize
-
offset
<
toread
?
sb
->
s_blocksize
-
offset
:
toread
;
tmp_bh
.
b_state
=
0
;
tmp_bh
.
b_size
=
1
<<
inode
->
i_blkbits
;
err
=
jfs_get_block
(
inode
,
blk
,
&
tmp_bh
,
0
);
if
(
err
)
return
err
;
if
(
!
buffer_mapped
(
&
tmp_bh
))
/* A hole? */
memset
(
data
,
0
,
tocopy
);
else
{
bh
=
sb_bread
(
sb
,
tmp_bh
.
b_blocknr
);
if
(
!
bh
)
return
-
EIO
;
memcpy
(
data
,
bh
->
b_data
+
offset
,
tocopy
);
brelse
(
bh
);
}
offset
=
0
;
toread
-=
tocopy
;
data
+=
tocopy
;
blk
++
;
}
return
len
;
}
/* Write to quotafile */
static
ssize_t
jfs_quota_write
(
struct
super_block
*
sb
,
int
type
,
const
char
*
data
,
size_t
len
,
loff_t
off
)
{
struct
inode
*
inode
=
sb_dqopt
(
sb
)
->
files
[
type
];
sector_t
blk
=
off
>>
sb
->
s_blocksize_bits
;
int
err
=
0
;
int
offset
=
off
&
(
sb
->
s_blocksize
-
1
);
int
tocopy
;
size_t
towrite
=
len
;
struct
buffer_head
tmp_bh
;
struct
buffer_head
*
bh
;
mutex_lock
(
&
inode
->
i_mutex
);
while
(
towrite
>
0
)
{
tocopy
=
sb
->
s_blocksize
-
offset
<
towrite
?
sb
->
s_blocksize
-
offset
:
towrite
;
tmp_bh
.
b_state
=
0
;
tmp_bh
.
b_size
=
1
<<
inode
->
i_blkbits
;
err
=
jfs_get_block
(
inode
,
blk
,
&
tmp_bh
,
1
);
if
(
err
)
goto
out
;
if
(
offset
||
tocopy
!=
sb
->
s_blocksize
)
bh
=
sb_bread
(
sb
,
tmp_bh
.
b_blocknr
);
else
bh
=
sb_getblk
(
sb
,
tmp_bh
.
b_blocknr
);
if
(
!
bh
)
{
err
=
-
EIO
;
goto
out
;
}
lock_buffer
(
bh
);
memcpy
(
bh
->
b_data
+
offset
,
data
,
tocopy
);
flush_dcache_page
(
bh
->
b_page
);
set_buffer_uptodate
(
bh
);
mark_buffer_dirty
(
bh
);
unlock_buffer
(
bh
);
brelse
(
bh
);
offset
=
0
;
towrite
-=
tocopy
;
data
+=
tocopy
;
blk
++
;
}
out:
if
(
len
==
towrite
)
return
err
;
if
(
inode
->
i_size
<
off
+
len
-
towrite
)
i_size_write
(
inode
,
off
+
len
-
towrite
);
inode
->
i_version
++
;
inode
->
i_mtime
=
inode
->
i_ctime
=
CURRENT_TIME
;
mark_inode_dirty
(
inode
);
mutex_unlock
(
&
inode
->
i_mutex
);
return
len
-
towrite
;
}
#endif
static
struct
super_operations
jfs_super_operations
=
{
.
alloc_inode
=
jfs_alloc_inode
,
.
destroy_inode
=
jfs_destroy_inode
,
...
...
@@ -621,7 +729,11 @@ static struct super_operations jfs_super_operations = {
.
unlockfs
=
jfs_unlockfs
,
.
statfs
=
jfs_statfs
,
.
remount_fs
=
jfs_remount
,
.
show_options
=
jfs_show_options
.
show_options
=
jfs_show_options
,
#ifdef CONFIG_QUOTA
.
quota_read
=
jfs_quota_read
,
.
quota_write
=
jfs_quota_write
,
#endif
};
static
struct
export_operations
jfs_export_operations
=
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment