index
:
litmus-rt.git
archive/unc-master-3.0
archived-2013.1
archived-private-master
archived-semi-part
demo
ecrts-pgm-final
ecrts14-pgm-final
gpusync-rtss12
gpusync/staging
linux-tip
litmus2008-patch-series
master
pgm
prop/litmus-signals
prop/robust-tie-break
staging
test
tracing-devel
v2.6.34-with-arm-patches
v2015.1
wip-2011.2-bbb
wip-2011.2-bbb-trace
wip-2012.3-gpu
wip-2012.3-gpu-preport
wip-2012.3-gpu-rtss13
wip-2012.3-gpu-sobliv-budget-w-kshark
wip-aedzl-final
wip-aedzl-revised
wip-arbit-deadline
wip-aux-tasks
wip-bbb
wip-bbb-prio-don
wip-better-break
wip-binary-heap
wip-budget
wip-color
wip-color-jlh
wip-d10-hz1000
wip-default-clustering
wip-dissipation-jerickso
wip-dissipation2-jerickso
wip-ecrts14-pgm
wip-edf-hsb
wip-edf-os
wip-edf-tie-break
wip-edzl-critique
wip-edzl-final
wip-edzl-revised
wip-events
wip-extra-debug
wip-fix-switch-jerickso
wip-fix3
wip-fmlp-dequeue
wip-ft-irq-flag
wip-gpu-cleanup
wip-gpu-interrupts
wip-gpu-rtas12
wip-gpu-rtss12
wip-gpu-rtss12-srp
wip-gpusync-merge
wip-ikglp
wip-k-fmlp
wip-kernel-coloring
wip-kernthreads
wip-klmirqd-to-aux
wip-kshark
wip-litmus-3.2
wip-litmus2011.2
wip-litmus3.0-2011.2
wip-master-2.6.33-rt
wip-mc
wip-mc-bipasa
wip-mc-jerickso
wip-mc2-cache-slack
wip-mcrit-mac
wip-merge-3.0
wip-merge-v3.0
wip-migration-affinity
wip-mmap-uncache
wip-modechange
wip-nested-locking
wip-omlp-gedf
wip-pai
wip-percore-lib
wip-performance
wip-pgm
wip-pgm-split
wip-pm-ovd
wip-prio-inh
wip-prioq-dgl
wip-refactored-gedf
wip-release-master-fix
wip-robust-tie-break
wip-rt-kshark
wip-rtas12-pgm
/*
* linux/fs/befs/io.c
*
* Copyright (C) 2001 Will Dyson <will_dyson@pobox.com
*
* Based on portions of file.c and inode.c
* by Makoto Kato (m_kato@ga2.so-net.ne.jp)
*
* Many thanks to Dominic Giampaolo, author of Practical File System
* Design with the Be File System, for such a helpful book.
*
*/
#include <linux/buffer_head.h>
#include
"befs.h"
#include
"io.h"
/*
* Converts befs notion of disk addr to a disk offset and uses
* linux kernel function sb_bread() to get the buffer containing
* the offset. -Will Dyson
*
*/
struct
buffer_head
*
befs_bread_iaddr
(
struct
super_block
*
sb
,
befs_inode_addr iaddr
)
{
struct
buffer_head
*
bh
=
NULL
;
befs_blocknr_t block
=
0
;
befs_sb_info
*
befs_sb
=
BEFS_SB
(
sb
);
befs_debug
(
sb
,
"---> Enter %s "
"[%u, %hu, %hu]"
,
__func__
,
iaddr
.
allocation_group
,
iaddr
.
start
,
iaddr
.
len
);
if
(
iaddr
.
allocation_group
>
befs_sb
->
num_ags
) {
befs_error
(
sb
,
"BEFS: Invalid allocation group %u, max is %u"
,
iaddr
.
allocation_group
,
befs_sb
->
num_ags
);
goto
error
;
}
block
=
iaddr2blockno
(
sb
, &
iaddr
);
befs_debug
(
sb
,
"%s: offset = %lu"
,
__func__
, (
unsigned long
)
block
);
bh
=
sb_bread
(
sb
,
block
);
if
(
bh
==
NULL
) {
befs_error
(
sb
,
"Failed to read block %lu"
,
(
unsigned long
)
block
);
goto
error
;
}
befs_debug
(
sb
,
"<--- %s"
,
__func__
);
return
bh
;
error
:
befs_debug
(
sb
,
"<--- %s ERROR"
,
__func__
);
return
NULL
;
}
struct
buffer_head
*
befs_bread
(
struct
super_block
*
sb
,
befs_blocknr_t block
)
{
struct
buffer_head
*
bh
=
NULL
;
befs_debug
(
sb
,
"---> Enter %s %lu"
,
__func__
, (
unsigned long
)
block
);
bh
=
sb_bread
(
sb
,
block
);
if
(
bh
==
NULL
) {
befs_error
(
sb
,
"Failed to read block %lu"
,
(
unsigned long
)
block
);
goto
error
;
}
befs_debug
(
sb
,
"<--- %s"
,
__func__
);
return
bh
;
error
:
befs_debug
(
sb
,
"<--- %s ERROR"
,
__func__
);
return
NULL
;
}