/* * lowlevel.c * * PURPOSE * Low Level Device Routines for the UDF filesystem * * 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 <linux/uaccess.h> #include "udf_sb.h" unsigned int udf_get_last_session(struct super_block *sb) { struct cdrom_multisession ms_info; unsigned int vol_desc_start; struct block_device *bdev = sb->s_bdev; int i; vol_desc_start = 0; ms_info.addr_format = CDROM_LBA; i = ioctl_by_bdev(bdev, CDROMMULTISESSION, (unsigned long)&ms_info); if (i == 0) { udf_debug("XA disk: %s, vol_desc_start=%d\n", ms_info.xa_flag ? "yes" : "no", ms_info.addr.lba); if (ms_info.xa_flag) /* necessary for a valid ms_info.addr */ vol_desc_start = ms_info.addr.lba; } else { udf_debug("CDROMMULTISESSION not supported: rc=%d\n", i); } return vol_desc_start; } unsigned long udf_get_last_block(struct super_block *sb) { struct block_device *bdev = sb->s_bdev; unsigned long lblock = 0; /* * ioctl failed or returned obviously bogus value? * Try using the device size... */ if (ioctl_by_bdev(bdev, CDROM_LAST_WRITTEN, (unsigned long) &lblock) || lblock == 0) lblock = bdev->bd_inode->i_size >> sb->s_blocksize_bits; if (lblock) return lblock - 1; else return 0; } a href='/cgit.cgi/linux/net-next.git/refs/?id=d19fb70dd68c4e960e2ac09b0b9c79dfdeefa726'>refs</a><a class='active' href='/cgit.cgi/linux/net-next.git/log/tools/perf/scripts/python/stackcollapse.py'>log</a><a href='/cgit.cgi/linux/net-next.git/tree/tools/perf/scripts/python/stackcollapse.py?id=d19fb70dd68c4e960e2ac09b0b9c79dfdeefa726'>tree</a><a href='/cgit.cgi/linux/net-next.git/commit/tools/perf/scripts/python/stackcollapse.py?id=d19fb70dd68c4e960e2ac09b0b9c79dfdeefa726'>commit</a><a href='/cgit.cgi/linux/net-next.git/diff/tools/perf/scripts/python/stackcollapse.py?id=d19fb70dd68c4e960e2ac09b0b9c79dfdeefa726'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/tools/perf/scripts/python/stackcollapse.py'> <input type='hidden' name='id' value='d19fb70dd68c4e960e2ac09b0b9c79dfdeefa726'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/cgit.cgi/linux/net-next.git/log/?id=d19fb70dd68c4e960e2ac09b0b9c79dfdeefa726'>root</a>/<a href='/cgit.cgi/linux/net-next.git/log/tools?id=d19fb70dd68c4e960e2ac09b0b9c79dfdeefa726'>tools</a>/<a href='/cgit.cgi/linux/net-next.git/log/tools/perf?id=d19fb70dd68c4e960e2ac09b0b9c79dfdeefa726'>perf</a>/<a href='/cgit.cgi/linux/net-next.git/log/tools/perf/scripts?id=d19fb70dd68c4e960e2ac09b0b9c79dfdeefa726'>scripts</a>/<a href='/cgit.cgi/linux/net-next.git/log/tools/perf/scripts/python?id=d19fb70dd68c4e960e2ac09b0b9c79dfdeefa726'>python</a>/<a href='/cgit.cgi/linux/net-next.git/log/tools/perf/scripts/python/stackcollapse.py?id=d19fb70dd68c4e960e2ac09b0b9c79dfdeefa726'>stackcollapse.py</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th class='left'>Age</th><th class='left'>Commit message (<a href='/cgit.cgi/linux/net-next.git/log/tools/perf/scripts/python/stackcollapse.py?id=d19fb70dd68c4e960e2ac09b0b9c79dfdeefa726&showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>