Blame view
fs/udf/lowlevel.c
1.52 KB
1da177e4c
|
1 2 3 4 5 6 |
/* * lowlevel.c * * PURPOSE * Low Level Device Routines for the UDF filesystem * |
1da177e4c
|
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
* COPYRIGHT * This file is distributed under the terms of the GNU General Public * License (GPL). Copies of the GPL can be obtained from: * ftp://prep.ai.mit.edu/pub/gnu/GPL * Each contributing author retains all rights to their own work. * * (C) 1999-2001 Ben Fennema * * HISTORY * * 03/26/99 blf Created. */ #include "udfdecl.h" #include <linux/blkdev.h> #include <linux/cdrom.h> #include <asm/uaccess.h> |
1da177e4c
|
25 |
#include "udf_sb.h" |
cb00ea352
|
26 |
unsigned int udf_get_last_session(struct super_block *sb) |
1da177e4c
|
27 28 29 30 31 |
{ struct cdrom_multisession ms_info; unsigned int vol_desc_start; struct block_device *bdev = sb->s_bdev; int i; |
cb00ea352
|
32 33 34 |
vol_desc_start = 0; ms_info.addr_format = CDROM_LBA; i = ioctl_by_bdev(bdev, CDROMMULTISESSION, (unsigned long)&ms_info); |
1da177e4c
|
35 36 |
#define WE_OBEY_THE_WRITTEN_STANDARDS 1 |
cb00ea352
|
37 |
if (i == 0) { |
1da177e4c
|
38 39 |
udf_debug("XA disk: %s, vol_desc_start=%d ", |
cb00ea352
|
40 |
(ms_info.xa_flag ? "yes" : "no"), ms_info.addr.lba); |
1da177e4c
|
41 |
#if WE_OBEY_THE_WRITTEN_STANDARDS |
28de7948a
|
42 |
if (ms_info.xa_flag) /* necessary for a valid ms_info.addr */ |
1da177e4c
|
43 44 |
#endif vol_desc_start = ms_info.addr.lba; |
cb00ea352
|
45 |
} else { |
1da177e4c
|
46 47 48 49 50 |
udf_debug("CDROMMULTISESSION not supported: rc=%d ", i); } return vol_desc_start; } |
cb00ea352
|
51 |
unsigned long udf_get_last_block(struct super_block *sb) |
1da177e4c
|
52 53 54 |
{ struct block_device *bdev = sb->s_bdev; unsigned long lblock = 0; |
28de7948a
|
55 |
if (ioctl_by_bdev(bdev, CDROM_LAST_WRITTEN, (unsigned long) &lblock)) |
1da177e4c
|
56 57 58 59 60 61 62 |
lblock = bdev->bd_inode->i_size >> sb->s_blocksize_bits; if (lblock) return lblock - 1; else return 0; } |